【问题标题】:Same MongoDB Atlas (pymongo) query has different execution time on different servers相同的 MongoDB Atlas (pymongo) 查询在不同服务器上的执行时间不同
【发布时间】:2021-01-16 04:13:43
【问题描述】:

我想知道为什么在不同服务器上运行的相同查询的执行时间不同。我正在通过 Atlas 使用 Mongo DB,并且正在相同的数据库和集合上运行查询。

为了测试这一点,我创建了一个 python 脚本,它生成一些随机的大数据,然后在 pymongo 中调用 update_one() 函数并设置 upsert=True。我正在使用 line_profiler 库 (https://github.com/pyutils/line_profiler) 来检查每个语句的执行时间。

当我在本地机器上运行它时,update_one() 调用需要 0.3 秒。当我在我的一台服务器上尝试相同的操作时,大约需要 4 秒。在另一台服务器上花了 1.8 秒。对于所有这些,重复尝试也需要相同的时间(±0.2 秒)。由于查询在同一个 Atlas 实例上运行,因此无论从何处调用它们,它们不应该花费相同的时间吗?

对此的任何信息/帮助将不胜感激!

这是我用来测试的脚本:

# =========================================================
# filename: mongo_profile.py
# Python 3.9.0
# pip 20.3.3

# pip install pymongo
# pip install dnspython
# pip install line_profiler

# Run:
# 1. kernprof -l mongo_profile.py
# 2. python -m line_profiler mongo_profile.py.lprof
# =========================================================

import pymongo
import hashlib

@profile
def mongo_function(data):
    connection = pymongo.MongoClient("<mongo-atlas-connection-url>")
    database = connection["test_database"]
    collection = database["profiling_collection"]
    collection.update_one(
        {"name": "collection1"},
        {"$set": {"data": data}},
        upsert=True
    )

data = []
for i in range(20000):
    m = hashlib.sha256()
    m.update(str(i).encode("utf-8"))
    m.update(b"Some Text")
    data.append({
        "index": i,
        "hash": m.hexdigest()[0:8]
    })

mongo_function(data)

【问题讨论】:

  • 所有这些服务器都具有相同的硬件配置吗?相同的mongodb版本?它们是否位于同一个地方(DC)?
  • @rdas 我没有在我的服务器上安装 mongodb,因为我正在使用他们的云服务 (mongodb.com/cloud/atlas)。如果我运行的是本地实例,我可以假设问题与硬件有关。

标签: python python-3.x mongodb


【解决方案1】:

请参阅mongodb 4x slower than sqlite, 2x slower than csv?,了解如何正确地对 crud 操作进行基准测试,以及收集它们时包含在时间中的一些操作的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多