python - pymongo 单次插入太慢,尽管 WriteConcern(w=0)

标签 python mongodb performance time pymongo

我正在使用 pymongo 写入我的 mongodb。 我想要尽可能快的性能,所以我将写入关注设置为 w=0。我尝试了三种方法:

1.

client = MongoClient(host=HOST, port=PORT, w=0)
collection = client[DB][COLLECTION]
collection.insert_one(data)

2.

client = MongoClient(host=HOST, port=PORT)
collection = collection.with_options(write_concern=WriteConcern(w=0))
collection = client[DB][COLLECTION]
collection.insert_one(data)

3.

client = MongoClient(host=HOST, port=PORT)
collection = client[DB][COLLECTION]
collection.insert_one(data, bypass_document_validation=True)

在上述所有尝试中,collection.insert_one() 花费的时间约为 0.5 秒(!)

为什么插入仍然需要这么长时间?

据我所知,至少应该是那个时间的五分之一左右。更重要的是,“数据”并不是很多数据,而是少数项目。我正在使用 mongodb 3.4 和 pymongo 3.0

最佳答案

首先,您需要回答“多快才足够快”。

“慢”和“快”是非常主观的术语。这取决于很多因素,包括配置的服务器、您使用的语言、您要插入的文档、您在集合中定义的索引数量,一直到您的期望。

对于某些人来说,“慢”是 >100 毫秒。对于其他人来说,“慢”是>10ms。当然,您想要“更快”获得结果,您在服务器配置方面的成本就越高。

另一方面,Python 并不是最快的语言。众所周知,Global Interpreter Lock 的使用存在局限性。 。它也是一种解释性语言,主要是为了可读性而不是纯粹的速度而设计的。使用编译语言(C、C++ 等)通常可以立即提高速度

您可以尝试的另一件事是使用批量插入,而不是尝试使用 insert_one() 插入许多文档。请参阅http://api.mongodb.com/python/current/examples/bulk.html#bulk-insert例如使用批量插入。

关于python - pymongo 单次插入太慢,尽管 WriteConcern(w=0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47285466/

相关文章:

python - Django 与 MongoDB

mongodb - mongoDB - 所有节点辅助

mongodb - mongo-go-driver聚合查询总是返回 "Current": null

Python:Rar 暴力破解

c# - 移植应用程序时有效利用 64 位架构

python - 在 pandas DataFrame 中交换和分组列名

python - 如何使用 matplotlib 在 Python 中对沿圆周移动的多个点进行动画处理?

python - 是什么导致错误 "_pickle.UnpicklingError: invalid load key, ' '."?

python - 同时在两个数据框中应用 lambda 函数

python - 为什么通过共享内存的通信比通过队列慢得多?