2014-03-06 25 views

回答

0

从我对LevelDB的理解来看,64K的值比LevelDB的优化值要大得多。由于LevelDB以已排序的方式存储密钥,因此一个具有大值的密钥可能需要更新许多内部数据块。如果64K是您需要的固定大小的平均大小,那么您可能需要调整头文件中的某些参数。

但是10s似乎太长了。你确定没有其他来源可能会影响正在运行的进程吗?你能分享一些更多的细节,比如总密钥数量,访问/更新模式吗?

0

如果你在谈论插入(PUT)。您可能会看到几个长延迟请求。 LevelDB当缓冲写入超过阈值(默认为2MB)时,将SSTables(日志结构,不可变,数据单元)写入磁盘。这些新的SSTables被写入Level-0。

SSTables累积在磁盘上,LevelDB将合并这些SSTable与较旧的SSTables。有几个级别的SSTables,合并(称为压缩)在每两个连续级别上运行。 (L0,L1),(L2,L3)等。 关键是,当(L2,L3)或(L4,L5) )压缩正在执行,写入将在其他级别停止。 LevelDB以大单位进行数据重组,通常涉及数十兆字节的一次压缩。所以当它发生时,你会看到你的PUT操作已经排队,并且它必须等到压缩完成。

相关问题