浅谈两个数据库间同步问题

企业级数据库间数据同步策略与实现

我要说的两个数据库指ORACLE和MYSQL间的数据同步。

应用场景如下:

一个公司下有很多地市都有业务,每个地市有很多销售店面,公司内部有一套自己的系统,使用ORACLE,公司和地市都是用这个ORACLE系统,而每个店面也有一套自己的销售系统,每个门店都使用各自的MYSQL数据库,因此产生了ORACLE和MYSQL间的数据同步问题。公司负责生产资料维护,店面组织管理,人员管理,物流配货,采购,财务统计,库存管理等,而店面主要是销售和自己的库存管理,店面需要从ORACLE获取最新基本资料,同时上传最新销售信息,本店库存变化和调货申请等。

基本资料只能由公司和地市录入,各个店面只需下载自己店面的资料或者店面所在地市的资料即可;

销售资料,有时店面会将票价直接给公司或地市,由公司或地市录入,这种情况主要是些特殊情况,因此销售数据会在两端都被修改;以店面的为准;

库存资料,每个门店用一个自己的仓库,地市由多个仓库,地市和门店间通过物流配货,调货等流程形成出入库,一般都是门店自己管理,然后上传店面库存,特殊情况下地市也会帮门店申请调货,配货等,因此库存也在两端都会修改,也是以店面为准。

有个别资料是两端都修改的,但是以公司的为准;

 

上面的“以XX为准”也就是如果有数据冲突就以XX的数据覆盖另外一方的数据。

 

数据同步在互联网环境下进行。

 

由于互联网环境下运行,因此不考虑用RMI,对web service的效率不满意,直接使用SOCKET开发的工作量比较大,因此也不考虑用web service,我们选定用hessian+tomcat,以HTTP协议通信,当然也可以以HTTPS协议通信。

由于业务还在不断变化,因此考虑整个同步过程不以业务为单位,而是以表为单位,极个别的需要以业务为单位的额外处理,因此我们将表间的数据都采用MAP存储。

 

 

