2015-11-06 111 views
0

我是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擴展。

我做錯了什麼?

感謝

+1

是'newdomainlist'列表嗎?你爲什麼認爲你需要「散列指數」? – styvane

+0

散列索引位於MongoDB數據庫的'dom'列中。新的域名列表是一個Python字典,並且就是我獲取名稱以在數據庫中檢查的位置。沒有散​​列索引,訪問數據庫非常緩慢。在添加索引後,我可以快速地將光標獲取到數據庫中,但是對光標的任何用法(再一次)都很慢。 – user3587642

回答

0

原來,我已經創建了錯誤的領域我的散列索引,「收集」,而不是「職位」。把它弄糊塗成mongodb缺乏經驗。我們現在可以關閉它,或者完全刪除它。