如何使用 python 计算和枚举 lmdb 中的键?
How do I count and enumerate the keys in an lmdb with python?
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 的手工数据库测试结果:
- 上面的方法是瞬时的(0.0秒)
- 迭代方法大约需要1秒。
正如 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 毫秒。这些结果可能因键和值的大小而异。
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 的手工数据库测试结果:
- 上面的方法是瞬时的(0.0秒)
- 迭代方法大约需要1秒。
正如 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 毫秒。这些结果可能因键和值的大小而异。