如何使用python计算和枚举lmdb中的键?

如何使用python计算和枚举lmdb中的键?,python,lmdb,Python,Lmdb,现在,我似乎需要创建一个事务和一个游标,但如何获得可以迭代的键列表?您是否在寻找类似以下内容的内容: 更新: 这可能不是最快的: 免责声明:我对该库一无所知,只是搜索了它的文档并在文档中搜索了键。一种获取键总数的方法,无需单独枚举,也可以计算所有子数据库: with env.begin() as txn: myList = [ key for key, _ in txn.cursor() ] print(myList) 在我的笔记本电脑上手动创建1000000大小的数据库的测试结果

现在,我似乎需要创建一个事务和一个游标,但如何获得可以迭代的键列表?

您是否在寻找类似以下内容的内容:

更新: 这可能不是最快的:


免责声明:我对该库一无所知,只是搜索了它的文档并在文档中搜索了
键。

一种获取键总数的方法,无需单独枚举,也可以计算所有子数据库:

with env.begin() as txn:
   myList = [ key for key, _ in txn.cursor() ]
   print(myList)
在我的笔记本电脑上手动创建1000000大小的数据库的测试结果:

  • 上述方法是瞬时的(0.0秒)
  • 迭代方法大约需要1秒

正如Sait所指出的,您可以在光标上迭代以收集所有键。但是,这可能有点低效,因为它也会加载值。这可以通过在
游标上使用
value=False
函数来避免

将env.begin()作为txn:
keys=list(txn.cursor().iternext(value=False))
我在两种方法之间做了一个简短的基准测试,测试的数据库有2**20个条目,每个条目都有16b的键和1024b的值


通过在光标上迭代检索键(包括值)平均花费了874 ms7次,而第二种方法(仅返回键)花费了517 ms。根据键和值的平均大小,这些结果可能会有所不同。

我在那里发现了一个额外的括号。否。我知道文档页面。我想知道如何在不逐个枚举的情况下获取密钥总数。我还想知道枚举所有键值对的最佳(最快)方法。你提到的方法对我来说似乎花了相当长的时间,但它可能与我的db的大小有关(大约1m个条目)。@Doug我更新了我的答案,通过迭代光标来获得键列表。但是可能有一种更快的方法。除了需要很长时间来遍历键之外,读取键列表还有其他缺点吗?
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)
with env.begin() as txn:
    length = txn.stat()['entries']