首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并发写入的KyotoCabinet数据库快照

并发写入的KyotoCabinet数据库快照
EN

Stack Overflow用户
提问于 2013-11-14 10:35:20
回答 1查看 218关注 0票数 0

在京都内阁数据库中能安全地制作数据库快照并同时写入数据库吗?

KyotoCabinet数据库类kyotocabinet.DB (用于Java以及其他语言)提供了以下方法:

代码语言:javascript
复制
 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),直到操作完成。

当写入来自同一进程中的其他线程时,行为是否相同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-15 12:15:16

数据库的快照或副本阻止来自其他线程和进程的并发数据库操作。

为了在同一过程中进行测试,我通过JMX公开了京都内阁方法,并尝试从数据库中获取setget值,同时正在进行快照或副本。

方法setget在等待并发快照或副本完成。

我在文档中找到了解决这个问题的一部分。它使用缓存哈希数据库,但它看起来类似于其他数据库实现的行为:

主要针对高速缓存哈希数据库和缓存树数据库,提出了伪快照机制。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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19975404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档