由于数据库规模和列族很大,无法从RocksDB获取键



我想从RocksDB获得所有键,但当我尝试创建迭代器的list时,我得到一个空列表:

it = db.iterkeys()
it.seek_to_first()

数据库包含数据,我确信。为了提供最少的可行代码,这里是数据库。我的完整代码是:

import rocksdb
from pprint import pprint
column_families = {}
columns = ["col9", "col8", "col7", "col6", "col5", "col4", "col3", "col2", "col1", "col11", "col0", "col10"]
for column in columns:
column_families[bytes("{}".format(column), encoding='utf-8')] = rocksdb.ColumnFamilyOptions()

db_path = "db"
db = rocksdb.DB(db_path, rocksdb.Options(create_if_missing=False), column_families = column_families)
print("DB opened.")
it = db.iterkeys()
it.seek_to_first()
keys = list(it)
counter = 0
for key in keys:
print(key)
if counter == 10:
break
counter += 1

起初,我只是读取数据库,但得到错误,包括列族,这解决了"无法打开数据库";错误,但我没有得到一个空的键列表。

我怎么得到所有的钥匙?

您需要指定要迭代的列族。比如说,如果您想读取列族'col9'中存储的所有键,您可以尝试以下操作:

col9_cf_handle = db.get_column_family(b'col9')
it = db.iterkeys(col9_cf_handle)
it.seek_to_first()

最新更新