调整LevelDB存储的插入时要考虑的主要因素是什么?
我在表单中插入500M +记录:
使用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()
我尝试了各种批量大小,这有点帮助,但我希望有一些我错过的东西。例如,可以知道密钥(或值)的最大长度吗?
(Plyvel作者在这里。)
LevelDB按排序顺序保留所有数据库项。由于您是以随机顺序编写的,这基本上意味着数据库的所有部分都会被重写,因为LevelDB必须合并SST(这在后台发生)。一旦数据库变大,并且不断向其中添加更多项,就会导致写入吞吐量降低。
我怀疑如果你有更好的写入位置,性能不会降低。
其他可能值得尝试的想法是:
write_buffer_size
max_file_size
block_size
进行实验.write_batch(sync=False)
上面的所有内容都可以在Python中使用plyvel.DB
的额外关键字参数和.write_batch()
方法。有关详细信息,请参阅api docs。