3

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

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

我将 leveldb 与 node.js 一起使用。但是任何解决方案都必须适合。

我已经尝试重建这个数据库,但是它花费了太多时间。

4

1 回答 1

6

LevelDB 的工作方式是,每个“Put”都是创建新状态的写入。如果您执行覆盖现有值的“Put”,您将拥有两个副本,直到压缩消除旧值。

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

为了使其更快,您可以尝试:

  • 扫描现有数据库,并通过对键空间进行线性扫描来重建。您的新数据将按排序顺序插入,这可能有助于加快速度。

  • 分批插入。LevelDB 的许多变体会减慢写入速度以适应压缩。在现有的 LevelDB 中,您的写入器将在需要休眠时休眠 1 毫秒,这与批处理中的写入次数无关。

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

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

于 2014-01-23T20:49:52.810 回答