2008-09-29 30 views
7

我已經對文檔數據庫感到興奮,特別是關於CouchDB的簡單性。但是我很難理解這些數據庫是否是多用戶系統的可行選擇。由於這些系統需要文檔數據庫不提供的記錄之間的某種關係。多用戶CouchDB建模

這樣的情況完全是錯誤的工具嗎?或者一些標記和臨時視圖是實現這一目標的方法?否則...

更新:
我理解到目前爲止的答案。但讓我稍微改述一下這個問題。比方說,我有一個通常適合於CouchDB的半結構化數據。我可以將它們標記爲「type = post」和「year = 2008」。我的問題是我能用這種標籤去多遠?說我可以創建一個數組字段,裏面有10.000個名字?或者有更好的方法來做到這一點?這是一個理解如何在這個基於文檔的意義上思考的問題。

回答

9

有在mailing list討論一段時間回來,適合這個問題相當好。經驗法則是僅將數據存儲在可能會發生變化或增長的文檔中。如果數據更可能再增長則很可能希望保存單獨的文檔。

因此,在一個多用戶系統中實現基於ACL權限可能會創建的許可文件「,這將是USER_ID的映射與指示的相應權限DOC_ID的一種方式的情況下。

{ 
    _id: "permission_doc_1", 
    type: "acl", 
    user: "John", 
    docid: "John's Account Info", 
    read: true, 
    write: true 
} 

和你的意見將是沿着

function(doc) 
{ 
    emit([doc.user, doc.docid], {"read": doc.read, "write": doc.write}); 
} 

線的東西,並給予文檔ID和用戶ID,檢查權限是:

http://localhost:5984/db/_view/permissions/all?key=["John", "John's Account Info"] 

顯然,這需要有客戶端和沙發,以確保權限之間的一些中介被強制執行。

3

多用戶系統不需要需要關係數據庫,儘管RDBMS是大量(特別是CRUD)應用程序的數據存儲/檢索的主要技術。

如果您想要閱讀文檔/面向對象的分佈式數據庫解決方案,請在「Lotus Notes/Domino」上進行搜索(這是該領域的一項成熟技術/產品,具有良好的應用程序背景知識在基於文檔的範例中設計,典型地,它非常擅長工作流類型的應用程序)。

在CouchDB中明確,檢查:

http://wiki.apache.org/couchdb/(這不應該是一個驚喜)

http://seanoc.wordpress.com/2007/10/12/more-on-couchdb/(方便閱讀說明概述)

http://twit.tv/floss36(播客採訪中所有關於CouchDB的)

2

@ micahwittman說什麼。只是一個快速添加:臨時視圖不應該在生產系統中使用,它們僅用於開發。永久觀點可以做一切臨時觀點可以做的事,並且速度更快。