LevelDB用于100万个条目

2024-07-03 06:02:10 发布

您现在位置:Python中文网/ 问答频道 /正文

在调整LevelDB存储的插入时,需要考虑的首要因素是什么?在

我在表格中插入500万条以上的记录:

  1. key=“rs1234576543”非常可预测的结构。rs<;1+位数>;
  2. value=“120000,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()

我试过各种不同的批量大小,这对bit有帮助,但我希望还有一些东西我错过了。例如,可以利用知道键(或值)的最大长度吗?在


Tags: keyindbifvalue记录结构表格
1条回答
网友
1楼 · 发布于 2024-07-03 06:02:10

(作者:普利维尔)

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

我怀疑,如果您的写操作有更好的位置,性能不会下降得那么严重。在

其他值得尝试的想法有:

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

以上内容都可以从Python使用额外的关键字参数来使用plyvel.DB和{}方法。有关详细信息,请参阅api docs。在

相关问题 更多 >