是否有一些如何仅更改leveldb数据库中键的值?
我已经拥有一个包含18万行的数据库,我想更改密钥以添加前缀。
我正在使用带有node.js的leveldb。但任何解决方案都必须适合。
我已经尝试过重建这个数据库,但这需要花费太多时间。
答案 0 :(得分:5)
LevelDB的工作方式,每个“Put”都是一个创建新状态的写入。 如果你做一个覆盖现有值的“Put”,你就会有两个 复制直到压缩消除旧值。
实际上,这意味着重建将是唯一的选择。
为了加快速度,您可以尝试:
扫描现有数据库,然后通过线性扫描进行重建 通过键空间。您的新数据将被排序 订单,这可能有助于加快速度。
分批插入。 LevelDB的许多变体会减慢写入速度 适应压实。在库存LevelDB中,您的作者将会睡觉 每当它需要睡眠时1ms,这与批处理中的写入次数无关。
增加写缓冲区大小。我发现16MB-32MB是一个很好的“甜蜜点”。
考虑使用HyperLevelDB。我们碰到了一些 LevelDB与写入的性能问题,并进行了一些更改 提高性能。你会看到你的插入速度上升, 这可以帮助你更快地重建 - 有时显着 更快。