lbry-sdk/convert_leveldb_rocksdb.py
2022-01-31 14:47:48 +00:00

40 lines
1.4 KiB
Python

import os
import plyvel
from lbry.wallet.server.db.prefixes import HubDB, DB_PREFIXES
def main(db_dir: str):
old_path = os.path.join(db_dir, 'lbry-leveldb')
new_path = os.path.join(db_dir, 'lbry-rocksdb')
old_db = plyvel.DB(
old_path, create_if_missing=False, max_open_files=64,
)
db = HubDB(new_path, max_open_files=64)
try:
for prefix, cf in db.column_families.items():
cnt = 0
for shard_int in range(2**8):
shard_prefix = prefix + shard_int.to_bytes(1, byteorder='big')
with db._db.write_batch() as batch:
batch_put = batch.put
with old_db.iterator(prefix=shard_prefix, fill_cache=False) as it:
cnt_batch = 0
for k, v in it:
batch_put((cf, k), v)
cnt += 1
cnt_batch += 1
if cnt % 100_000 == 0:
print(f"wrote {cnt} {DB_PREFIXES(prefix).name} items")
if cnt_batch % 1_000_000 == 0:
print(f"cnt_batch {cnt_batch} flushing 1m items")
db._db.write(batch)
batch.clear()
finally:
old_db.close()
db.close()
if __name__ == "__main__":
main('/mnt/sdb/wallet_server/_data/')