mongodb同步elasticSearch方案评估
什么是Elasticsearch | 什么是 MongoDB? |
---|---|
自 2010 年发布以来,Elasticsearch 已成为全球人气排名前十的数据库之一。最初基于 Apache 的 Lucene 搜索引擎,它仍然是一个开源产品,使用 Java 构建,并以非结构化 NoSQL 格式存储数据。 Elasticsearch 专为搜索而构建,并提供高级数据索引功能。对于数据分析,它与 Kibana 和 Logstash 一起运行以形成 ELK 堆栈。 | MongoDB 是一个开源的 NoSQL 数据库管理程序,可用于管理分布式架构中的大量数据。它是世界上最受欢迎的 文档存储,并且在一般最受欢迎的数据库中排名前 5 位。 MongoDB 允许您管理、存储和检索面向文档的信息。它提供了快速即席查询、索引、负载平衡、数据聚合和服务器端 JavaScript 执行等功能。 |
如何选择数据同步工具
同步方式
搜索功能是App必不可少的一部分,我们使用目前比较流行的Elasticsearch进行全文检索。我们的数据主要存储在MongoDB中,如何将这些数据导入到Elasticsearch中,并能一直保持同步呢?做法大致分为两种:
1.应用层(以nodejs举例)
简单来讲就是我在mongodb添加一条,我同时也对es添加一条,更新删除同理。
有:mongoosastic、mongoose-elasticsearch-xp2.数据层
有通过oplog同步数据,也有通过定期轮询新数据
有:monstache、mongo-connector、LogStash、Flink CDC
要求
需要支持旧数据全量同步、增量同步(增删改),且近乎实时
选择建议
monstache | Flink CDC | LogStash | mongoosastic | mongoose-elasticsearch-xp | |
---|---|---|---|---|---|
近实时 | ☑️ | ☑️ | ☑️根据配置采集速度 | ☑️ | ☑️ |
支持(旧数据)全量同步 | ☑️ | ☑️ | ☑️ | ✖️ | ☑️ esSynchronise |
支持增量同步(增删改) | ☑️ | ☑️ | ✖️不支持删 | ✖️不支持删改 | ✖️不支持批量删改,仅支持通过findOneAndUpdate的{new: true} 支持改 |
是否现在社区主流 | ☑️是 | ☑️未来主流,可多数据源打成宽表 | ✖️否,更适用于无需删改的日志数据 | ✖️否 | ✖️否 |
同步方式 | 数据层oplog | 数据层oplog流处理 | 数据层定期轮询是否有数据 | 应用层mongoose插件 | 应用层mongoose插件 |
排除原则
1、mongo-connector太久了,支持es版本有限,且问题非常多,排除
2、mongoosastic不支持全量同步,不支持删改,排除
3、mongoose-elasticsearch-xp是在mongoosastic基础上改进的,不支持删,排除
4、LogStash不支持删同步,排除
5、一般程序构架为了解耦且并非原子操作,均不会采用在在应用层上做数据同步,排除mongoosastic、mongoose-elasticsearch-xp
实践
monstache实践mongodb同步es
Flink CDC实践mongodb到es
阿里云推荐使用:monstache
通过Monstache实时同步MongoDB数据到阿里云ES