问题描述
我在 pymongo 和 rethinkdb 之间进行基准测试,以比较插入所需的时间。
然而这是我发现的:
用于一对一插入。
def chronometre_rethink_insert_one(data,nblines):
avant = time()
for i in data[:nblines]:
r.table('test_table').insert(dict(zip(names,i))).run()
return time()-avant
def chronometre_mongo_insert_one(data,nblines):
avant = time()
for i in data[:nblines]:
db.test_table.insert_one(dict(zip(names,i)))
return time()-avant
我认为采用 mongo 的事实几乎是不变的,这很奇怪。所以我想知道 pymongo 可能不会在我插入数据时插入数据,但是 rethinkdb 是的,因为我在所有操作上调用 run() ?
如果是这样,我应该如何获得可比较的结果?
解决方法
PyMongo 是异步的吗?
根据他们的文档 (https://pymongo.readthedocs.io/en/stable/faq.html),PyMongo 完全支持 Gevent:所以是的,如果正确实施,PyMongo 能够使用像 Gevent 一样的异步框架。
有关 Gevent 是什么,或如何在示例代码中实现它的详细信息:
,事实证明我可以做到:
client = MongoClient(port=27017,fsync=True)
(添加 fsync),因为它“强制数据库在返回之前对所有文件进行 fsync”(https://api.mongodb.com/python/2.0/api/pymongo/connection.html)。
这样做了,我得到了更有意义的结果: