2013-10-27 37 views
0

使用TouchDB-iOS,我們有一個iOS應用程序,該應用程序具有一個本地CouchDB文檔存儲庫,可將其複製到雲端CouchDB服務器。我們有幾個用戶運行這個應用程序,導致一堆TouchDB數據庫副本在那裏。在兩個CouchDB設計之間遷移

當我們開始使用該應用程序時,我們對CouchDB還是一個新手(我們仍然是)。我們設計了一種關係,以便A型文件有一個屬性說:這是一個字符串,用於描述類型爲B的文檔的以逗號分隔的ID列表。

因此,使用Employee/Employer示例那Employer有一個名爲employeeIds的屬性,它將是「1,7,8,10」。如果員工10將退出此列表將更新爲「1,7,8」。

問題是,當在應用程序的另一個實例上,在另一個電話上,比方說,員工7將退出列表將會更新爲「1,8,10」,導致複製時發生衝突。

所以我們想一個更好的主意是在Employee文檔屬性中有一個employerId。如果員工退出,我們只需將他的employerId設置爲空。這樣會有很少的衝突,對吧?

我現在面臨的問題是有多個應用程序在那裏,我如何將所有CouchDB數據庫從第一個設計遷移到第二個設計。

是否需要退役所有舊應用程序或者是否存在故障安全的方式將所有應用程序遷移到新設計而不破壞現有應用程序並儘量減少衝突?我應該如何最好地處理這種情況?

+0

你是否控制客戶?您是否可以強制用戶在給定時間內升級? –

+0

是的,但我想保留這作爲最後的手段。 –

回答

0

基本上有兩種情況:

如果您的應用只是做對數據庫查詢(通過視圖),你可以簡單地更新你的看法與「舊式」工作的「新式」文檔一樣。然後,您可以在後臺更新文檔(例如,通過遵循_changes feed),並最終再次取消對舊式文檔的支持。

如果您的應用程序使用應用程序的結構,那麼也可能無法更新應用程序。否則,你需要有一些代理之間新舊風格的文檔之間的轉換,如

CouchDB with new-style docs <-- proxy application --> apps with old-style docs 

你當然可以更新您的應用程序來處理新舊風格的文檔,這樣就可以逐漸轉換您的文檔。

如果您必須重新設計對CouchDB的訪問權限,則可以考慮update handlers以使未來的更改更加透明。