Python 将LMDB复制到另一个LMDB可减少文件大小
在已经存在的lmdb()中洗牌数据。我检索了数据,洗牌并写回新的lmdb。但是当我检查lmdb文件大小时,它被减小了。旧的lmdb文件大小:3792896,但新的lmdb文件大小:2314240 已实现的Python代码:Python 将LMDB复制到另一个LMDB可减少文件大小,python,caffe,lmdb,Python,Caffe,Lmdb,在已经存在的lmdb()中洗牌数据。我检索了数据,洗牌并写回新的lmdb。但是当我检查lmdb文件大小时,它被减小了。旧的lmdb文件大小:3792896,但新的lmdb文件大小:2314240 已实现的Python代码: import lmdb from random import shuffle lst_data = []; env = lmdb.open('val_3', readonly=True); with env.begin() as txn: cursor = txn
import lmdb
from random import shuffle
lst_data = [];
env = lmdb.open('val_3', readonly=True);
with env.begin() as txn:
cursor = txn.cursor();
for key, value in cursor:
innerlst_data = [key,value];
lst_data.append(innerlst_data);
shuffle(lst_data);
env1 = lmdb.open('mod_val_3');
with env1.begin(write=True) as txn1:
for i in range(len(lst_data)):
str_id = '{:08}'.format(i);
txn1.put(str_id.encode('ascii'),lst_data[i][1]);
代码的参考取自。
任何建议/想法都会有帮助。您可以使用
mdb_stat
查看数据库中的条目数。这将确认您的副本是否正常工作。这是相当常见的。旧数据库可能由于删除了项目而浪费了空间。这就是为什么数据库具有类似SQLite真空的功能。对于某些数据库,旧数据库中也可能存在新数据库中不存在的索引,这会占用磁盘空间,但看起来lmdb不允许您指定索引内容。我尝试在循环中重复上述过程,lmdb文件大小变为“0”。所以我认为删除的不是浪费空间,而是数据被删除了,我不明白。是的,这很奇怪。在对游标进行迭代之前,您是否尝试过调用游标.first()?不,我没有使用游标.first()。我认为使用它将导致光标位置更改为第一条记录。您能否提供一个关于如何使用mdb_stat
的更详细示例?mdb_stat-fear将为您提供有关免费列表使用情况、环境信息、所有子数据库和当前需要编译的读者mdb_stat的信息。C实现可在