我正在編寫一個簡單的應用程序,其中包含24個項目,以便在程序執行過程中保持不變,因此Berkeley DB(DBM)應該非常適合完成此任務。Berkeley DB的用法如何?
它只是爲了好玩。
但我不知道是否使用它(與Ruby),然後當用戶按下CTRL-C,然後停止執行。在這種情況下,數據無法全部搞亂?
例如,如果在DB中的值是63,並且我遞增1它(是64)
63 = 111111 (in binary)
64 = 1000000 (in binary)
所以,可以在CTRL-C發生右當「最高有效」 1是書面,但0沒有被寫入?在這種情況下,DB中的值將是127而不是63或64.如果它不是Ruby而是C中,並且用戶使用「關閉窗口」或「殺死」來終止進程呢?想想看,硬盤驅動器可能會立即將此字節(或4字節)寫入硬盤表面,所以這不應該發生。
如果CTRL-C不會導致這種情況發生,那麼斷電或我自己踢電源插頭可能會導致這種情況發生?例如,當該值首先被緩存在RAM中,並且當它被寫入到硬盤時,我將電源插頭拔出,並且在寫入0之前硬盤驅動器斷電。我知道有一百萬次,這不會發生,但這只是一個好奇心的問題。
在另一方面,如果我的腳本是
- 遞減硬幣值
- 給用戶一個「漢堡包」,在他的庫存
那麼當用戶按下CTRL- C,它發生在上面(1)和(2)之間,那麼用戶將會有更少的硬幣,並且不會有漢堡包。
爲了防止所有這些事情發生,應該使用使用SleepyCat,SQLite或MySQL的交易方法,而這些都不會發生?