有一些如何仅更改leveldb数据库中键的值的方法吗?
我已经有一个拥有1800万行的数据库,并且我想更改键以添加前缀。
我正在将leveldb与node.js一起使用。但是任何解决方案都必须适合。
我已经尝试过重建该数据库,但是它花费了太多时间。
LevelDB的工作方式是,每个“放置”都是创建新状态的写操作。如果执行“覆盖”(Put)操作以覆盖现有值,则将有两个副本,直到压缩消除了较早的值。
实际上,这意味着重建将是唯一的选择。
为了更快,您可以尝试:
扫描现有数据库,然后通过对键空间进行线性扫描来重建。您的新数据将按排序顺序插入,这可能有助于加快处理速度。
分批插入。LevelDB的许多变体将减慢写入速度以适应压缩。在库存的LevelDB中,您的写入器每当需要睡眠时将睡眠1毫秒,这与批处理中的写入次数无关。
增加写缓冲区大小。我发现16MB-32MB是一个不错的“最佳选择”。
考虑使用HyperLevelDB。我们在写入时遇到了LevelDB的一些性能问题,并进行了一些更改以提高性能。您会看到插入速度加快,这可以帮助您更快地重建-有时会更快。