7

目前,我们正在评估几个键+值数据存储,以替换 owr 主应用程序当前正在使用的较旧的 isam(20 多年!)...

问题是我们当前的 isam 不支持崩溃恢复。

所以 LevelDB 对我们来说似乎没问题(也检查 BerkleyDB 等)

但是我们遇到了热备份的问题,而且,鉴于 LevelDB 是一个库,而不是服务器,要求“热备份”很奇怪,因为它直观地暗示了一个外部备份过程。

也许有人想提出选择(或已知的解决方案)?

例如: - 通过主应用程序的内线程进行热备份?- 仅通过复制 LevelDB 数据目录进行热备份?

提前致谢

4

3 回答 3

8

您可以通过 LevelDB 进行快照迭代,这可能是制作热副本的最佳方式(不要忘记关闭迭代器)。

为了通过文件系统备份 LevelDB,我之前使用了一个脚本,该脚本创建到所有 .sst 文件(一旦写入就不可变)的硬链接,以及日志(以及 MANIFEST、CURRENT 等)文件的正常副本到备份目录在同一个分区。这很快,因为与 .sst 文件相比,日志文件很小。

备份运行时必须关闭数据库(由应用程序),但所花费的时间显然比将整个数据库复制到不同分区或上传到 S3 等所花费的时间要少得多。这可以在应用程序重新打开数据库。

于 2013-08-11T01:02:44.643 回答
2

LMDB 是一个嵌入式键值存储,但与 LevelDB 不同的是,它支持多进程并发,因此您可以使用外部备份进程。mdb_copy 实用程序将对数据库进行原子热备份,您的应用程序在备份运行时无需停止或执行任何特殊操作。http://symas.com/mdb/

于 2013-12-09T14:33:41.147 回答
1

我回答这个问题有点晚了,但是 LevelDB 的一些分支提供了良好的实时备份功能,例如 HyperLevelDB 和 RocksDB。这两个都可以作为 npm 模块使用,即 level-hyper 和 level-rocksdb。有关更多讨论,请参阅如何备份 RocksDB?HyperDex 问题

于 2016-01-10T17:24:55.520 回答