我正在使用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
答案 0 :(得分:1)
首先,你需要回答“速度有多快”。
“慢”和“快”是非常主观的术语。这取决于很多因素,包括配置的服务器,您正在使用的语言,您要插入的文档,您在集合中定义的索引数量,以及您的预期。
对于某些人来说,“慢”是> 100毫秒。对于其他人,“慢”是> 10ms。当然,您想要获得“更快”的结果,在服务器配置方面花费的成本会更高。
另一方面,Python并不是最快的语言。众所周知,在使用Global Interpreter Lock方面存在局限性。它也是一种解释性语言,主要是为了可读性而不是纯粹的速度。通常可以使用编译语言(C,C ++等)立即加速提升
您可以尝试的另一件事是使用批量插入,而不是尝试使用insert_one()
插入许多文档。有关使用批量插入的示例,请参阅http://api.mongodb.com/python/current/examples/bulk.html#bulk-insert。
答案 1 :(得分:0)
w=0
将无济于事。 [1]
co = co.with_options(write_concern=WriteConcern(w=0, j=False, fsync=False))
为我大大加快了速度,但请确保您了解后果。使用insert_many
加快速度可能更好(特别是如果您的mongodb服务器在网络上)。
编辑:实际上可能是fl幸-一段时间后速度变慢。