2010-11-29 35 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