有没有办法在leveldb中更改密钥?

时间:2014-01-13 22:01:06

标签: leveldb

是否有一些如何仅更改leveldb数据库中键的值?

我已经拥有一个包含18万行的数据库,我想更改密钥以添加前缀。

我正在使用带有node.js的leveldb。但任何解决方案都必须适合。

我已经尝试过重建这个数据库,但这需要花费太多时间。

1 个答案:

答案 0 :(得分:5)

LevelDB的工作方式,每个“Put”都是一个创建新状态的写入。 如果你做一个覆盖现有值的“Put”,你就会有两个 复制直到压缩消除旧值。

实际上,这意味着重建将是唯一的选择。

为了加快速度,您可以尝试:

  • 扫描现有数据库,然后通过线性扫描进行重建 通过键空间。您的新数据将被排序 订单,这可能有助于加快速度。

  • 分批插入。 LevelDB的许多变体会减慢写入速度 适应压实。在库存LevelDB中,您的作者将会睡觉 每当它需要睡眠时1ms,这与批处理中的写入次数无关。

  • 增加写缓冲区大小。我发现16MB-32MB是一个很好的“甜蜜点”。

  • 考虑使用HyperLevelDB。我们碰到了一些 LevelDB与写入的性能问题,并进行了一些更改 提高性能。你会看到你的插入速度上升, 这可以帮助你更快地重建 - 有时显着 更快。