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