我需要建立一个Web应用程序,它将与现有的ERP系统(WiMAGi)进行交互。erp基本上是xbase(foxpro)数据库的前端。数据库位于内部服务器上。据我所知,erp没有api,但可以通过edi模块接受订单等。web应用程序应该能够接受在线订单并查询数据以进行报告。
我目前的计划是:
将Xbase DB同步到云托管虚拟机上的SQL Server实例。
(从ERP->SQL Server单向)
使用此同步过程作为ERP和Web应用程序之间的接口。
使用edi将采购订单推回到erp。
我在这里的想法是,从数据并发的角度来看,通过一个受控制和接受的(erp)接口在erp中创建或更新数据会更安全。
问题/关注:
从xbase数据库更新sql db的最佳方法是什么?是否有任何预先存在的图书馆可以做到这一点,所以我不必重新发明方向盘?
同步期间Xbase数据库是否会被锁定?否则会给实时ERP带来问题?
如何在同步期间避免数据并发性/完整性问题?
这个系统不会为web应用提供实时数据。我能预料到什么样的问题?
在这类项目中,我应该更喜欢一种语言而不是另一种语言吗?我的计划是使用java/hibernate mvc。
我是不是走错了路?我最好直接将我的web应用程序与xbase数据库连接起来?这种方法立即引发的一些问题是办公室和基于云的虚拟机之间的网络问题,以及从直接向Internet开放ERP的潜在安全漏洞。
如果您能提供任何建议,我们将不胜感激!!提前谢谢。
更新-2012年9月3日
我目前如何进行数据复制(不是同步)-每晚运行:
office中的linux框将所需的dbf从erp服务器上的只读共享复制到本地存储。
使用dave burton的fantasticdbf2csv perl script
生成的csv与远程vm同步。数据变化很小,所以速度很快。
rsync完成后,远程vm将mysqlimport导入到生产数据库。
这种方法的优点
由于网络访问是只读的,因此不能以任何方式损坏ERP。
不必实现自定义逻辑来同步数据,因此不必担心远程虚拟机上的数据可能出错。
由于数据拷贝在夜间运行,运行时间并不太重要。
对于超过100万条记录,当前运行时间约为7分钟,每条记录约有20-30个字段。
最长的阶段是dbf复制和转换为csv。
缺点
每次都必须完整复制dbfs。
每次都必须完全转换dbf。
正在复制的表在mysqlimport期间被锁定。这并不是什么大问题,因为导入在夜间运行,而mysqlimport只需要大约20秒。
最佳答案
如果使用的是visual foxpro 3.0或更高版本,则可以使用内置数据库容器创建到sql server数据库的连接。然后.dbc中的视图将完成读取和更新sql server表的繁重工作。
我将设想一个循环通过foxpro表并读取行,然后对sql server db进行更新的例程。所以,foxpro表不应该被锁定。为了确保这一点,可以首先将dbfs查询到游标中,然后循环遍历游标。
我建议添加过程来进行并发检查。
在Web应用程序中为实时FoxPro数据提供服务器的另一个选择是在SQL Server中创建链接到FoxPro数据库的服务器。这样就可以实时访问foxpro数据。