【发布时间】:2012-03-11 17:28:09
【问题描述】:
我需要设置一个将与现有 ERP 系统 (WinMagi) 交互的 Web 应用程序。 ERP 基本上是 xBase (FoxPro) 数据库的前端。该数据库位于内部服务器上。据我所知,ERP 没有 API,但可以通过 EDI 模块接受采购订单等。 Web 应用程序应该能够接受在线订单和查询数据以进行报告。
我目前的计划:
- 将 xBase DB 同步到云托管 VM 上的 SQL Server 实例。
- (从 ERP 单向 -> SQL Server)
- 将此同步过程用作 ERP 和 Web 应用程序之间的接口。
- 使用 EDI 将采购订单推送回 ERP。
- 我的想法是,从数据并发的角度来看,通过受控和接受(由 ERP)接口在 ERP 中创建或更新数据会更安全。
问题/疑虑:
- 从 xBase DB 更新 SQL DB 的最佳方法是什么?是否有任何预先存在的库可以做到这一点,这样我就不必重新发明轮子了?
- xBase DB 在同步期间会被锁定吗?或者以其他方式导致实时 ERP 出现问题?
- 如何避免同步期间的数据并发/完整性问题?
- 此系统不会向 Web 应用程序提供实时数据。我会因此而出现什么样的问题?
- 对于此类项目,我应该更喜欢一种语言而不是另一种语言吗?我的计划是使用 Java/Hibernate MVC。
我是不是走错了路?将我的 Web 应用程序直接与 xBase DB 连接会更好吗?使用这种方法会立即想到的一些问题是办公室和基于云的 VM 之间的网络问题,以及将 ERP 直接开放到 Internet 的潜在安全漏洞。
如果您能提供任何意见或建议,我们将不胜感激!!提前致谢。
更新 - 2012 年 9 月 3 日
我目前如何进行数据复制(这不是同步) - 每晚运行:
- 办公室中的 linux 机器将所需的 DBF 从 ERP 服务器上的只读共享复制到本地存储。
- 使用 Dave Burton 出色的 dbf2csv perl script 将 DBF 转换为 CSV
- 生成的 CSV 将同步到远程 VM。数据只有很小的变化,所以速度很快。
- rsync 完成后,远程 VM 会向生产数据库执行 mysqlimport。
这种方法的优点
- ERP 不能以任何方式损坏,因为网络访问是只读的。
- 无需实现自定义逻辑来同步数据,因此无需担心远程 VM 上的数据可能出错。
- 由于数据副本在夜间运行,因此运行时间并不太重要。
- 当前运行时间约为 7 分钟,超过 100 万条记录,每条记录大约 20-30 个字段。
- 最长的阶段是 DBF 复制和转换为 CSV。
缺点
- 每次都必须完整复制 DBF。
- 每次都必须完全转换 DBF。
- 正在复制的表在 mysqlimport 期间被锁定。这并不是什么大问题,因为导入在夜间运行,而 mysqlimport 只需要大约 20 秒。
【问题讨论】:
-
我认为像 Talend、CloverETL 或 Pentaho 这样的 ETL 工具非常适合您。这样您就不会重新发明轮子并且能够控制同步。
-
感谢@Andrew 的建议。我会调查的。您对其他问题/疑虑有任何其他想法吗?您知道 xBase 数据库是否会被锁定并导致内部 ERP 出现问题?
-
如果您从 xBase DB 中选择,您应该能够使用 NOLOCK 语句。当然,这是一种“脏读”,有一些缺点,但它是一种选择。
-
我需要构建类似的东西。您找到更好的解决方案了吗?
标签: database synchronization erp edi xbase