谁能否说下MongoDB与关系型数据同步的思路



  • 如题,是否要编写应用程序同步?如果是,请问其思路是怎样的?


  • 大中华区MongoDB顾问

    首先一个是关系数据,一个是非关系数据,直接把前者同步到后者虽然可以办到,但是几乎可以确定这样在性能上是会有很大问题的。所以第一点要注意的是,在保持同步的过程中,一定是有一个模型转换的工作。

    然后,同步过程肯定可以通过自己编写代码来实现,这也是最为灵活的做法,但是很多人可能无法接受自己写代码所带来的工作量及稳定性要求(比如网络中断了一会怎么办?如何重试?),所以会有一些工具来帮助做这些事情。取决于对实时性要求,可以选择ETL工具和CDC工具。前者比较常用的有Kettle/Pentaho,后者有Tungsten,以及一些特定数据库专用的工具比如GoldenGate。

    以工具为例,大致说一下工作原理(如果自己实现也是类似的原理):

    ETL工具

    通常要求需要同步的表有一个最后更新字段(如果没有可以通过触发器加上,基本没有额外工作量),ETL工具会定期访问需要同步的表,找出上次同步之后有过更新的行,并把这些行同步到MongoDB中,最后更新自己的最后同步时间。原理应该比较简单。

    CDC工具

    相较于ETL工具,如果有更高的实时性要求,定期查表可能就不足以满足需求了,所以CDC工具的思路是跟踪关系数据库的bin log,一旦有更新就马上同步到MongoDB中去。但是这就要求CDC工具能够识别并解析不同数据库的bin log,商用数据库很多并不会公开自己的bin log格式是怎么样的,虽然也有开源项目尝试解析这些log并给出开源实现,但是毕竟不是官方实现,稳定性方面要差一些。


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待