【问题标题】:MongoDB Change Streams very slowMongoDB 更改流非常慢
【发布时间】:2021-05-06 21:37:42
【问题描述】:

从 MongoDB 中发生操作到我在 NodeJS 中的更改流中捕获它,我遇到了 5 到 10 秒的延迟。

这些时间是否正常,我可以检查哪些参数以查看是否有影响?

这里有几个例子和一些怀疑(待测试)。

这里我们尝试仅在我们感兴趣的用户集合的字段中捕获更改,我不知道这样做是否会避免不需要的事件可能会导致 ChangeStream 的接收延迟并且接收更多信息会很方便事件并在代码中过滤更新的字段。

我也不知道,操作类型的“and”是否必须放在前面,否则无关紧要。

userChangeStreamQuery: [{
    $match: {
        $and: [
            {$or:[
                { "updateDescription.updatedFields.name": { $exists: true } },
                { "updateDescription.updatedFields.email": { $exists: true } },
                { "updateDescription.updatedFields.organization": { $exists: true } },
                { "updateDescription.updatedFields.displayName": { $exists: true } },
                { "updateDescription.updatedFields.image": { $exists: true } },
                { "updateDescription.updatedFields.organizationName": { $exists: true } },
                { "updateDescription.updatedFields.locationName": { $exists: true } }
            ]},
            { operationType: "update" }]
    }
}],

在等待计划集合上的事件的另一个中,我担心它没有定义聚合,并且在接收到事件时,如果操作到达类型“插入”,“更新”,它会被过滤, '删除'。这给了我们 7~10 秒的延迟。

startChangeStream({
    streamId: 'plans',
    collection: 'plans',
    query: '',
    resumeTokens
});
...
const startChangeStream = ({ streamId, collection, query, resumeTokens }) => {

    const resumeToken = resumeTokens ? resumeTokens[streamId] || undefined : undefined;

    nativeMongoDbFactory.setChangeStream({
        streamId,
        collection,
        query,
        resumeToken
    });
}

绝不是海量操作,一般是用户通过网页表单进行的操作。

【问题讨论】:

  • 测试一个简化的案例,用结果更新问题。

标签: node.js mongodb performance changestream


【解决方案1】:

当collection进行分片时,mongos server需要等待所有shard有数据返回,如果部分shard没有数据写入,空闲的primary mongod每隔10(@ 987654321@) 秒。这就是为什么你延迟是 7~10 秒。

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2015-11-01
    • 2014-12-07
    • 2018-07-03
    • 1970-01-01
    相关资源
    最近更新 更多