我的數據庫引擎通過發出整個磁盤塊的寫()系統調用寫入的64個字節記錄。該設備以O_DIRECT模式打開。例如,當我執行UPDATE整個磁盤塊(默認512字節)時,塊中的第三條記錄從字節128開始,到位置192結束。是寫入()與O_DIRECT ACID兼容?
我的問題是,我可以calim符合ACID,如果我寫的每一次更新發生在自己的記錄?通常,數據庫引擎通過將修改後的磁盤塊寫入另一個(空閒)位置,然後在第一次寫入返回成功後立即使用一個(原子)寫入更新索引到新塊來執行此操作。但我沒有這樣做,我正在用當前數據覆蓋當前數據,希望寫入成功。我的方法是否有任何潛在的問題?它是否符合ACID標準?如果硬件只寫入塊的一半而我的記錄正好在中間呢?還是硬件已經完成了我描述的2步寫入過程,但是在塊級別,所以我不需要在軟件中重複相同的操作?
(注:不記錄比物理磁盤塊(512個字節默認)和FSYNC較大的去每次寫(後),這是僅適用於Linux)
可能重複[磁盤扇區寫入原子?](http://stackoverflow.com/questions/2009063/are-disk-sector-writes-atomic) – Nemo 2012-03-16 01:56:01
http://www.qnx.com/developers/ docs/6.4.0/neutrino/sys_arch/fsys.html#QNX6_filesystem – 2012-04-03 16:39:43