1

目的是同步弹性搜索上某些集合的字段。随着对 mongodb 的每一次更改,这也应该在 elasticsearch 上实现。我看过不同的包裹。例如河。不幸的是,它对我不起作用,所以我尝试不使用它。这是变更流的正确方法吗?

你怎么能更漂亮地解决这个问题?数据必须与 Elasticsearch 上的每个更改(插入、更新、删除)同步。对于多个集合,但每个集合都不同(每个集合只有某些字段)。不幸的是,我没有经验来解决这个问题,如果添加或删除集合或字段不会花费太多精力

    const res = await client.connect();
    const changeStream = res.watch();
  
    changeStream.on('change', (data) => {
     // check the change (is the chance in the right database / collection)
     // parse 
     // push it to elastic server
    });

我希望你能帮助我,提前谢谢:)

4

1 回答 1

1

是的。它会起作用,但您必须处理以下情况

  1. 当您的节点 js 进程在 mongodb 更新正在进行时停止时。

    您可以使用恢复令牌并跟踪该令牌,因此一旦您的流程启动,它就可以从那里恢复。

  2. 在每次更改时插入单个文档。

    这对于 elasticsearch 来说将不堪重负,并可能导致插入速度缓慢,最终导致 mongo 和 elastic 之间的同步滞后。所以更好地在更改流中收集多个文档并使用批量 API 操作插入。

于 2021-02-25T13:51:47.967 回答