python LMDB大数据库(内存限制错误)

时间:2016-05-18 22:18:00

标签: python lmdb

我有一个大的lmdb,大约800K图像。 我想逐一阅读这些条目。 我的代码很简单,看起来像这样:

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()

任何建议?

1 个答案:

答案 0 :(得分:0)

错误跟踪可能会有所帮助。我查看了map_size param。来自docs

  

数据库的最大大小可能增长到;用于调整内存映射的大小。如果数据库比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)