首页 > 解决方案 > 提高性能并了解 IOPS 和 MongoDB 游标的使用

问题描述

我正在尝试提高使用 MongoDB 的代码的效率和速度。该代码是用 Python 编写的并使用该pymongo模块。

目前,我的代码中有一个部分接收可能从数据库中删除的值列表,并验证实际删除了哪些值:

verified_removed = []
for value in possibly_removed:
    if db.items.find_one({"name" : value}) is None:
        verified_removed.append(value)

现在我知道我可以将其更改为:

still_exist = list(db.items.find({"name" : {"$in": possibly_removed}))
verified_removed = [val for val in possibly_removed if val not in still_exist]

但我不确定一件事:
find 方法创建了一个可以迭代的游标。但是游标是否比调用find_one我的每个测试值更有效?还是在这两种情况下我的 IOPS 会保持不变?

光标究竟是如何工作的?当必须每~1分钟迭代/更新我的数据库中的许多对象时,提高性能的最佳方法是什么?

标签: mongodbcursorpymongo

解决方案


find()一次抓取一批,所以在大多数情况下它会比find_one()多次调用更有效。该文档有更多详细信息https://docs.mongodb.com/manual/tutorial/iterate-a-cursor/#cursor-batches

如果要提高性能,请考虑在要过滤的字段上添加索引。还要检查批量操作


推荐阅读