我想知道为什么在不同服务器上运行的相同查询会得到不同的执行时间。我通过Atlas使用Mongo DB,并在相同的数据库和集合上运行查询。.
为了测试这一点,我创建了一个python脚本,它生成一些随机的大数据,然后在pymongo中使用upsert=True调用update_one()函数。我使用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比sqlite慢4倍,比csv慢2倍?关于如何正确地对crud操作进行基准测试,以及在收集它们时包含在Times中的一些操作的列表。