1. 程式人生 > >基於檔案的離線資料同步方案

基於檔案的離線資料同步方案

產品此前的資料備份方案,存在不少問題,所以需要設計一個新的方案。本文總結一下新舊方案的優劣

首先APP是一個支援離線的應用。本地資料儲存在sqlite,在離線環境下,在本地資料庫裡讀寫記錄,在有網路的時候,再將資料備份到伺服器;同時,也可以隨時將資料從伺服器恢復到本地

舊方案

此前的備份方案是基於內容的,每一條記錄都有create_date和modify_date欄位,同時APP儲存有latest_backup_date(上次備份時間)。然後開始備份的時候,就對所有表進行掃描,根據這3個時間的對比,直接生成sql語句,發到伺服器執行,寫入服務端的mysql資料庫;收到伺服器的成功響應之後,又重新整理latest_backup_date

而恢復邏輯,則是從伺服器的mysql資料庫裡,遍歷找到所有的記錄,也生成sql語句,發回客戶端,客戶端再執行sql進行恢復。當發生衝突的時候,以客戶端的資料為準,違反主鍵約束的時候,插入資料就會失敗。比如客戶端將一個賣品的價格改為200,而伺服器mysql裡的記錄還是100,那麼下發的insert語句就無法執行

這個方案有幾個問題:

1、客戶端的備份邏輯,散落在業務模組裡,因為涉及到業務操作的地方,都需要記得修改modify_date和create_date,容易造成資料備份不上去的BUG

2、備份邏輯依賴客戶端本地時間,而客戶端時間總是不可靠的

3、服務端缺少客戶端資料庫的完整映象,也就是說,一旦有BUG導致部分資料沒有備份上來,那麼如果使用者解除安裝了APP或者PAD丟失,這部分資料就永遠找不回來了

4、生成恢復檔案之前,需要遍歷mysql表,資料量大的時候,容易使客戶端超時而恢復失敗

5、恢復邏輯以客戶端資料為準,在某些場景下不滿足需求,比如做不到在服務端對客戶端的資料進行干預校正

6、sql是純文字,當資料量大的時候,在網路間傳輸的資料太多

新方案

新的方案准備這樣做:備份和恢復不再基於內容,而是基於檔案。每次備份都把本地的資料庫檔案上傳到伺服器。但是在傳輸上有特別處理,只傳檔案的差量;在伺服器利用差量檔案,合併得到完整的客戶端資料庫檔案副本。同時在資料庫增加一個差量表,配合trigger,將每次的insert,update,delete操作,寫到差量表中。在伺服器遍歷差量表,將有變化的資料寫到mysql裡

恢復的時候,就直接把資料庫檔案發到客戶端,替換掉客戶端的資料庫檔案

在這個過程中,當然需要在服務端增加專門的表,來控制整個流程,比如記錄檔案在OSS裡的路徑,最後備份的時間等,本文不展開

這個方案相比老方案的優勢:

1、客戶端業務程式碼不再需要關注資料同步的邏輯,減少了出錯的機會

2、不依賴客戶端時間

3、服務端始終有客戶端資料庫的完整映象,即使有BUG,也只是沒有寫到mysql裡,對彙總統計有影響,但是不會造成客戶端資料直接丟失

4、恢復檔案不需要每次生成,速度快

5、可以在服務端直接修改資料庫檔案,校正客戶端的錯誤;版本升級時如果需要做資料遷移,也可以在服務端統一處理

6、由於每次備份的差異量小,生成的差量檔案也很小,需要在網路間傳輸的檔案一般也比較小

新方案的侷限性

總的來說,新方案的優勢比較明顯。但是,這個方案也只能解決單個客戶端操作的場景,對於多終端同時操作就無能為力了。比如說,2個PAD同時修改一個會員的餘額,那先備份的那條資料將會被覆蓋,造成資料錯誤。所以,還需要保證同時只有一個終端操作資料,這樣才能放心地替換檔案。因為這種場景下,是不存在資料衝突的

如果要支援離線環境下,多終端同時操作的場景,則還需要在這個方案的基礎上更進一步,識別出終端差異,將各終端的資料merge到中心檔案,此外還需要保證檔案合併的先後順序等。這種場景比單客戶端的場景要複雜很多,不在本文討論範圍,有空單獨再寫

相關推薦

基於檔案離線資料同步方案

產品此前的資料備份方案,存在不少問題,所以需要設計一個新的方案。本文總結一下新舊方案的優劣 首先APP是一個支援離線的應用。本地資料儲存在sqlite,在離線環境下,在本地資料庫裡讀寫記錄,在有網路的

基於SOA的資料同步方案

2.1 SOA及其相關技術     面向服務的體系架構(service—orientedarchitectI埔,SOA)是一種粗粒度、鬆耦合的服務結構。SOA是服務的集合,服務是最核心的抽象手段,業務被劃分(元件化)為一系列粗粒度的業務服務和業務流程嘲。服務通過基於標準、精

離線資料同步神器:DataX,支援幾乎所有異構資料來源的離線同步到MaxCompute

摘要: 概述 DataX 是阿里巴巴集團內被廣泛使用的離線資料同步工具/平臺,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各種異構資料來源之間高效的資料同步功能。

HDFS基於檔案資料結構

