近日,完成了一个集团GOS系统中间件取数需求:
1、读取ORACLE数据库表数据放入SQLserver中.
2、读取ERP-SAP RFC的数据放入SQLserver中.
在需求1中,我们实现了EF6 on oracle ,为以后的联通使用oracle提供了可能。
在程序部署方面,需要注意的是:
1、部署环境需要安装ODTwithODAC1120320_32bit
2、部署环境需要准备 D:\ODT\app\client\james\product\12.1.0\client_1\Network\Admin目录中,有sqlnet.ora和tnsnames.ora文件。
sqlnet.ora文件:
# sqlnet.ora Network Configuration File: D:\app\james\product\11.2.0\client_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
tnsnames.ora文件:
JCDMS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.23.1.0 )(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = JCDMS )
)
)
在需求2中,使用的关键技术有
1、EF6缓存
使用EF6缓存,可以避免LINQ每次都去读取数据库,带来万倍的性能提升,
这个caching组件来源于VS2010的Nuget,要专门下载。
using EntityFramework.Caching;
使用很简单,只要在LINQ读数据时,加入自带的方法就行,还可以设置缓存时间。
var q1 = from c in db_gos.TI_WCAUTO_PRODSTOCK_M.FromCache(CachePolicy.WithDurationExpiration(TimeSpan.FromSeconds(10))) select c;
2、全数据更新策略
经过几次中间件传输的开发,这么可以明确一种全数据传输策略:
第一步,源数据库读取数据放SAPsend内存中
第二步,目的数据库读取数据放SAPsend内存中
第三步,以主键字段作为识别条件,比对原数据库和目的数据库的每一条记录,
如果源数据在目的数据库中有,对主键以外的字段,执行数据库修改操作。
如果源数据在目的数据库中没有,对主键以外的字段,执行数据库插入操作。
可以看到,对数据表中主键的定义也是很重要的。
3、并行多核计算
99%的程序都只用到单核,终于这里有一个使用了多核。在上面第三步,原数据和目的数据的比对,是一个大量计算的过程。intel x64 CPU大力发展的今天,一个最差的服务器至少也有10线程以上,如果在复杂的计算中能够用尽CPU的资源,才能使SAPsend从容应对大数据,全数据更新。MS为我们提供的并行计算粉墨登场,因为使用的多核并行计算,在我的破笔记本i3 3110M 4核上,做10000条数据中比对10000次的操作,只需要几十秒钟完成!
本文介绍了GOS系统中间件实现Oracle数据库与SQL Server之间的数据同步过程,包括使用EF6缓存提高性能,全数据更新策略确保数据一致性,以及通过并行计算提升效率。
731

被折叠的 条评论
为什么被折叠?



