优雅的linq润滑在复杂的业务环境中(上)
2016-02-28 21:48
295 查看
业务环境:
SAP系统的物料主数据每天需要同步(传输)到WMS系统中去,数据量大概是一万条,每条60个字段。
一直以来,接口的开发人员只会关注接口的数据传输,但这一次情况不一样了。
这次我做了一个全套:
1. SAP中写RFC函数(设计数据抓取逻辑)
2. C# WINFORM程序传输(设计程序功能)
3. WMS 的数据库设计及后续处理
整个数据的来龙去脉,这三部分内容都由我来完成,这使我从更高的角度考虑怎么去满足这个需求,设计得简单再简单。
加之后续BI项目伊始,BI系统对SAP的数据抽取也会大量使用此接口功能,所以我决心做得完美一点,以后也是方便自己。
功能设计:
SAP部分: 推翻以前顾问,对其它系统传主数据时,使用的按日期抓取数据的逻辑(原设计缺陷是接口程序停工一次,可能漏掉一天中新更新的数据)。
每次抓取全部主数据,今天的服务器硬件处理一万条60个字段的数据,简直不值得一提。
接口程序部分:
第一步,SAP的物料主数据表,调用一次RFC获得
第二步,获取WMS现有的物料主数据表
第三步,比较SAP和WMS的数据,主键相同的行,用SAP行去修改WMS行(可选记录修改的字段,修改前的值,修改后的值,存入专门的一张字段修改表中)
第四步,SAP去比较WMS的数据,如果主键不同,应为新增数据,对WMS数据库表做插入操作
全部功能简单的说,就是SAP对WMS数据,相同的修改,不同的插入,并带有记录功能。这就是物料主数据更新策略。
要实现上述的功能,有很多技术,而我只想找到最简单的那一种。
linq to object在之前的对象服务器中用的比较熟了,但这次应该是需要linq to SQL.
百度了几个网页,发现果然linq to SQL就是我想要的,不去拼接SQL,不去写那60个字段,不去配置ORM。。。。连一下数据库,拖个表对象,
程序中就可以直接使用,呵呵。
一开始,我把2个系统的主数据表,放到2张C# 的datatable中,然后比较相同的放入第3长table中,不同的放第4张table中,在更新数据库时遇到了问题,
百度了上百个页面,阳光明媚的整整一个周五都浪费了,硬是没搞出来。周6,我换了一个思路,linq出来的var和list就可以处理了,不必要搞成datatable。
问题迎刃而解,而且使用的linq foreach来更新,就我看来,这点数据,我是完全可以牺牲一点点性能来换得高级语言的优雅和简洁。
现在我写程序,编码的时间和工作量才是我首要关注的。
最后即使用linq foreach更新数据库,5000条数据也只需要几分钟完成,还是在家的笔记本上测试。
星期一,我会到实际环境继续测试,我想问题不大。该接口程序被命名为SAPsend,估计以后会大量出现在我们的BI项目中。
SAP系统的物料主数据每天需要同步(传输)到WMS系统中去,数据量大概是一万条,每条60个字段。
一直以来,接口的开发人员只会关注接口的数据传输,但这一次情况不一样了。
这次我做了一个全套:
1. SAP中写RFC函数(设计数据抓取逻辑)
2. C# WINFORM程序传输(设计程序功能)
3. WMS 的数据库设计及后续处理
整个数据的来龙去脉,这三部分内容都由我来完成,这使我从更高的角度考虑怎么去满足这个需求,设计得简单再简单。
加之后续BI项目伊始,BI系统对SAP的数据抽取也会大量使用此接口功能,所以我决心做得完美一点,以后也是方便自己。
功能设计:
SAP部分: 推翻以前顾问,对其它系统传主数据时,使用的按日期抓取数据的逻辑(原设计缺陷是接口程序停工一次,可能漏掉一天中新更新的数据)。
每次抓取全部主数据,今天的服务器硬件处理一万条60个字段的数据,简直不值得一提。
接口程序部分:
第一步,SAP的物料主数据表,调用一次RFC获得
第二步,获取WMS现有的物料主数据表
第三步,比较SAP和WMS的数据,主键相同的行,用SAP行去修改WMS行(可选记录修改的字段,修改前的值,修改后的值,存入专门的一张字段修改表中)
第四步,SAP去比较WMS的数据,如果主键不同,应为新增数据,对WMS数据库表做插入操作
全部功能简单的说,就是SAP对WMS数据,相同的修改,不同的插入,并带有记录功能。这就是物料主数据更新策略。
要实现上述的功能,有很多技术,而我只想找到最简单的那一种。
linq to object在之前的对象服务器中用的比较熟了,但这次应该是需要linq to SQL.
百度了几个网页,发现果然linq to SQL就是我想要的,不去拼接SQL,不去写那60个字段,不去配置ORM。。。。连一下数据库,拖个表对象,
程序中就可以直接使用,呵呵。
一开始,我把2个系统的主数据表,放到2张C# 的datatable中,然后比较相同的放入第3长table中,不同的放第4张table中,在更新数据库时遇到了问题,
百度了上百个页面,阳光明媚的整整一个周五都浪费了,硬是没搞出来。周6,我换了一个思路,linq出来的var和list就可以处理了,不必要搞成datatable。
问题迎刃而解,而且使用的linq foreach来更新,就我看来,这点数据,我是完全可以牺牲一点点性能来换得高级语言的优雅和简洁。
现在我写程序,编码的时间和工作量才是我首要关注的。
最后即使用linq foreach更新数据库,5000条数据也只需要几分钟完成,还是在家的笔记本上测试。
星期一,我会到实际环境继续测试,我想问题不大。该接口程序被命名为SAPsend,估计以后会大量出现在我们的BI项目中。
相关文章推荐
- POJ 1611 The Suspects(并查集)
- 第三百三十二天 how can I 坚持
- 应邀ITGeGe在线教育社区嵌入式基础开发讲师
- 应邀ITGeGe在线教育社区嵌入式基础开发讲师
- ios 粒子开发
- Square对iOS App架构的新尝试---Ziggurat
- 应邀ITGeGe在线教育社区嵌入式基础开发讲师
- 程序设计——意图与逻辑
- BZOJ3130费用流
- sql小结
- Android 用Animation-list实现逐帧动画
- C++所有类型的定义
- ubuntu中pip安装redis-py及pip的使用
- Memcache学习总结
- extern "c"用法解析
- 1、提供推荐 Python代码
- Spting使用memcached
- Codeforces 417E Square Table(随机算法)
- java8 环境搭建(windows)
- 简易复数类