我是MongoDB和pyMongo的新手, ,並且在遊標上有一些性能問題 。PyMongo光標操作非常緩慢
TL,DNR:我嘗試使用遊標執行 需要大約一秒的操作。
龍版
我有一個小的數據庫,這是我bulkloaded。每個條目有3個字段:
DOM:域名(唯一的) 日期:
我已經加載約1.9萬個條目,沒有發生任何事故,並很快串:日期,YYYYMMDD 標誌。
我在dom字段上創建了一個哈希索引。
現在,我想通過域字段獲取某些記錄,並使用Python程序更新它們。
這就是問題所在。
我使用最新的MongoDB和最新的pyMongo。
精簡程序...
import pymongo
from pymongo import MongoClient
db = client.myindexname
posts = db.posts
print list(db.profiles.index_information()) # shows hash index is present
for k in newdomainlist.keys(): #iterate list of domains to check
ret = posts.find({"dom": k}) #this runs fine, and quickly
#'ret' is a cursor
print ret #this runs quickly
#Here's the problem
print ret.count() #this takes about a second. why?
如果我只是 '打印RET',速度是好的。但是,如果我嘗試 參考任何東西在光標,速度下降到地板 - 我 可以做約1每秒操作。在這種情況下,我只是想知道ret.count()返回'0'(我們不是 有這個域),還是'1'(我們已經有了)。
我試着添加一個batch_size(10000)的查找,沒有它的幫助。
我已經加載了Python C擴展。
我做錯了什麼?
感謝
是'newdomainlist'列表嗎?你爲什麼認爲你需要「散列指數」? – styvane
散列索引位於MongoDB數據庫的'dom'列中。新的域名列表是一個Python字典,並且就是我獲取名稱以在數據庫中檢查的位置。沒有散列索引,訪問數據庫非常緩慢。在添加索引後,我可以快速地將光標獲取到數據庫中,但是對光標的任何用法(再一次)都很慢。 – user3587642