存在原因 Hadoop處理少量大檔案時效率較高,但處理大量小檔案是效率較低,因此設計了以下兩種檔案模式容器用於將大量小檔案組織起來統一儲存。 SequenceFile檔案 檔案的基本格式。 檔案的基本格式是一種鍵值對檔案記錄。 檔案的鍵、值對所代表的類必須支

不同業務場景下資料同步方案設計

      企業開發實踐中通常需要提供資料搜尋的功能,例如,電商系統中的商品搜尋、訂單搜尋等。通常,搜尋任務通常由搜尋引擎擔當。如Elasticsearch。而我們的原始資料為了安全性等問題通常儲存在關係型資料庫中。在搜尋資料前,我們需要先將資料從關係型資料庫中同步至搜

基於檔案資料結構之SequenceFile實現

Hadoop的sequenceFile為二進位制鍵/值對提供了一個持久資料結構。它可以作為小檔案的容器。HDFS和MapReduce是針對大檔案優化的,所以通過SequenceFile型別將小檔案包裝起來,可以獲得更高效率的儲存和處理。 SequenceFile的實現程式碼: package c

Hadoop的I/O操作(壓縮、序列化、基於檔案資料結構)

一、序列化序列化就是把結構化物件,轉換成位元組流序列或者其他資料傳輸協議以便於永久化儲存和網路傳輸。反序列化是序列化的逆過程,即將收到的位元組流序列、資料傳輸協議等,轉換成結構化的物件。Hadoop中用於多節點間程序通訊的是RPC(遠端過程呼叫)。RPC序列化格式如下:1、格

java程式設計師的大資料之路(7):基於檔案資料結構

SequenceFile 介紹 由於日誌檔案中每一條日誌記錄是一行文字。如果想記錄二進位制型別,純文字是不合適的。這種情況下,Hadoop的SequenceFile類非常合適。SequenceFile可以作為小檔案容器。而HDFS和MapReduce是針

基於檔案資料結構:關於MapFile

package com.lcy.hadoop.io; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apa

基於檔案資料結構:關於SequenceFile

package com.lcy.hadoop.io; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apa

Hadoop基於檔案資料結構及例項

基於檔案的資料結構 兩種檔案格式: 1、SequenceFile 2、MapFile SequenceFile 1、SequenceFile檔案是Hadoop用來儲存二進位制形式的<key,value>對而設計的一種平面檔案(Flat

Hadoop中基於檔案資料格式(1)SequenceFile

import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import o

2015年全國谷歌衛星地圖離線資料儲存方案

一、概述 隨著地理資訊數字化的發展,大資料時代的到來,海量資料的傳輸和安全性給我們帶來巨大的困難。海量資料的傳輸受到網際網路技術和硬體的限制,佔用著較多的線上資源和線下儲存空間,產生了能源、空間、人力的成本浪費,而在資料傳輸和儲存過程中,不規範的操作造成的資料洩露,更是資

【多資料中心】分散式資料同步設計方案

介紹        JD_databus是為滿足多資料中心專案的mysql在資料中心間複製的需求所產生的。最開始JD_databus是在LinkedIn的databus的基礎上開發的,本次設計考慮到可維護性、程式碼的簡潔、需求的快速迭代,決定重新開發。設計

基於前端框架react或者vue或者其他其他框架到出資料生成csv檔案,以及匯入csv檔案讀取資料的簡單例子

1.用npm在專案中安裝以下外掛: npm install file-saver --save npm install papaparse --save npm install jschardet --save npm install iconv-lite --save npm install

Scrapy框架 基於管道 儲存資料到本地檔案流程、案例

流程思路 將解析資料存到items物件 使用yield 將items交給管道檔案處理 在管道檔案pipelines編寫程式碼儲存 在setting配置檔案開啟管道 案例 setting.py配置檔案 取消註釋,數字為優先順序

基於otter資料同步實驗搭建

目錄 一、實驗目的 二、實驗內容 三、資源劃分 四、元件的安裝配置 4.1 mysql資料庫的安裝 4.1.1前置條件 4.1.2下載地址 4.1.3 安裝 4.1.4 通過命令列連線mysql,修改許可權 4 mysql配置canal許可權 5

基於DataX將資料從Sqlserver同步到Oracle

DataX是阿里雲推出的一款開源的ETL工具,通過配置json檔案實現不同資料庫之間的資料同步。先有需求是從Sqlserver同步資料到Oracle,網上關於DataX的介紹很多。 框架設計 DataX本身作為離線資料同步框架,採用Framework + plugin架構構建。將資料來源讀取和寫入抽象

netty框架 基於noi的(同步非阻塞io)長連線方案

Socket通訊(BIO/NIO/AIO)程式設計         BIO:  傳統阻塞IO         NIO: 同步非阻塞式IO&nb

大量資料遷移到物件儲存服務過程中使用聯合檔案系統的遷移方案

記一次遷移3T靜態資料到儲存服務的實踐過程,跟大家分享一下。 剛畢業,水平有限,重在記錄和分享。^ _ ^ 1.任務概述 幾個T的靜態資料遷移,主要是小圖,從本地檔案系統遷移到新物件儲存服務中。 遷移過程時間跨度大,可能要幾天甚至一週才能完成,在這過程