import lmdb
env = lmdb.open(path_to_lmdb)
现在我似乎需要创建一个事务和一个游标,但是如何获得可以迭代的键列表?
一种无需单独枚举键即可获取键总数的方法,同时计算所有子数据库:
with env.begin() as txn:
length = txn.stat()['entries']
在我的笔记本电脑上使用大小为 1000000 的手工数据库进行测试结果:
您是否正在寻找类似的东西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
在文档中搜索。
正如 Sait 指出的那样,您可以遍历光标以收集所有键。但是,这可能有点低效,因为它也会加载值。这可以通过在cursor.iternext()
函数上使用 with来避免values=False
。
with env.begin() as txn:
keys = list(txn.cursor().iternext(values=False))
我为具有 2^20 个条目的数据库在两种方法之间做了一个简短的基准测试,每个条目都有一个 16 B 键和 1024 B 值。
通过遍历光标(包括值)来检索键平均需要874 毫秒运行 7 次,而第二种方法只返回键需要517 毫秒。这些结果可能会因键和值的大小而异。