弹性搜索(ES)是用于记录和分析数据的流行歌星, Mongodb是用于存储和查询数据的着名NoSQL数据库。随着我们的Web基础架构的改进,我们如何将数据从mongodb导出到ES以进行搜索或分析?建议您选择5种可能的解决方案。

1.Web服务器同步

当我们使用Nodejs作为Web服务器容器时,我们可以使用Mongoosastic模块进行双面存储。当需要存储一个文档时,   Mongoosastic可以将更改同时提交给mongo和ES。如下图所示:https://media.licdn.com/dms/image/C5612AQFQa-HiFyPBng/article-inline_image-shrink_400_744/0?e=1540425600&v=beta&t=i0yvqnHonwdESbfTNdtpDwdBnN49g6VQT54-xQdLAOA

这是参考链接:  Mongoosastic

优点是数据可以同时存储在mongo和ES中,并且缺点是可能在CUD操作效率中引起开销。当一种类型的db存储失败时,可能会生成不一致的数据。并且服务器框架不够灵活,无法进行数据库迁移。

2.手动将数据从Mongo加载到ES

一旦您想将mongo数据导出到另一个ES服务器, Transporter工具是同步数据的不错选择。 Transporter还可以从其他类型的数据存储中导出数据。参考链接是: Transporter

https://media.licdn.com/dms/image/C4E12AQFXT7HUm4rVgA/article-inline_image-shrink_1500_2232/0?e=1540425600&v=beta&t=zwax5GkgdltfMqM0P37og_zDLIMtX-vV7BQNybEbMz0重要的是要知道运输车只同步一次。工作完成后,运输工具即将结束。

3. ES的插件

ES的插件名为“elasticsearch-river-mongodb”,并在ES 1.x中广泛使用,但现在不推荐使用ES 2.x的河流机制。参考链接是  elasticsearch-river-mongodb

https://media.licdn.com/dms/image/C5612AQHC5oysWSA11g/article-inline_image-shrink_400_744/0?e=1540425600&v=beta&t=mVja8FUgPODKcrYqdxv2RB_SvSJF59sR7iW0Uy6TwqE4.用于logstashJDBC输入插件

我们可以通过添加mongo输入和ES输出插件来利用logstash   缓冲,输入,输出和过滤功能  来完成这项工作。

JDBC输入插件是其中一个选择,但它需要JDBC驱动程序支持。据我所知,mongo没有支持良好的JDBC驱动程序。一些试用版可以在Unity  或Simba找到。

https://media.licdn.com/dms/image/C5612AQErOuPu5xBvrg/article-inline_image-shrink_400_744/0?e=1540425600&v=beta&t=AqHNKupm03GAzIaii0Mch0kvBudepmMa08ud5A-Hjd8

参考链接是:LogstashJDBC插件

5. Mongo-ES连接器

mongo-connector是一个实时同步服务,作为python包。它创建了一个从mongodb集群到一个或多个目标系统的管道。它需要mongo以副本集模式运行,将mongo中的数据同步到目标然后关闭mongo oplog。它需要一个名为“elastic2_doc_manager”的包来向ES写入数据。流程图如下:

https://media.licdn.com/dms/image/C5612AQEvYSp9GnAQNA/article-inline_image-shrink_1500_2232/0?e=1540425600&v=beta&t=NLpL0CIo1yoQsZvB2-P00407n4ZZHM1Nta6qbI4vzk0

参考链接是:  github  或python

概括一下,必须要记住:mongo副本集,一个打开的端口和ES的IP,如果你使用ES 2.x则使用elastic2_doc_manager

目前,我尚未准备好在Beats获得任何官方支持。它将在未来。

所以这就是mongo-ES-sync的5种方式。

來源: https://www.linkedin.com/pulse/5-way-sync-data-from-mongodb-es-kai-hao

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