java - 什么是 Kyoto Cabinet Database 的 "physical synchronization"?

标签 java tokyo-cabinet kyotocabinet

函数begin_transaction接受一个 boolean 参数,指示应该执行哪种类型的同步;为真时为物理,为假时为逻辑。

“物理”同步或硬同步是什么意思?

最佳答案

我不太确定 Java 等价物,但是:

  • 逻辑同步意味着任何数据库更改都从 DBMS 缓存写入文件系统。在 C 中,您可以使用 fprintf/fwrite/write/etc 来做到这一点。

  • 物理同步指的是上述内容,加上要求操作系统将所述更改推送到永久存储(硬盘驱动器、SSD 等)而不是将它们保存在文件系统缓存中的附加操作。这样可以确保在发生任何意外情况时不会丢失这些更改。在 Linux/POSIX 系统上,这意味着调用 fsync() 或 fdatasync() 系统调用。

编辑:

显然,Java 中的 fsync() 等效于 FileDescriptor.sync():

http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileDescriptor.html#

重点是要为数据库实现真正的 ACID 语义,所有事务都应同步到永久存储介质。否则,您的应用程序必须能够处理静默失败的事务 - DBMS 会将事务推送到文件系统并成功返回,但是如果发生更改,更改可能会丢失。系统断电。

物理同步的问题在于它会对性能产生重大影响。硬盘驱动器每秒可以处理有限数量的事务(SSD 在这方面要快很多),这就是为什么要提高数据库性能的第一件事就是将插入捆绑到较大的事务中。 p>

关于java - 什么是 Kyoto Cabinet Database 的 "physical synchronization"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299896/

相关文章:

java - 从Java中的压缩PDF文件中读取字节

tokyo-cabinet - Tokyo Cabinet 支持内存中 B+ 树实现吗?

Java 小数格式化

java - 这是在单独线程上删除文件夹的正确方法吗?

java - hibernateexecuteUpdate 受影响的行数错误

database - 为什么我无法创建大于 1.8GB 的​​固定长度 tokyo Cabinet 数据库?

tokyo-cabinet - Tokyo Cabinet -达到100万后更慢插入

python - RocksDB 可以处理多个只读客户端吗?

java - 如何在playframework中使用kyotocabinet(JNI)?

ruby - 通过 ruby​​gems 安装 Kyoto Cabinet 失败