caosiyang / py-mongo-sync

Oplog-based data sync tool that synchronizes data from a replica set to another deployment, e.g.: standalone, replica set, and sharded cluster.
http://caosiyang.github.io/py-mongo-sync/
MIT License
108 stars 46 forks source link

先把oplog放在临时数据库中存起来 #2

Closed heroWang closed 8 years ago

heroWang commented 8 years ago

给您提个优化建议.

同步表和索引需要花很长时间.容易造成stale.可否在同步的一开始就fork一个进程专门去备份日志到一个临时数据库中,同步日志就从临时库中同步,这样因为日志是实时备份的,就不会发生日志还没有同步就被覆盖的情况了.

caosiyang commented 8 years ago

首先表示感谢! 如果出现oplog stale问题,要看慢在哪里,是源端读慢还是目标端写慢。 我在使用过程中,碰到此问题多是因为源端读慢,通常给源端做下优化,同步速度会提高很多,如果还是不行,不妨将源端的oplogSize调大。

heroWang commented 8 years ago

感谢您的回复. 我现在用java实现了一个不停机迁移数据库服务.功能简单说就是把一个数据库转移到同一集群中的另一副本集中.参考了您的同步数据库的代码.而日志重放的功能是我上面说的方法实现的,因为作为一个服务,不能不考虑stale的情况.

我现在要同步的数据库大小有200多G的.这样的数据库以您的经验用bulkwrite方式同步大概需要多久呢?

caosiyang commented 8 years ago

时间不太好估算,源端/目标端的db性能都会影响同步速度,最好往测试数据库同步一些数据,来估算整体用时。像你这种大数据量,如果只有部分数据加载到内存,往往瓶颈在源端的全表扫描上,即受限于磁盘读取性能。