這個問題曾被問過很多次,但我一直無法找到完整的答案。我需要使用sqlite3數據庫將數據存儲在我的應用程序中,而核心數據不是一個選項。我想使用iCloud在設備之間同步數據,最好的辦法是將SQL事務日誌發送到iCloud並使用它們使設備保持最新狀態。我想出了到目前爲止的過程如下:與iCloud同步SQLite3數據庫
- 所有的數據庫查詢改變(INSERT,UPDATE,DELETE)執行一次存儲在交易陣列,其中的每個元素包含SQL查詢和戳它進行
- 數據庫包含表記錄的交易陣列的應用終於趕到了(包括存儲在iCloud上的交易文件的文件名)
- 交易陣列保存到設備唯一的文件中的點在iCloud上
- 同步時:
- 獲取的交易文件陣列從iCloud中
- 創建要致力於
- 對於每個文件交易的空數組:
- 檢查數據庫的最後位置在交易文件
- 如果有到無,開始從文件開始
- 從該點添加每筆交易的交易的陣列將被提交
- 與交易文件中新的最後位置,因此T更新數據庫他同步交易不重複
- 排序交易的陣列通過交易時間戳致力
- 交易的陣列將被提交
我相信,在執行命令我可以通過將數據下拉到每個設備並執行命令更新每個本地副本來實現這一目標。我設想的唯一問題是,如果兩臺設備在離線和同步時都向同一張表插入記錄。例如:
- 裝置1和裝置2都在表中「TABLE1」
- 裝置1點的插入值「foo」的已同步的數據庫的副本,其中每個四個記錄到表「表1」與PK 5
- 設備2個插入值「欄中的」表「表1」與PK 5
- 設備1個下載事務日誌裝置2和插入值「欄」 ID 6
- 設備2個下載事務日誌裝置1和將值「foo」插入ID 6
我們現在有一種情況,這些記錄的主鍵在每個設備上都是反轉的,這會斷開鏈接到依賴主鍵進行鏈接的表。
我仍然試圖研究一個解決方案,但在此期間,如果任何人有建議,我將非常感激!