如何将数据附加到现有的LMDB?

时间:2016-01-16 00:32:14

标签: python machine-learning caffe pycaffe lmdb

我有大约100万张图像一次放入数据集10000中。

我确定map_size与此article

的引用有误

使用此行创建集合

LogController lc;
const char * my_fmt = "Some data %'d";
lc.insertLogEntry( my_fmt, int_value ); 

每10000个样本使用此行将数据写入文件,其中X和Y是放置在LMDB中的数据的占位符。

env = lmdb.open(Path+'mylmdb', map_size=int(1e12)

如何编辑此代码,以便将新数据添加到此LMDB而不替换,因为此方法将其替换为相同位置。 我用env.stat()检查了生成后的长度。

1 个答案:

答案 0 :(得分:4)

让我扩展上面的评论。

LMDB中的所有条目都是根据唯一键存储的,并且您的数据库已包含i = 0, 1, 2, ...的键。您需要一种方法来查找每个i的唯一键。最简单的方法是找到现有数据库中最大的密钥并继续添加它。

假设现有密钥是连续的,

max_key = env.stat()["entries"]

否则,更彻底的方法是迭代所有键。 (Check this.

max_key = 0
for key, value in env.cursor():
    max_key = max(max_key, key)

最后,只需替换for循环的第7行,

str_id = '{:08}'.format(i)

通过

str_id = '{:08}'.format(max_key + 1 + i)

附加到现有数据库。