pymongo 是异步的吗?

问题描述

我在 pymongo 和 rethinkdb 之间进行基准测试,以比较插入所需的时间。

然而这是我发现的:

enter image description here

用于一对一插入。


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)。

这样做了,我得到了更有意义的结果:

enter image description here