2011-06-11 115 views
4

我们正在开发一个使用PHP和Symfony框架的应用程序。理想情况下,系统将运行在远程服务器上,以便在任何地方都可以在线访问。但是,也必须有离线可用性。SQL数据库同步

为此,系统将在远程服务器和本地服务器上运行。默认情况下,客户端将访问本地服务器,并且只能在设施外进行联机工作。

因此,我们需要实现无任何客户端交互的本地和远程数据库上所做的改变都数据库同步。如果可能的话,它应该是一个在后台运行的守护进程,同步数据库。主数据库将是本地数据库,所以它会优先处理任何冲突。

我们还没有数据库系统决定使用(我们使用的原则,因此任何支持的数据库都可以),所以我们真的是在看一个与我们的场景中最就绪或可用的解决方案。

溶液可以是一个专用的应用程序,商业或没有,只要它不要求客户端交互。

+3

MySQL的?有复制。 http://dev.mysql.com/doc/refman/5.0/en/replication.html – 2011-06-11 17:43:02

+0

您是否正在创建主/主配置?或者是远程数据库只能成为只读从站? – datasage 2011-06-11 17:49:58

+0

还有一个问题:您是否需要使用关系数据库管理系统? – datasage 2011-06-11 17:55:07

回答

2

我使用MySQL的同步,它是一个快速设置,并已完美地执行。通过与phpMyAdmin结合使用,您可以通过大约6次鼠标点击即可实现这一功能。

http://dev.mysql.com/doc/refman/5.0/en/replication.html

http://www.phpmyadmin.net/home_page/index.php

+0

谢谢,尽管看起来很明显,但我们并不知道搜索的正确术语,但是“复制”没有想到,而是同步。演奏它的语言障碍是我猜想的一部分。 – Hioushi 2011-10-14 20:14:30

1

这真的取决于您的应用程序。

最健壮的系统可能是一个拥有面向对象的数据库(如CouchDB)的主控主环境。

有一些功能开箱很大的支持,但你也可以做到这一点的应用方面这可能是更加灵活。

在这个答案中所描述的方法但只适用很好,如果你可以归结您的修改记录的实体。

过程样的去如下:

  • 每个文档临危一个last_modification时间戳。

  • 客户端存储时的时间戳上次与服务器同步。

  • 删除的文件不被删除右边走,但免费获赠deleted_at时间戳

  • 当连接错误被中断的客户可以继续修改本地文件

  • 当建立连接再次在服务器上的每次修改和在最后一个同步时间戳之后被拾取的客户端。

  • 文档在两个方向都会更新。在两侧修改文档的冲突解决方案是基于lsat_modification时间戳完成的

  • 请记住,服务器和客户端可能存在小的偏移量,因此您不能100%地依赖它。需要同步。此外,你会松散修改首先修改的一面进行修改。不过,这应该是你可以处理你的应用程序(如CVS系统冲突)问题

  • 还要记录mergin和/或基于场的修改时间戳可能是一个选项

前面已经说过它真的取决于你的应用程序和更多的数据。

你的问题是一个也occours中的软件开发CVS系统(SVN修订和东西!)

想象总是做一个svn签,然后更新SVN。如果您将数据存储在XML文件或其他类似的文件中,Maby可能适用于您的应用程序?

SVN有点老派,有一些缺点,不太可靠,所以在这种情况下它不适合,但GIT可以很有能力完成这项工作。

基于SQL(Mysql等)的主控主复制系统功能非常强大,但也很难维护,而且安装起来也不容易。

我希望这个答案很有用,因为我不太了解你的用例,但是如果你把它放得更详细一点,我可能会帮助你进一步。

+0

非常感谢你,遵循程序的绝佳解释。 – Hioushi 2011-10-14 20:16:19