2010-11-29 40 views

回答

8

我并不完全确定有关Java等价物,但:

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

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

编辑:

显然FSYNC相当于()在Java是FileDescriptor.sync():

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

的一点是,要实现真正的ACID语义的DB ,所有的交易应该同步到永久存储介质。否则,您的应用程序必须能够处理无提示失败的事务--DBMS会将事务推送到文件系统并成功返回,但如果这样做,更改可能会丢失。系统失去动力。

物理同步的问题是它可能会对性能产生重大影响。硬盘可以每秒处理数量有限的事务(SSD在此速度更快,批次),这就是为什么要提高数据库性能的第一件事是将插入事项捆绑到更大的事务中。

+1

请问有人可以为这个问题添加“kyotocabinet”标签吗?我没有1.500来创建新标签。谢谢! – 2010-11-29 02:08:42

相关问题