【发布时间】: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