繁体   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