1.Server同步
在服务端(Spring Boot或Spring Cloud)对MongoDB进行CRUD操作时,同时对ES进行相同操作。
优点:对两者同时操作,代码层面解决同步问题。
缺点:
- 服务端改动较大,可以在common模块中集成对两种数据库的CUD操作
- 可靠性一般,任一方CUD操作出现问题时,可能会产生数据不一致问题
- 对Server的性能开销较大,得同时操作两种数据库
2.手动同步+增量更新
Transporter可以将数据从MongoDB同步到ES,但重要的是Transporter只同步一次。当工作完成时,Transporter的工作就结束了。无法实现增量同步
Change Stream是MongoDB从3.6开始支持的新特性。可以实现增量同步。
3.ES插件
ES有一个插件叫elasticsearch-river-mongodb,在ES 1.x中被广泛使用,但在ES 2.x被弃用。如果使用ES 1.x,可以使用这个插件。
4.JDBC input plugin for logstash
通过添加一个Mongo输入和ES输出插件,我们可以利用logstash存储的缓冲、输入、输出和过滤功能来完成这项工作。
实际上是定时从mongo中获取新数据写入es。如果在mongo中更新或删除数据,es中是不会跟着变化的。大量的冗余数据传输,实时性差,仅适用于少量数据。
JDBC输入插件是一种选择,但它需要JDBC驱动程序的支持。MongoDB没有得到良好支持的免费JDBC驱动程序。
5.Mongo-ES connector
Mongo-connector是一个python包的实时同步服务。它创建了一个从mongodb集群到一个或多个目标系统的管道。它需要mongo在replica-set模式下运行,同步mongo中的数据到目标,然后跟踪Mongo oplog,实时跟踪MongoDB中的操作。它需要一个名为“elastic2_doc_manager”的包来将数据写入ES。
6.Monstache
Monstache使用MongoDB oplog作为事件源。需要确保MongoDB通过部署副本集来配置为生成oplog。
MongoDB、阿里云ES及Monstache服务部署在专有网络VPC(Virtual Private Cloud)内,所有数据私网通信,高速且安全。
Monstache基于MongoDB的oplog实现实时数据同步及订阅,支持MongoDB与高版本ES之间的数据同步,同时支持MongoDB的变更流和聚合管道功能,并且拥有丰富的特性。
Monstache不仅支持软删除和硬删除,还支持数据库删除和集合删除,能够确保ES端实时与源端数据保持一致。
Mongo-ES connector和Monstache都是使用MongoDB oplog作为事件源,基于MongoDB的replica进行同步,因为多加了一个副本集,所以有数据冗余的问题。connector使用python开发,monstache使用Go语言开发。
7.netcore
Mongo2Es是用来保持你的mongoDB collections和你的elasticsearch index之间的数据实时同步.它是用mongo oplog来监听你的mongdb数据是否发生变化,无论是增删改查它都会及时反映到你的elasticsearch index上.在使用本工具之前你必须保证你的mongoDB是符合replica结构的,如果不是请先正确设置之后再使用此工具.
支持一对一,一对多,多对一和多对多的数据传输方式.
一对一 - 一个mongodb的collection对应一个elasticsearch的index之间的数据同步
一对多 - 一个mongodb的collection对应多个elasticsearch的index之间的数据同步
多对一 - 多个mongodb的collection对应一个elasticsearch的index之间的数据同步
多对多 - 多个mongodb的collection对应多个elasticsearch的index之间的数据同步
这个工具是GitHub上开源的一个工具,地址是:https://github.com/SnailDev/SnailDev.Mongo2Es
使用C#开发的,就是不知道靠不靠谱
8.mongo-sync-elasticsearch
mongodb数据同步到elasticsearch的中间件,支持全量,增量(新增修改删除),实时同步等多种同步情景。(sync MongoDB to Elasticsearch in realtime) (MongoDB sync to es/Elasticsearch)
Go语言开发,不知道靠不靠谱
综上所述
- Server同步的好处是同步方式都是自己定义的,灵活,可控,缺点是得写大量的开发代码
- elasticsearch-river-mongodb在ES2.x已经被弃用了,不推荐
- JDBC input plugin for logstash需要JDBC支持,不推荐
- netcore和mongo-sync-elasticsearch都是个人开源的工具,支持不好,不太推荐
推荐以下:
- Monstache,支持好,阿里云比较承认
- Mongo-connector
- 上述第二条,先手动同步,再增量更新,我自己想出来的,不知道这样靠不靠谱