2012-03-09 66 views
3

我們正在研究使用CouchDB/CouchCocoa將數據複製到我們的移動應用程序。如何有選擇地複製CouchDB數據庫的私有和共享部分?

我們的系統有大量的用戶。部分數據庫對每個用戶都是私有的 - 例如他們的任務。這些我已經能夠使用filtered replication沒有問題的複製。

這裏是catch ...數據庫還包括共享信息,只有一些屬於給定的用戶。我如何有選擇地複製共享信息?例如,用戶的任務可能會引用特定的共享文檔。有沒有辦法確保這些文件都包含在複製中,而不包括全部是的共享文件?

從文檔看來,將doc_ids添加到複製(或使用這些doc ID添加另一個複製)可能是一種解決方案。有沒有人試過這個?還有其他解決方案嗎?

編輯:鑑於用戶數量似乎不切實際標記每個共享文檔與所有共享它的用戶,但也許這是唯一的方法來做到這一點?

回答

2

最終解決方案主要取決於你的文件結構,但目前我看到兩個用例:

  1. 當你保持一個數據庫中的一切,也許你有一些字段設置爲識別,該文件共享或文件是私人的,對嗎?例如:

    老闆:「邁克」

    參與者:[] //如果沒有人提到,文件看起來像私人

    所以,你只需要一些過濾器,將只處理私人(?)文件和只有共享文件:通過標籤,參與者數量,參考或以某種方式。另外,如果您只需要爲特定用戶複製某些文檔(例如,僅用於Mike),則需要特殊視圖才能處理所有這些文檔,並且是使用文檔ID複製,但這不會是原子請求:您需要一些服務腳本來處理這些步驟。如果通過引用來定義共享文檔,則唯一的解決方案是相同的:某些服務腳本,查看生成的文檔引用樹和由doc._id的複製。

  2. 查看您的架構。擁有每個用戶數據庫是CouchDB的正常用例,並遵循數據分區和隔離的方式。因此,您可以創建每個用戶數據庫,該數據庫僅對該用戶專用。對於共享文檔,您可以創建額外的數據庫,與數據庫安全選項成員一起玩每個「共享」數據庫只能按名稱或組來處理特定數量的參與者,因此不會有任何數據泄露,除非這不是一個CouchDB錯誤(:

    這種方法看起來很奇怪,但你所需要的一切有創造一些管理腳本來處理數據庫的創建和發佈,複製很容易地和用戶數據是安全的。

PS我假設將「共享」操作如果我錯了,「共享」狀態意味着「公共」狀態比p2更簡單:N個用戶數據庫+ 1個公共狀態

相關問題