0

我的客户有一个商业街商店的离线产品数据库,他们出于自己的目的经常更新该数据库。他们现在正在创建一个在线商店,他们希望使用该数据库中的产品信息。

由于他们当前的旧软件设置,将数据库迁移到托管服务器并放弃离线数据库不是一种选择。

所以我的问题是:我怎样才能从他们的离线数据库中获取信息到在线数据库?他们的本地服务器始终连接到互联网,因此是否可以在网站上创建一个脚本,以某种方式从他们的服务器获取数据并将其导入在线服务器?如果它每 24 小时运行一次,那将是完美的。但它甚至可能吗?如果是这样,我会怎么做?

我能想到的唯一其他选择是在每次更新后手动上传数据库,但这并不是一个真正可行的想法。

4

2 回答 2

1

我使用 odbc 连接对 quickbooks 做了类似的事情。使用它我将数据同步到 MySQL。然而,这种同步只是一种方式。除非您在数据中有指示某些内容何时更改(更新日期)的键,否则您最终将同步大量额外数据。

使用 SQLYog,我设置了一个连接到 odbc 数据源的计划作业,并将自上次同步以来的更改推送到我用来生成报告的 mysql 数据库。如果您可以将数据复制到 MySQL 中,那么在您的在线商店中使用它应该很容易。

缺点是它不会是实时的。库存可能会成为问题。

于 2013-02-05T22:12:59.493 回答
1

在一个理想的世界中,我会考虑创建一个可以在同一台服务器上运行或至少与您的离线数据库在同一网络上运行的 RESTful API。这个 RESTful API 将通过 http 作为 Web 服务器运行,并从离线数据库返回 JSON 甚至 XML 结构的数据。在互联网上运行的客户端将能够随时连接和获取他们需要的任何数据。像这样的 RESTful API 有很多优点。

首先它是安全的。您不必通过公开与离线数据库的连接来向公众公开攻击媒介。您唯一需要做的就是启用对您的 RESTful API 的公共访问。在您的 API 逻辑中,您甚至可能不包含写入数据库的功能,因此即使您的 API 的安全性在最坏的情况下受到损害,所有攻击者所能做的就是读取您的数据,而不是破坏它。

在这种情况下拥有一个宁静的 api 代表了良好的关注点分离。您的客户端代码不应该知道有关数据库的任何信息,也不应该知道脱机数据库使用的任何内部系统。当您的客户想要更新他们的离线系统甚至改变它时会发生什么?在这种情况下,您所要做的就是更新 restful api。连接到数据的客户端不再关心其他任何事情,只关心 api,因此更改数据库会很容易。

考虑 API 的另一个原因是并发性。我之前暗示过这一点,但是如果您需要让多个客户端访问离线数据库的数据,那么拥有一个 API 会很棒。在一个 Web 服务器设置中,您可以让 API 坐下来等待请求,没有理由不能让多个客户端同时连接到 api。HTTP 真的很擅长这个!

您谈到必须将旧数据放入新数据库中。使用 RESTful API 可以轻松完成这样的事情,因为您只需将 API 的端点映射到新数据库中的表并在需要时运行它。您甚至可以放弃新数据库并使用 API 作为后端。此解决方案需要一些缓存,但如果您觉得不需要它,它会减少数据库的重复。

所有这一切的缺点是通过脚本编写 API 更加复杂。所以在这种情况下,我相信马的课程。如果这个数据库是一个将在未来扩展的长期项目的支柱,那么 API 就是要走的路。如果它只是您项目的一小部分,那么也许您可以使用每 24 小时运行一次的脚本来摆动它,但是我之前已经这样做过,第二次我必须更改/编辑解决方案,事情开始变得有点“毛茸茸”。希望这会有所帮助并祝你好运。

于 2013-02-05T22:38:38.887 回答