python MongoDB变更流导致使用getMore执行COLLSCAN

j8ag8udp  于 2022-12-02  发布在  Python
关注(0)|答案(1)|浏览(120)

我最近一直在使用pymongo中的ChangeStream框架来动态更新集合。
我的管道非常简单,如下所示:

pipeline = [
            {"$match":
                {"$and":
                 [{"updateDescription.updatedFields.updated_data":
                  {"$exists": True}},
                  {"operationType": "update"}]
                 }
             }
        ]

它用在以下代码中:

with collection.watch(pipeline) as stream:
    for insert_change in stream:
        '''DO SOMETHING'''
        resume_token = insert_change['_id']

这种更新经常发生。
我正在监视我的数据库的COLLSCANS,我意识到每次调用watch方法时,游标的getMore都会执行一次collscan。有时它是一个相当小的collscan,包含一百个docsExamined,但有时它会检查更多的文档。
我找不到建立索引的方法来消除这个collscan。我想我遗漏了一些东西。我应该给游标传递参数吗?我应该在某处建立索引吗?
提前感谢您的帮助!

6kkfgxo0

6kkfgxo01#

根据官方文件,我们无法避免对操作日志进行COLLSCAN收集。
因此,在我看来,为了减少对性能的影响,watch应该在辅助节点而不是主节点上运行。

相关问题