如何使用Doctrine或Mysql更新添加/替换整个数据库

时间:2013-12-26 12:39:13

标签: php mysql git symfony doctrine-orm

我正在为一家贸易公司开展一个网络应用程序项目,该项目希望能够离线访问网络应用程序,并且可以在再次连接到网络时进行更新。

界面易于离线使用 - 任何php服务器都可以使用Web应用程序的本地克隆。问题是数据库更新:

组件 我将有两件事要更新:

  • mysql数据库

  • 最终将存在的“下载图片”(我使用imperavi redactor作为文本编辑器,并将任何图片下载到必须同步的本地文件夹。这部分非常简单,我只需添加新文件......

更大的问题来自数据库更新:有几个用户(6到10之间),我正在尝试通过添加新条目和替换现有条目(如复制数据库,但正在工作)来考虑更新方法在类似git的系统上:添加添加,处理更新。

我无法看到如何使用复制,因为没有服务器在线,必须按需进行同步。

任何提示?不首选的解决方案是检查每个表格的每个表格,但我想这不是最佳方式。

顺便说一下,我正在使用Symfony 2.3和Doctrine 2,如果你有任何使用这些框架的提示,那就太棒了,谢谢!

1 个答案:

答案 0 :(得分:0)

真实推荐

我建议您与客户一起深入了解此要求。他们真的需要这个,还是只是这么想?

实施它会增加项目的复杂性,并且可能有更好的替代方案来满足客户的实际需求。例如,他们可以购买便宜的蜂窝调制解调器并使用它连接到主应用程序吗?

如果记录独立

如果您正在收集可通过多个物理剪贴板完成的数据类型,例如:在会议中收集人员的姓名和电子邮件地址,只需在数据库中添加一列,指明记录的来源并将其作为主键的一部分。

如果记录依赖于数据库中的其他数据

不要将更新存储在主数据库的副本中,而应考虑在断开连接的应用程序中记录事务队列。这将允许您在重新连接期间在中央数据库上按顺序重放事务。

在不知道你将要做什么类型的交易的情况下,考虑一个简单的银行应用程序的这个可能的交易队列(用英文写的;你需要一个好的格式,并且可能存储更多的信息):

- Deposit USD 100.00 to account 12345, received at 2014-01-01T12:00:00
- Deposit CAD 50.23 to account 55555, received at 2014-01-01T12:00:03
- Withdraw USD 25.00 from account 12345, received at 2014-01-01T15:00:00

这有几个含义:

  • 您的已断开连接的应用程序将与您的主要应用程序具有不同的架构
  • 您将无法为断开连接的应用程序上的某些操作提供可靠的反馈
    • 例如,在上述提款期间,我们如何知道账户12345至少包含25美元?如果在断开连接时使用主应用程序清空了帐户该怎么办?
  • 在同步期间,重放的事务可能会生成需要处理并可能被操作的错误
    • 例如,透支可能产生费用;帐户55555已关闭,因此我们需要跟踪所有者
  • 断开连接的应用程序的更新应该被视为在同步时收到它们,而不是它们被输入到断开连接的应用程序的时间
    • 但这对系统有何影响?在上面的例子中考虑汇率;您通过断开连接的应用程序或重播时的“存款”时保证您的客户是谁?重要的是哪个更好?
  • 如果你在数据同步之间花了很长时间会发生什么?
  • 保持非常好的日志,因为在你试图追踪一些不一致之前挖掘它们只是时间问题

如果你有多个离线应用程序副本,例如,这将变得更加难以管理。如果Bobby和Sue都将副本带到会议中并独立收集数据以便稍后重播。