import lmdb
env = lmdb.open(path_to_lmdb)
Теперь мне кажется нужно создать транзакцию и курсор, но как мне получить список ключей, которые я могу перебирать?
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
в документах.
Как указал Саит, вы можете перебирать курсор, чтобы собрать все ключи. Однако это может быть немного неэффективно, так как это также загрузит значения. Этого можно избежать, используя функцию cursor.iternext()
с values=False
.
with env.begin() as txn:
keys = list(txn.cursor().iternext(values=False))
Я провел небольшой тест между обоими методами для БД с 2**20 записями, каждая с ключом 16 байт и значением 1024 байт.
Извлечение ключей путем перебора курсора (включая значения) заняло в среднем 874 мс для 7 запусков, в то время как второй метод, при котором возвращаются только ключи, занял 517 мс. Эти результаты могут отличаться в зависимости от среднего размера ключей и значений.