我遇到轻微问题。故事如下:从客户端到主服务器同步mysql表数据
我有一个文件存档系统(用PHP编写),运行在多个客户端(目前有23个)。在他们的系统上他们只有他们的文件。每天晚上,他们都需要“同步”到现场的主数据库(中央服务器)。我可以从中央服务器访问每个MySQL数据库,因此连接到它们是没有问题的。
我有一个连接到客户端数据库的脚本,选择从同步列='0000-00-00 00:00:00'(默认表示它没有同步)的表中的所有条目。然后,我会遍历每条记录,将其插入到中央服务器,并将客户端数据库记录上的同步时间设置为执行脚本的时间。这种方式很有效,但显然在多个查询中有很大的开销,我现在刚刚注意到了这些问题。
每个客户端每天可以生成多达2000 - 3000个奇数文档。有了这些大数字,它会花费太长时间(1秒/ 2文档)。
有没有更好的解决我的问题?最好是一个PHP脚本解决方案,因为我需要做日志来检查一切是否成功。
感谢
编辑: 我现在的流程是:
- 选择所有未同步数据
- BEGIN TRANSACTION
- 插入记录到中央数据库服务器
- 选择来自客户端的文档记录
- 将文档到中央数据库服务器
- 更新同步列在客户端
- 更新同步列在服务器上
- 提交交易
这是中央服务器上运行的脚本。 现在我想到了,我可以删除第7步并将其作为第5步的一部分,但这不会大大减少处理时间。
这个ID不是问题。那些不需要同步。我通过其他各栏获得正确的记录。我只是使用ID将docarch_printout(关于文档的所有细节)表链接到docarch_printout_docs表(1 - 1仅包含文档)。另一个问题是我们没有永久连接到客户端。有些拨打按需ISDN线路。由于这一点,我不认为联邦表会起作用。不错的想法寿,从来不知道MySQL有这样的选择。 – Skippy 2010-08-19 11:25:05
好吧,我想你可以在程序中存储联邦表的create sql。然后,当您连接到客户端时,运行创建脚本。然后在完成后放下它(所以它只在主动同步时使用连接)... – ircmaxell 2010-08-19 11:32:58
正确。我非常喜欢这个想法。 Everythng似乎很棒,但是,我需要同步由id字段引用的2个表(1-1关系)。一个是细节,另一个是实际文档。简单地说,它只是一张桌子。对此有任何进一步的想法?谢谢。 – Skippy 2010-08-19 12:29:50