我最近一直在使用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。我想我遗漏了一些东西。我应该给游标传递参数吗?我应该在某处建立索引吗?
提前感谢您的帮助!
1条答案
按热度按时间6kkfgxo01#
根据官方文件,我们无法避免对操作日志进行COLLSCAN收集。
因此,在我看来,为了减少对性能的影响,
watch
应该在辅助节点而不是主节点上运行。