【问题标题】:Is pymongo asyncronous?mongodb是异步的吗?
【发布时间】:2021-03-30 10:52:41
【问题描述】:

我在 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() ?

如果是这样,我应该如何获得可比较的结果?

【问题讨论】:

    标签: python mongodb pymongo rethinkdb rethinkdb-python


    【解决方案1】:

    PyMongo 是异步的吗?

    根据他们的文档 (https://pymongo.readthedocs.io/en/stable/faq.html),PyMongo 完全支持 Gevent:所以是的,如果正确实施,PyMongo 能够使用像 Gevent 这样的异步框架

    详细说明 Gevent 是什么,或者如何在您的示例代码中实现它:

    【讨论】:

    • 我知道我们可以使用 gevent 来实现异步 pymongo。但没有它,是这样吗?
    • @Ezriel_S 也许是我,但您表达问题的方式可能(或实际上确实如此)导致混淆。无论如何,我很高兴您找到了解决问题的方法!
    【解决方案2】:

    事实证明我可以做到:

    client = MongoClient(port=27017, fsync=True)
    

    (添加 fsync),因为它“强制数据库在返回之前对所有文件进行 fsync”(https://api.mongodb.com/python/2.0/api/pymongo/connection.html)。

    完成后,我得到的结果更有意义:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 2017-02-19
      • 2015-08-03
      • 2019-01-05
      • 2019-01-13
      • 1970-01-01
      相关资源
      最近更新 更多