簡體   English   中英

將本地數據庫sqlite與生產服務器(MySQL)同步的最佳方法是什么?

[英]What is the best approach for sync local database sqlite with Production server (MySQL)?

我正在使用transaction.executeSql()為sqlite db和Javascript(Cordova)執行sql查詢。 我需要將最后執行的查詢存儲在表中以供將來使用(同步)。 我沒有找到類似的東西。 有什么建議嗎?

db.transaction(function(tx) {
 tx.executeSql("Insert into tablename (id, name) Values(?,?);", values, function(tx, results) 
{
    // I need the last executed query here.
});

數據正在sqlite離線更新。 當用戶點擊“同步”按鈕時,我將不得不將該用戶的所有更新推送到服務器。 所以,我以為我會將這個用戶執行的所有查詢存儲在一個表中。 當他/她點擊同步按鈕時,我將在實時mysql上執行這些查詢。

編輯1:這不僅用於備份目的。 用戶可以添加一些新項目並更新它們。 所有其他用戶應在同步后在其數據庫中獲得此​​更改。 值得注意的是,溝通將是雙向的。 首先,sqlitedb將從實時服務器更新,然后我將在實時服務器中執行所有已保存的查詢。 這是計划。

有沒有更好的方法?

如果數據庫的大小合理,您可以壓縮它並同步“.db.gz”文件。 如果您存儲每個SQL查詢並同步它,您最終可能會得到類似的結果

DELETE FROM x where a=1
UPDATE x set a=2,b=3
INSERT INTO x set c=2

但是,如果同步“.db”文件,它將只包含INSERT語句以及模式定義。 但是,在服務器端,您需要有效地將其導入MYSQL。

如果它僅用於備份目的,並且您不需要生成任何報告,或者您不需要合並所有這些用戶數據,那么只需將SQLite存儲在服務器上即可生存。 但我不知道你的項目到底是什么。

我在幾個帶有后端的企業應用程序中使用同步,這是我的方式:

  1. 如果可能的話,使用SSL。

  2. 在我的工作流程中,設備通過掃描后端網站中的條形碼進行注冊。 作為后退,可以在設備上以表格形式進行注冊。

  3. 我使用編碼來傳輸數據。 每個設備都有自己的代碼。 密鑰通過條形碼/表格到達設備。

  4. 我在后端有以下客戶端表:

    • tblClients:deviceUUID,deviceType,owner,encryptKey,createdDateTime,...
    • tblClientLogs:記錄設備和后端之間的所有連接
    • tblClientDelete:deviceUUID,tableName,rowUUID
  5. 在每個必須同步的表中,我都有一個創建和修改的列。 它是一個日期時間,並且由觸發器插入創建/修改。

  6. 在同步任務中,設備正在將UUID發送到服務器,服務器查找有效的注冊,自上次同步以來創建的行,自上次同步以來修改的行以及行刪除作業。

  7. 同步日期時間保存在tblClientLogs中

8.加密數據,后端發送到客戶端是對象,看起來像:

tblWhatEver - > create - > {key:value,key:value,...}

要么

tblWhatEver - > modify - > rowUUID {key:value,key:value,...}

要么

tblWhatEver - > delete - > rowUUID

  1. 刪除作業如何工作。 如果在后端刪除了一些數據,我正在尋找所有deviceUUID並保存在tblDeleteJobs中:

deviceUUID,tableName,rowUUID

在同步任務之后,將在tblClientDelete中刪除device-delete-job。

  1. 在將數據接收到設備后,我解密它並為每個數據創建一個sql語句。 sql作業由循環完成。

  2. 在設備上完成所有作業后,我會向后端發送一個小報告,以檢查一切是否順利。

  3. 在每個設備表中,我使用UUID而不是整數來避免沖突。 在我的設備上,您也可以將數據發送到服務器,它的工作方式類似於«下載»。

  4. 我的應用和服務器的時區是相同的,與設備位置無關。

  5. 在后端和應用程序中,如果出現問題,我會從頭開始包含強制同步。

  6. 在某些應用程序中,我有更多選項,我可以通過后端更改數據庫,表結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM