在Kyoto Cabinet数据库中是否可以安全地制作数据库快照并同时写入数据库?
KyotoCabinet数据库类kyotocabinet.DB(适用于其他语言的JAVA) 提供以下方法:
boolean dump_snapshot(String dest) // Dump records into a snapshot file.
boolean copy(String dest) // Create a copy of the database file.
这两项行动都可能很长。我没有直接测试这种方法,而是使用来自不同进程的kcpolymgr
实用程序。我发现操作会阻止其他写入进程(kcpolymgr set
),直到操作完成。
当写入来自同一进程中的其他线程时,行为是否相同?
答案 0 :(得分:0)
数据库的快照或副本阻止来自其他线程和进程的并发数据库操作。
为了在同一过程中进行测试,我通过JMX公开了Kyoto Cabinet方法,并尝试set
或get
数据库中的任何值,同时快照或副本正在进行中。
方法set
和get
等待并发快照或副本完成。
我找到了documentation的一部分来解决这个问题。它调整了缓存哈希数据库,但看起来其他数据库实现的行为类似:
主要用于缓存哈希数据库和缓存树数据库 提供了“伪快照”机制。
BasicDB::dump_snapshot' dumps all records into a stream or a file. The
BasicDB :: load_snapshot'方法从流或文件加载记录。 尽管操作是以原子方式执行的,但它们并未完成 暂时但是需要花时间与数据库大小成比例 阻止其他线程。因为伪快照数据的格式 在所有数据库类中很常见,它对迁移很有用 彼此的记录。db.dump_snapshot("backup.kcss"); db.load_snapshot("backup.kcss");