0

我最近尝试过 leveldb,我发现一些单一的操作会很长(最长的是 10s ),虽然百分比很低(大约 0.01%)。我设置写缓冲区256m,我的值大约是64k。有人可以帮助我吗?非常感谢!

4

2 回答 2

0

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

但是10s似乎太长了。您确定没有其他可能影响正在运行的进程的来源吗?您能否分享更多详细信息,例如总密钥数、访问/更新模式?

于 2014-04-06T03:55:28.537 回答
0

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

SSTables 在磁盘上累积,LevelDB 会将这些 SSTables 与旧的 SSTables 合并。有几个级别的 SSTable,合并(称为压缩)在每两个连续的级别上进行。

从 Level-0 开始,合并发生在 (L0,L1)、(L2,L3) 等 eahc 对上。关键是,当执行某种 (L2,L3) 或 (L4,L5) 压缩时,写入将在其他级别停止。LevelDB 以大单位进行数据重组,通常一次压缩涉及数十兆字节。因此,当它发生时,您会看到 PUT 操作已排队,它必须等到压缩完成。

于 2014-06-04T19:10:02.727 回答