1. 程式人生 > >離線資料儲存和上傳方案

離線資料儲存和上傳方案

QQ技術交流群:129518033

解決方案下載地址:

Github相關專案:


引言

在網路廣泛普及的今天,各行各業的發展都對網路產生了很大的依賴性.瞬時的斷網可能會對一些行業造成巨大的損失,如銀行,金融等資料量較大的行業.斷網或者網路傳輸失敗都可能會使一些即時產生的關鍵資料丟失,導致一些問題或者糾紛產生.為了保障一些行業中資料即時產生、傳送、儲存的可靠性,尤其是客戶端即時產生的資料能安全上傳,使用一種安全的離線資料儲存和自動重傳機制非常重要.

離線資料儲存技術

SQLite是一款輕型的資料庫,是遵守ACID的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能夠支援Windows/Linux/Unix等等主流的作業系統,同時能夠跟很多程式語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC介面,同樣比起Mysql、PostgreSQL這兩款開源的世界著名資料庫管理系統來講,它的處理速度比他們都快。

不像常見的客戶-伺服器範例,SQLite引擎不是個程式與之通訊的獨立程序,而是連線到程式中成為它的一個主要部分。所以主要的通訊協議是在程式語言內的直接API呼叫。這在消耗總量、延遲時間和整體簡單性上有積極的作用。整個資料庫(定義、表、索引和資料本身)都在宿主主機上儲存在一個單一的檔案中。

CppSqLite對SQLite的API進行了一次封裝,讓開發人員更加方便的使用SQLite。

自動重傳

在程式設計時使用定時器按時輪詢檢查SQLite資料庫,如果存在資料則自動重發上傳,避免傳輸失敗後資料的丟失.

資料上傳解決方案

存在的問題:上傳時資料型別不統一,資料比較零散,對應不同資料還要給出對應的處理資訊,而使用資料庫時要將資料規格儲存.

解決辦法:資料庫的設計只需給出關鍵欄位,將一次提交的資料統一打包成一種型別作為資料欄位儲存(即JSON資料),使用JSON將資料和對應的方法儲存,傳送成功後再對資料按照JSON解析,使不同的資料可以按對應的型別儲存到另一端資料庫中.

資料庫的設計:

欄位: 

id: INT
Data: TEXT
UpdateTime:DATETIME

JSON格式:

{
    "businesses": [
        {
            "logicFunction":"firstFunction",
            "parms": [
                {
                    "parm":"1"
                }
            ]
        },
        {
            "logicFunction":"secondFunction ",
            "parms": [
                             {
                    "parm": "2"
                },
                {
                    "parm": "3"
                }
            ]
        }
    ]
}
 

businesses:業務陣列,預設業務的順序為陣列的儲存順序

parms:引數陣列

parm:具體引數值,必須與logicFunction對應的函式的引數一致

logicFunction:邏輯函式,用於資料解析之後,確定執行哪個函式,其引數為parms陣列的值

例如,本例中先執行函式firstFunction,再執行函式secondFunction,僅有二者同時成功則表示成功,這樣一來就解決了業務相關的資料重傳問題。

覺得文章對你有幫助,可以用微信掃描二維碼捐贈給博主,謝謝!



QQ技術交流群:129518033