上位机面试题 C#-IOC框架 什么是值类型和引用类型他们的本质区别是 抽象类和接口的区别 什么是委托他和事件有什么区别 IOC依赖注入怎么注入 C#集合简单介绍 简单阐述一下C#GC垃圾回收机制 依赖注入的核心思想 依赖注入的三个生命周期 Netcore 1.可以简单简述一下什么是中件吗,中的redis能简单阐述一下吗 2.JWT是个什么机制? 3.讲一下过滤器和中件的区别 4.什么是landam表达式 5.讲述一下C#里的集合,如果频繁进行增删查改操作需要用到什么集合 6.什么是泛型,为什么需要使用泛型 7.多态是什么 8.C#重载是什么 9.接口和抽象类的区别 10.值类型和引用类型的本质区别 11.什么是装箱?什么是拆箱? 12.讲一下为什么要推荐面向接口编程 13.设计模式有了解吗 WPF 1.依赖属性的应用,什么是依赖属性 2.WPF里面的命令是什么?有什么作用 3.浅谈一下mvvm模型 4.讲述你常用ORM框架 5.WPF的动画如何实现?(动画监听) 6.WPF用户控件如何进行绑定,你有封装过吗? 7. 多线程 讲一下为什么要用多线程,多线程的关键字是什么 如何保证多线程同步机制 如果我要采集500台机器,你怎么防止网络堵塞,和保证数据的实时采集 通讯协议 1.简述一下串口通讯协议 2.Modbus协议是什么 3.西门子S7通讯协议是怎么样的 4.简单阐述一下TCP三次握手协议 数据库 1.数据库索引 2.索引的数据结构 3.索引采用什么数据结构存储,在不同的数据库引擎中 4.浅谈一下数据库里面视图,存储过程。 UML 讲述一下软件生命周期步骤 分别解答下上述面试问题
08-21
上位机开发通常涉及与下位机(如PLC、传感器、嵌入式设备等)进行通信和数据交互,是工业自动化、智能制造等领域的关键技术之一。在准备上位机开发相关的技术面试时,以下是一些常见且核心的技术问题及详细解答,涵盖C#、.NET Core、WPF、多线程、通信协议、数据库、UML等多个方面。 ### C# 基础与高级特性 #### IOC框架 IOC(控制反转)是一种设计原则,用于降低代码之间的耦合度,常见实现方式是依赖注入(DI)。C#中常用的IOC框架包括Unity、DryIoc、Autofac等。这些框架通过容器管理对象的生命周期,并自动解析依赖关系。例如,在Prism框架中,Unity或DryIoc被用作默认的IOC容器,支持构造函数注入、属性注入等方式[^2]。 #### 值类型与引用类型区别 值类型(如int、double、struct)直接存储数据,变量之间赋值是复制值;引用类型(如class、string、interface)存储的是对象的引用地址,变量之间赋值是复制引用。值类型存储在栈上,引用类型存储在堆上。装箱和拆箱操作会影响性能,应尽量避免频繁使用。 #### 抽象类与接口区别 抽象类用于定义一组具有默认实现的类,支持部分实现;接口仅定义行为规范,不提供实现(C# 8.0后允许默认实现)。一个类只能继承一个抽象类,但可以实现多个接口。接口适合用于跨层次、跨模块的契约定义,而抽象类适合于具有继承关系的共享逻辑。 #### 委托与事件区别 委托是一种类型安全的函数指针,用于封装方法的引用;事件是基于委托的封装,用于实现观察者模式。事件对外提供订阅和取消订阅的方法,而委托可以直接调用。事件通常用于WPF、WinForm等UI编程中处理用户交互。 ```csharp public delegate void MyDelegate(string message); public event MyDelegate MyEvent; ``` #### 依赖注入原理与生命周期 依赖注入通过构造函数、属性或方法注入依赖对象,实现松耦合。IOC容器管理对象的生命周期,通常有三种模式:瞬态(Transient,每次请求都创建新实例)、作用域(Scoped,每个请求生命周期内共享)、单例(Singleton,整个应用程序生命周期内共享)。 #### Lambda表达式 Lambda表达式是一种简洁的匿名函数写法,常用于LINQ查询和委托参数传递。语法为 `(参数) => 表达式` 或 `(参数) => { 语句块 }`。 ```csharp List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; var even = numbers.Where(n => n % 2 == 0); ``` #### 集合选择 - `List<T>`:动态数组,适用于频繁读取、追加操作。 - `Dictionary<TKey, TValue>`:键值对集合,适用于快速查找。 - `HashSet<T>`:无重复元素集合,适用于集合运算。 - `Queue<T>` 和 `Stack<T>`:分别用于先进先出和后进先出场景。 #### 泛型 泛型允许将类型参数化,提高代码复用性和类型安全性。例如,`List<T>` 是泛型集合,避免了装箱拆箱带来的性能损耗。 #### 多态与重载 多态是指同一接口在不同子类中有不同实现,通过虚方法(virtual)和方法重写(override)实现。重载是指在同一类中定义多个同名方法,参数不同(类型、数量、顺序)。 #### 面向接口编程 面向接口编程强调定义清晰的行为契约,通过接口解耦实现细节,提高系统的可扩展性和可测试性。 ### WPF 核心机制 #### 依赖属性 依赖属性是WPF中用于支持绑定、动画、样式等特性的属性系统,继承自`DependencyObject`,通过`GetValue`和`SetValue`访问。 #### 命令与MVVM 命令(ICommand)用于将UI操作绑定到ViewModel中的方法,实现MVVM(Model-View-ViewModel)架构。MVVM通过绑定和命令解耦UI逻辑和业务逻辑,提升代码可维护性。 ```csharp public class RelayCommand : ICommand { private readonly Action<object> _execute; private readonly Predicate<object> _canExecute; public RelayCommand(Action<object> execute, Predicate<object> canExecute = null) { _execute = execute; _canExecute = canExecute; } public bool CanExecute(object parameter) { return _canExecute == null || _canExecute(parameter); } public void Execute(object parameter) { _execute(parameter); } public event EventHandler CanExecuteChanged; } ``` #### ORM ORM(对象关系映射)用于将数据库表映射为C#对象,常见的ORM框架有Entity Framework、Dapper等。Entity Framework支持LINQ查询、迁移、自动建模等功能。 #### 动画绑定与用户控件绑定 WPF支持通过XAML定义动画,并通过绑定机制实现动态UI更新。用户控件(UserControl)可以封装可复用的UI组件,并通过依赖属性实现数据绑定。 ### 多线程与并发 #### 同步机制 C#中常见的同步机制包括`lock`、`Monitor`、`Mutex`、`Semaphore`、`ReaderWriterLockSlim`等,用于保护共享资源防止并发冲突。 #### 网络采集优化 在网络通信中,优化手段包括使用异步编程(async/await)、缓冲区管理、连接池、压缩数据传输等。 ### 通信协议 #### 串口协议 串口通信常用于工业设备数据传输,使用`System.IO.Ports.SerialPort`类实现,需设置波特率、数据位、停止位等参数。 #### Modbus协议 Modbus是一种通用的工业通信协议,支持RTU和ASCII两种编码方式,常用于PLC与上位机通信。 #### S7协议 S7协议是西门子PLC专用通信协议,用于读写PLC内存区域,可通过第三方库如S7.NET实现。 #### TCP三次握手 TCP建立连接的过程为三次握手:客户端发送SYN,服务器回应SYN-ACK,客户端再发送ACK确认,完成连接建立。 ### 数据库 #### 索引结构 数据库索引分为聚集索引(Clustered Index)和非聚集索引(Non-clustered Index),聚集索引决定了数据的物理存储顺序,非聚集索引包含指向数据的指针。 #### 视图与存储过程 视图是虚拟表,简化复杂查询;存储过程是预编译的SQL代码块,提升性能并减少网络传输。 ### 软件工程与架构 #### 软件生命周期 软件生命周期包括需求分析、设计、开发、测试、部署、维护等阶段,遵循瀑布模型、敏捷开发等方法。 #### UML UML(统一建模语言)用于可视化建模,常见图包括类图、时序图、状态图、活动图等,帮助设计系统结构和交互流程。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值