V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
taomujian
V2EX  ›  MongoDB

mongodb 和 elasticsearch 怎么配合使用

  •  
  •   taomujian · 2021-04-02 10:55:48 +08:00 · 2577 次点击
    这是一个创建于 1357 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    7 条回复    2021-04-02 17:11:50 +08:00
    Mithril
        1
    Mithril  
       2021-04-02 11:04:12 +08:00
    - 你可能不是所有数据都需要扔到 ES 里面做检索,没必要的数据不要放进去。
    - 你有可能需要保证一定程度上的一致性。
    本质上 ES 就是个搜索引擎,你最好还是拿它当搜索引擎用。虽说一定程度上也可以当成 NoSQL 数据库,但实际使用的时候,除非你的应用场景非常合适,可以从需求上避开拿 ES 当数据库使用时的缺点,不然不要这么搞。
    taomujian
        2
    taomujian  
    OP
       2021-04-02 11:15:23 +08:00
    好的,谢谢解答
    chendy
        3
    chendy  
       2021-04-02 11:17:49 +08:00
    mongodb 做主数据库,es 做搜索,把需要搜索的数据从 mongodb 同步到 es
    jun0205
        4
    jun0205  
       2021-04-02 11:18:21 +08:00
    可以用 https://github.com/rwynn/monstache 同步数据,monstache 可以自己写脚本同步需要的数据。
    libook
        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 里查。
    taomujian
        6
    taomujian  
    OP
       2021-04-02 14:05:22 +08:00
    感谢各位的解答
    mensa23
        7
    mensa23  
       2021-04-02 17:11:50 +08:00
    同步数据会是一个巨坑,如果你的 mongodb 数据结构会变,那就会导致 elasticsearch 每次同步数据都要建立新的 mapping 。所以建议只建立必要数据的 mapping,不要将所有数据都同步过去。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3121 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 13:29 · PVG 21:29 · LAX 05:29 · JFK 08:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.