在京都内阁数据库中能安全地制作数据库快照并同时写入数据库吗?
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实用程序。我发现这些操作会阻塞其他编写进程-es (kcpolymgr set),直到操作完成。
当写入来自同一进程中的其他线程时,行为是否相同?
发布于 2013-11-15 12:15:16
数据库的快照或副本阻止来自其他线程和进程的并发数据库操作。
为了在同一过程中进行测试,我通过JMX公开了京都内阁方法,并尝试从数据库中获取set或get值,同时正在进行快照或副本。
方法set和get在等待并发快照或副本完成。
我在文档中找到了解决这个问题的一部分。它使用缓存哈希数据库,但它看起来类似于其他数据库实现的行为:
主要针对高速缓存哈希数据库和缓存树数据库,提出了伪快照机制。
BasicDB::dump_snapshot' dumps all records into a stream or a file. TheBasicDB::load_snapshot的方法从流或文件中加载记录。虽然这些操作是原子性地执行的,但它们不会立即完成,而是按数据库大小的比例花费时间,而会阻塞其他线程。由于伪快照数据的格式在所有数据库类中都很常见,因此相互迁移记录是很有用的。 Db.dump_snapshot(backup.kcss);db.load_snapshot(backup.kcss);
https://stackoverflow.com/questions/19975404
复制相似问题