LevelDB为100万条目

问题描述 投票:1回答:1

调整LevelDB存储的插入时要考虑的主要因素是什么?

我在表单中插入500M +记录:

  1. key =“rs1234576543”非常可预测的结构。 rs <1+位数>
  2. value =“1,20000,A,C”字符串可以更长但通常~40个字符
  3. 钥匙是独一无二的
  4. 键插入顺序是随机的

使用python plyvel进入LevelDB商店,随着记录数量的增长,速度会急剧下降。我想这是预期的,但我是否有调整措施可以让它更好地扩展?

示例代码:

import plyvel
BATCHSIZE = 1000000

db = plyvel.DB('/tmp/lvldbSNP151/', create_if_missing=True)
wb = db.write_batch()
# items not in any key order
for key, value in DBSNPfile:
    wb.put(key,value)
    if i%BATCHSIZE==0:
        wb.write()
wb.write()

我尝试了各种批量大小,这有点帮助,但我希望有一些我错过的东西。例如,可以知道密钥(或值)的最大长度吗?

python leveldb plyvel
1个回答
2
投票

(Plyvel作者在这里。)

LevelDB按排序顺序保留所有数据库项。由于您是以随机顺序编写的,这基本上意味着数据库的所有部分都会被重写,因为LevelDB必须合并SST(这在后台发生)。一旦数据库变大,并且不断向其中添加更多项,就会导致写入吞吐量降低。

我怀疑如果你有更好的写入位置,性能不会降低。

其他可能值得尝试的想法是:

  • 增加write_buffer_size
  • 增加max_file_size
  • 用更大的block_size进行实验
  • 使用.write_batch(sync=False)

上面的所有内容都可以在Python中使用plyvel.DB的额外关键字参数和.write_batch()方法。有关详细信息,请参阅api docs

© www.soinside.com 2019 - 2024. All rights reserved.