【发布时间】:2015-12-06 00:37:56
【问题描述】:
import lmdb
env = lmdb.open(path_to_lmdb)
现在我似乎需要创建一个事务和一个游标,但是如何获得可以迭代的键列表?
【问题讨论】:
-
我发现那里多了一个括号。
import lmdb
env = lmdb.open(path_to_lmdb)
现在我似乎需要创建一个事务和一个游标,但是如何获得可以迭代的键列表?
【问题讨论】:
您是否在寻找类似this:
with env.begin() as txn:
with txn.cursor() as curs:
# do stuff
print 'key is:', curs.get('key')
这可能不是最快的:
with env.begin() as txn:
myList = [ key for key, _ in txn.cursor() ]
print(myList)
免责声明:我对这个库一无所知,只是搜索了它的文档并在文档中搜索了key。
【讨论】:
一种无需单独枚举键即可获取键总数的方法,同时计算所有子数据库:
with env.begin() as txn:
length = txn.stat()['entries']
在我的笔记本电脑上用一个大小为 1000000 的手工数据库测试结果:
【讨论】:
正如 Sait 指出的那样,您可以遍历光标以收集所有键。但是,这可能有点低效,因为它也会加载值。这可以通过在 cursor.iternext() 函数和 values=False 上使用来避免。
with env.begin() as txn:
keys = list(txn.cursor().iternext(values=False))
我对具有 2^20 个条目的数据库进行了两种方法之间的简短基准测试,每个条目都有一个 16 B 键和 1024 B 值。
通过迭代光标(包括值)检索键平均需要 874 毫秒 7 次运行,而第二种方法仅返回键需要 517 毫秒 >。这些结果可能会因键和值的大小而异。
【讨论】: