簡體   English   中英

python LMDB大數據庫(內存限制錯誤)

[英]python LMDB large DBs (Memory Limit Error)

我有一個很大的lmdb,大約有80萬張圖像。 我想一一閱讀條目。 我的代碼非常簡單,看起來像這樣:

with env.begin() as txn:
cursor = txn.cursor()
for key, value in cursor:
    print(key)

但是在讀取大約70000個條目后,它的內存不足(〜10GB)。 我不知道為什么。 我試圖像下面那樣做,但是沒有用。

for r in range(0,env.stat()['entries']):
if r%10000==0:
    if r!=0:
        txn.commit()
        cur.close()
    txn=env.begin()
    cur = txn.cursor()
    print("Change Change Change "+ str(r))
    sys.stdout.flush()
    if r==0:
        cur.first()
    else:
        cur.set_range(key)
        cur.next()
key, value = cur.item()

有什么建議嗎?

錯誤跟蹤可能會有所幫助。 我會檢查map_size參數。 文檔

數據庫的最大大小可能會增加到; 用於確定內存映射的大小。 如果數據庫增長到大於map_size,則將引發異常,用戶必須關閉並重新打開Environment。 在64位上,使它變大(例如1TB)沒有任何懲罰。 在32位上必須小於2GB。

這將是編寫時的一個示例:

with lmdb.open(LMDB_DIR, map_size=LMDB_MAX_SIZE) as env:
    with env.begin(write=True) as txn:
        return txn.put(mykey, value)

暫無
暫無

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

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