首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行跨库信息同步?

如何进行跨库信息同步?
EN

Stack Overflow用户
提问于 2011-06-04 16:30:38
回答 1查看 197关注 0票数 2

我正在设计一个目录,当修改或更新时,多个源中的数据将不得不覆盖其他源中的数据。一些数据库是MySQL,SQL Server和一些信息将是AD/LDAP。

我的问题是:对于这种类型的数据库传播,是否有一个设计模式来减少流量和防止错误?此外,这个项目将在PHP中,所以如果有人知道类似的开源项目,我可以适应,那将是很好的。在一些数据库之间可能需要一些逻辑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-04 17:45:03

您需要一些方法来标记要同步的记录。我们使用这样的系统,其中每个要同步的表都有一列来保持同步状态。当一条记录被修改时,它也会修改它的状态(在触发器中),同步工具每隔几分钟就会查询修改过的记录。

缺点是您将需要大量代码来正确处理此问题,特别是因为您不能直接删除记录。同步工具首先需要知道并且需要执行实际的删除。除此之外,用这种方式很难建立一个好的队列,所以如果记录在它们的父级之前同步,你会得到一个错误。而且每个必须同步的表都需要一个额外的列。

因此,现在有一个新的解决方案即将实施。此解决方案对队列使用单独的表。队列包含指向其他表中记录的指针(主键值和对表名/字段名的引用)。此队列现在是唯一监视更改的表,因此表所需做的就是实现单个触发器,该触发器将队列中已修改的记录标记为已修改。因为它是单独表中的单个队列,所以添加了我前面提到的问题的解决方案:

可以立即删除

  • 记录。同步工具在队列中找到一个id,验证它不再存在,因此它将其从另一个数据库中删除,以便自动解决
  • 子父依赖关系。新的父项将在其子项之前,而已删除的父项将在其子项之后。你可能会在交叉链接记录中发现唯一的问题,尽管延迟提交可能是解决这个问题的方法。
  • 在所有表中不需要额外的列。只有一个队列、一些帮助器表和一个触发器,其中包含对每个要同步的表的单个函数调用。

不幸的是,我们还没有完全实现这个解决方案,所以我不能告诉你它是否真的会工作得更好,尽管测试表明确实是这样。

请注意,此系统会对记录进行一对一的复制。我认为这也是最好的方法。复制数据,然后(之后)在目标服务器上处理它。我不认为在复制数据的同时处理数据是个好主意。如果有任何错误,你将有一个地狱的工作调试和恢复/重新计算数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6235655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档