zhr85210078 / node-mongodb-es-connector

nodejs mongodb elasticsearch synchrodata(mongodb和es同步数据)
https://zhr85210078.github.io/node-mongodb-es-connector/#/
MIT License
77 stars 17 forks source link

假如我的collecion很大,我能否部分同步? #9

Closed Astralidea closed 6 years ago

Astralidea commented 6 years ago

假如我的collecion很大,这时候由于意外挂掉了,我有没有办法比如从7天前同步一下数据,而不是再启动的时候全量同步?

zhr85210078 commented 6 years ago

首先全量同步我当初只是想保证进es的数据不会丢失,其次如果你想同步部分数据建议将配置文件更改一下m_filterfilds这个字段的内容,具体还要看你这里面的数据有没有可以筛选的条件: 53a928e1b30d66e6 809aaec4f7131f1 最后,关于时间的筛选条件,我再研究一下看看能不能添加特例进去,希望帮助到你

Astralidea commented 6 years ago

多谢你的回复。 但实际上我期望的不是部分同步,如果我加m_filterfilds了以后,我的理解是,如果在之前的id有oplog,是不是就不会处理之前的修改或删除了?另外在使用的时候我发现,我设的m_documentsinbatch是5000,m_delaytime是10,但是在发送的时候实际上每个batch还是会有5s左右的间隔,这个间隔能在哪里配置吗?

zhr85210078 commented 6 years ago

嗯,你说的没错,关于第一个问题我没有考虑周到,我争取在下一个版本中解决,我争取把初始化的配置和oplog的配置解耦,关于第二个问题,m_delaytime的单位是毫秒,如果你的文档单条的数据很大,建议把m_documentsinbatch调小一点,m_delaytime调大,比如:5000 毫秒,m_delaytime只是人为干预把每次写入es数据的时间调大了。你的“每个batch还是会有5s是es的响应时间”就是es写入数据的响应时间,其他地方没做限制。 附上源码: 710c2071a98b36c8

zhr85210078 commented 6 years ago

在v2.1.9版本中我增加了一个配置文件节点:

"m_extendinit": { "m_comparefild": "_id", "m_comparefildType": "ObjectId", "m_startFrom": "2018-07-20 13:44:00", "m_endTo": "2018-07-20 13:46:59" } 假如你下次初始化的时候不想完全同步全部数据,就填写一个时间段 如果你的"_id"不是objectId,你可以选择一个时间类型的字段做筛选

"m_extendinit": { "m_comparefild": "CreateDate", "m_comparefildType": "DateTime", "m_startFrom": "2018-05-01 00:00:00", "m_endTo": "2018-05-31 23:59:59" } 以上配置只在数据初始化操作生效,不影响mongo-oplog,你可以参考我提供的例子 设置这个节点就是部分同步 应该可以满足你的应用场景,希望可以帮助到你

Astralidea commented 6 years ago

太棒了,我准备测试一下你的新版本,看看在我们生产环境上会有什么问题。 多谢你的帮助。