mongodb 用来存储数据,elasticsearch 用做搜索引擎,看网上教程说,需要 mongodb 同步到 elasticsearch,这样的话用 mongodb 存储数据有啥意义呢?往各位大佬赐教
1
Mithril 2021-04-02 11:04:12 +08:00
- 你可能不是所有数据都需要扔到 ES 里面做检索,没必要的数据不要放进去。
- 你有可能需要保证一定程度上的一致性。 本质上 ES 就是个搜索引擎,你最好还是拿它当搜索引擎用。虽说一定程度上也可以当成 NoSQL 数据库,但实际使用的时候,除非你的应用场景非常合适,可以从需求上避开拿 ES 当数据库使用时的缺点,不然不要这么搞。 |
2
taomujian OP 好的,谢谢解答
|
3
chendy 2021-04-02 11:17:49 +08:00
mongodb 做主数据库,es 做搜索,把需要搜索的数据从 mongodb 同步到 es
|
4
jun0205 2021-04-02 11:18:21 +08:00
可以用 https://github.com/rwynn/monstache 同步数据,monstache 可以自己写脚本同步需要的数据。
|
5
libook 2021-04-02 11:22:34 +08:00 4
ES 和 MongoDB 的而应用场景不一样,定位也不一样,各自擅长和不擅长的事情也不一样。
ES 不是数据库,没法保障数据一致性,因为存在刷新周期,所以你读取的数据总是上一次刷新的数据,如果在此期间有任何数据变化,你是拿不到最新的数据的,只能等下一个刷新周期。强一致性需求是数据库的强项,你查询 MongoDB 不可能返回一个过时的数据。 传统业务数据库的索引机制有个限制,就是索引越多写性能越差,而且每一条索引都有很高的专能性,所适用的查询场景极其有限。举个例子,后台一个表单有 20 个查询字段,用户会随机选取其中任意数量的字段组合查询,每种组合出现的概率相当且要求查询速度都要很快;如果用业务数据库设计索引的话,理论上可能需要 20 的全组合那么多的索引,都别说 20 的全组合了,常见的业务数据库一个表上有 20 条索引就很让人头疼了。这就是搜索引擎的用武之地了。 MongoDB 有一个 Change Streams 的机制,可以用程序监听表数据变化,这个机制可以用来同步 MongoDB 的数据到 ES,于是数据的写操作和强一致性读操作都在 MongoDB 上进行,不要求一致性的读操作(比如后台报表查询可以容忍几秒的数据滞后性的话)可以到 ES 里查。 |
6
taomujian OP 感谢各位的解答
|
7
mensa23 2021-04-02 17:11:50 +08:00
同步数据会是一个巨坑,如果你的 mongodb 数据结构会变,那就会导致 elasticsearch 每次同步数据都要建立新的 mapping 。所以建议只建立必要数据的 mapping,不要将所有数据都同步过去。
|