「此外,可能會有功率損失不能徹底關閉應用程序,因此任何解決方案都必須具有持續高速緩存,以保持電源週期。」
對於Hibernate 2級緩存,您已經有了一個解決方案。但是你沒有說出什麼是真正的要求。你有一個不可實現的網絡。沒關係,你有不可行的電源。這也沒關係。現在你想達到什麼樣的服務水平?什麼是可以接受的?
數據丟失是否可接受?你能接受多少?你接受什麼風險?
爲了更加明確,假設您有一個數據庫的本地副本或至少部分數據庫。假設您知道如何排隊/保存在本地進行的修改。假設您將這些修改存儲在硬盤上,以便在發生電源故障時保證安全。假設您可以在連接再次可用時將更改與主數據庫合併。
這已經有很多假設了。好吧,但如果一個硬盤在電源故障後失敗會發生什麼?你知道硬盤不喜歡電源故障,並且在電源故障時往往會損壞,甚至可能會損壞?
因此,你把一個RAID,並添加一個不間斷電源。這很好。操作系統檢測到電源故障事件。完成當前事務並正確關閉。您的RAID可以保護您免受磁盤故障。
好的,但如果整個計算機停止運作會發生什麼?發生火災時會發生什麼?還是水害?所有磁盤將被管理,數據不可恢復,並且與中央數據庫不同步的內容將丟失。它可以接受嗎?
即使無線網絡打開,電源也能正常工作......無論如何,中央數據庫的可靠性如何?你有定期備份嗎?還是集羣解決方案?你確定你的中央數據庫是可靠嗎?
從數據庫的角度來看,很容易使用羣集或備份並使用事務來確保數據一致性。您仍然可以釋放數據(如果特別不使用羣集),但您應該可以恢復到最後一次備份。
但是,如果您想離線工作(數據庫不可用),並且您不是唯一可以修改數據庫的人員,則會發生衝突。這不再是緩存,休眠或任何技術問題。
這是功能性問題。幾個修改脫機時發生什麼並且您必須合併?什麼是可接受的?什麼不是。這可能是在重新連接時,最近的更改適用,舊的更改將被丟棄。或者檢測到衝突衝突並提示用戶處理它們。您可以嘗試應用排隊更改並應用所有這些...
我傾向於認爲您可以提供「離線模式」,但您的用戶必須知道他們處於離線狀態,並且應該在中央數據庫中的變化正在終結,並最終解決衝突。但是,我的觀點。
注意,當我說「適度」內存時,我的意思是大約256Mb,並且有虛擬內存。所以它並不壞,只是不如桌面/服務器那麼笨重。 – 2011-05-15 17:03:35