mongodb - 提高性能并了解 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分钟迭代/更新我的数据库中的许多对象时,提高性能的最佳方法是什么?
解决方案
find()
一次抓取一批,所以在大多数情况下它会比find_one()
多次调用更有效。该文档有更多详细信息https://docs.mongodb.com/manual/tutorial/iterate-a-cursor/#cursor-batches
如果要提高性能,请考虑在要过滤的字段上添加索引。还要检查批量操作。
推荐阅读
- c - 为什么这个while条件没有捕捉到EOF?我得到分段错误
- php - 如何使用输入表单组合数组
- c++ - 如何将浮点算法转换为定点?
- php - 如何在 Yii2 项目中使用rectorphp/rector?
- javascript - 通过 Ajax 将数据发送到 .NET 中的处理程序。XML 解析错误:找不到根元素
- omnet++ - 在 initialize() 中设置新的门连接
- mysql - 在 MySQL 中存储对其他表中行的可搜索引用的最佳方法
- asp.net-core-2.0 - 使用 Angular 和单页应用程序进行回发
- python - 使用多处理时不能腌制错误
- featherlight.js - 通过js手动调用Featherlight时没有固定的半透明背景