LMDB是否支持随机读取?

时间:2020-06-18 10:20:23

标签: c++ c caffe lmdb

假设有一个大的LMDB文件,通常,我会通过游标使用mdb_cursor_get(cursor,&key,&data,MDB_NEXT)顺序获取其内容。

现在,为了提高读取速度,我创建了一个队列,将LMDB分为10个相等的部分,并启动10个线程分别读取每个内容,然后将每个线程读取的内容放入队列。

可以吗?我不在乎订购只是在乎内容。

如果是,如何在每个线程上同步光标?

1 个答案:

答案 0 :(得分:0)

在我的测试中,多线程并没有提高读取LMDB的效率,但是使读取时间增加了一倍(或更多)。

测试方法:

  1. 生成具有10000条数据的LMDB并记录完整的读取时间:365s

  2. 将这10000条数据的LMDB分为两个相等的部分和四个相等的部分,并分别读取一个相等的部分: 仅读取一个5000_LMDB时间:170秒 只能读取一个2500_LMDB时间:81s

  3. 启动多个线程以读取LMDB: 两个线程,总共读取两个5000_LMDB的时间:596x2s 四个线程,总共读取四个2500_LMDB的时间:301x4s

相关问题