簡體   English   中英

相同的 MongoDB Atlas (pymongo) 查詢在不同的服務器上執行時間不同

[英]Same MongoDB Atlas (pymongo) query has different execution time on different servers

我想知道為什么在不同服務器上運行的相同查詢會得到不同的執行時間。 我通過 Atlas 使用 Mongo DB,並在同一個數據庫和集合上運行查詢。

為了測試這一點,我創建了一個 python 腳本,它生成一些隨機的大數據,然后在 pymongo 中使用 upsert=True 調用 update_one() function。 我正在使用 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 操作進行基准測試,以及收集它們時包含在時間中的一些操作的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM