2014-01-13 60 views
3

是否有一些如何更改leveldb数据库中的键的值?有没有办法改变leveldb中的键?

我已经拥有一个拥有18万个行的数据库,并且我想要更改键以添加前缀。

我使用leveldb和node.js.但任何解决方案都必须符合

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

+0

这看起来不可能(即使使用本地API)。不过,每个记录的大小是多少? 18百万人看起来并不多。 – Lol4t0

+0

我建议在[leveldb邮件列表](http://groups.google.com/group/leveldb) – wannaKnowItAll

+0

@ Lol4t0上提问您的问题:问题是基础在生产中。这些文件大约有9GB。 – Leonardo

回答

4

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

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

为了让你可以更快的尝试:

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

  • 分批插入。 LevelDB的许多变体都会减缓对写入 的压缩。在股票LevelDB中,只要需要休眠,您的作者就会睡1ms,这与批处理中的写入次数无关。

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

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

相关问题