mongodb 和 elasticsearch 怎么配合使用

2021-04-02 10:55:48 +08:00
 taomujian

mongodb 用来存储数据,elasticsearch 用做搜索引擎,看网上教程说,需要 mongodb 同步到 elasticsearch,这样的话用 mongodb 存储数据有啥意义呢?往各位大佬赐教

2538 次点击
所在节点    MongoDB
7 条回复
Mithril
2021-04-02 11:04:12 +08:00
- 你可能不是所有数据都需要扔到 ES 里面做检索,没必要的数据不要放进去。
- 你有可能需要保证一定程度上的一致性。
本质上 ES 就是个搜索引擎,你最好还是拿它当搜索引擎用。虽说一定程度上也可以当成 NoSQL 数据库,但实际使用的时候,除非你的应用场景非常合适,可以从需求上避开拿 ES 当数据库使用时的缺点,不然不要这么搞。
taomujian
2021-04-02 11:15:23 +08:00
好的,谢谢解答
chendy
2021-04-02 11:17:49 +08:00
mongodb 做主数据库,es 做搜索,把需要搜索的数据从 mongodb 同步到 es
jun0205
2021-04-02 11:18:21 +08:00
可以用 https://github.com/rwynn/monstache 同步数据,monstache 可以自己写脚本同步需要的数据。
libook
2021-04-02 11:22:34 +08:00
ES 和 MongoDB 的而应用场景不一样,定位也不一样,各自擅长和不擅长的事情也不一样。

ES 不是数据库,没法保障数据一致性,因为存在刷新周期,所以你读取的数据总是上一次刷新的数据,如果在此期间有任何数据变化,你是拿不到最新的数据的,只能等下一个刷新周期。强一致性需求是数据库的强项,你查询 MongoDB 不可能返回一个过时的数据。

传统业务数据库的索引机制有个限制,就是索引越多写性能越差,而且每一条索引都有很高的专能性,所适用的查询场景极其有限。举个例子,后台一个表单有 20 个查询字段,用户会随机选取其中任意数量的字段组合查询,每种组合出现的概率相当且要求查询速度都要很快;如果用业务数据库设计索引的话,理论上可能需要 20 的全组合那么多的索引,都别说 20 的全组合了,常见的业务数据库一个表上有 20 条索引就很让人头疼了。这就是搜索引擎的用武之地了。

MongoDB 有一个 Change Streams 的机制,可以用程序监听表数据变化,这个机制可以用来同步 MongoDB 的数据到 ES,于是数据的写操作和强一致性读操作都在 MongoDB 上进行,不要求一致性的读操作(比如后台报表查询可以容忍几秒的数据滞后性的话)可以到 ES 里查。
taomujian
2021-04-02 14:05:22 +08:00
感谢各位的解答
mensa23
2021-04-02 17:11:50 +08:00
同步数据会是一个巨坑,如果你的 mongodb 数据结构会变,那就会导致 elasticsearch 每次同步数据都要建立新的 mapping 。所以建议只建立必要数据的 mapping,不要将所有数据都同步过去。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/767472

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX