2011-01-08 43 views
1

目前,我的應用程序使用SOAP在需要數據時通過ASP.NET XML Web服務從Microsoft SQL 2005數據庫中提取數據。如何在聯機數據庫更改時將iPhone本地數據庫同步到聯機數據庫?

我想改變我的應用程序,以便它具有本地數據庫,該數據庫將檢查是否數據已經改變和同步自己的任何新數據。

如何判斷是否有新數據?

我只是計算的行數在SQL表,如果它小於中行的CoreData數據庫中的號碼,然後重新寫CoreData數據庫?

有沒有辦法告訴只同步記錄已更改或添加/刪除?

我應該在應用程序啓動時僅同步所有數據還是隻同步與加載視圖相對應的表?

任何幫助,非常感謝!

感謝, -Mike

回答

1

如果你比你聰明你的架構設計。最好的選擇可能是將'created_at'和'updated_at'日期字段添加到您的數據庫表格中(並且在您修改或創建記錄時進行設置)。然後,在您的同步請求查詢中,選擇日期大於本地數據庫中最高日期的所有記錄。這將用於單向同步。雙向同步要困難得多,需要考慮聯繫解析。

至於同步,我建議儘可能在後臺做。您應該能夠使用NSFetchedResultsController來處理在提取新記錄時更新視圖。這樣用戶就不會遇到任何煩人的加載屏幕。

+0

由於刪除的記錄,事情通常會更復雜一些。另外,由於時鐘漂移,時區差異和日光節約等因素,日期/時間作爲一種類型對於追蹤更改非常不利。不斷增加的序列號通常好得多。 –

+0

順便說一句,我同意從10k英尺的角度來看,這是需要做的。細節雖然不是微不足道的,甚至沒有解決衝突。 –

+0

好點Remus。它絕對不會處理刪除(這可能需要某種軟刪除)。但是,我目前使用時間戳方法來管理應用程序中的同步,並且它似乎正在工作。我在數據庫中生成所有時間戳記表單(然後使用來自核心數據屬性的最新查詢,而不是設備時間)。這仍然會受到你提到的問題的困擾嗎?謝謝。 –

0

您需要一種方法來檢測自上次連接以來數據庫中發生了什麼變化。 SQL Server爲此提供了兩個框架:Change TrackingChange Data Capture。有關這兩者的比較,請參閱Comparing Change Data Capture and Change Tracking。 .Net Sync Framework利用這些框架來自動化數據同步。

不幸的是,這些在SQL Server 2005中都不可用。它們都是SQL Server 2008的功能,因此您必須升級。

使用SQL Server 2005,您只能手動跟蹤更改。有幾種方法,都不完美,它們都圍繞着觸發器和跟蹤表,或者圍繞使用TIMESTAMP跟蹤行版本(問題總是如何跟蹤刪除的行)。

而核心 - 數據具有BUIL式同步支持(見Syncing Core Data Applications),它與您的情況使用。

相關問題