2009-04-10 47 views
0

我們正在開發一個RetailPOS.net(windows)應用程序。如何防止由於突然斷電而導致.net應用程序中的數據丟失?

其中一位客戶詢問「突然斷電時應用程序當前正在處理的數據會發生什麼?」,「應用程序能夠恢復未保存的數據嗎?」

我在想,如何將這個特性包含在.net應用程序中?

有些人可以幫助我,這需要做什麼?

回答

4

首先,尋找到一個UPS(未interuptable電源)

其次,研究建立持久的交易,交易將盡早且經常保存,但不能承諾,直到你告訴它。這比TSQL中的典型事務稍微多一點。

0

PowerFailureException類將解決此問題。實際上只需用UPS維持電力。唯一的其他選擇確實是維護數據庫事務的原子性。

1

如果這是一個很難的電源切斷(就像在拔下電源的情況下在筆記本電腦上移除電池一樣),那麼除了每次寫入磁盤之外別無他法。步。的。的。辦法。 (談論性能問題。)還要確保記錄了一些信息,以便讓應用程序知道什麼時候啓動了之前正在執行的操作,以便它可以繼續或重試操作。

如果它是斷電的,就像按下電源按鈕關閉/休眠/休眠計算機一樣,那麼請監聽SystemEvents.PowerModeChanged事件並採取相應措施。

最後,確保如果數據在寫入數據庫一半時會損壞,請確保您的數據庫寫入是原子的(或者所有更改都已發生並且被接受,或者都不是)。

0

你真正想要的是磁盤事務中的原子。有很多方法可以執行這些操作,但是如果您正在使用現有的數據庫產品,則通常會執行這些操作。

如果您推出了自己的數據庫或文件格式,根據您的文件格式,您可以根據自己的需要進行一些工作。

1

您可以將正在接收的當前信息附加到文件系統。這將是一個表現擊中,但會讓你回到最後被捕獲的項目。

當應用程序開始檢測是否有未決的文件,並提供恢復選項。正確加載保存在文件中的數據。

一旦你掌握了所有的信息,當你正在做支付時發生的過程時,確保以原子方式記錄過程中的任何重大變化。如果您正在接觸外部系統,請記錄您何時開始操作以及何時立即恢復。在上面總是有一段時間會出現故障,但是您希望儘可能縮短時間併爲恢復過程提供足夠的信息。最糟糕的情況是,如果系統無法自動恢復,您希望它有足夠的信息來確定停止的進程中的哪個位置。

0

您可能需要考慮讓您的應用程序使用SQLite

他們對when to use page有一些很好的信息。

脫穎而出的幾點是:

  • 更新的應用內容進行修訂

  • 所以不存在這樣的事故,失去了工作內容不斷並自動更新原子發生電源故障或崩潰。

我正在尋找一個應用程序,我要實現,這將在一個第三世界國家,停電頻繁全天使用的類似選項....到目前爲止的SQLite似乎是一個很好的選擇。

但是在一天結束時,您的選擇將取決於您的個人情況和要求。

相關問題