SAPsender中间件2016版

来源:互联网 发布:linux graphics.h 编辑:程序博客网 时间:2024/05/16 18:10

近日,完成了一个集团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次的操作,只需要几十秒钟完成!

试试片描述

0 0
原创粉丝点击