2008-09-29 40 views
7

Tôi đã rất vui mừng về cơ sở dữ liệu tài liệu và đặc biệt là về sự đơn giản của CouchDB. Nhưng tôi có một thời gian khó hiểu nếu cơ sở dữ liệu như vậy là một lựa chọn khả thi cho các hệ thống đa người dùng. Vì các hệ thống đó yêu cầu một số loại quan hệ giữa các bản ghi mà cơ sở dữ liệu tài liệu không cung cấp.Mô hình CouchDB cho nhiều người dùng

Công cụ này có hoàn toàn sai đối với các trường hợp như vậy không? Hoặc một số gắn thẻ và xem tạm thời là cách để thực hiện điều này? Hoặc khác ...

CẬP NHẬT:
Tôi hiểu câu trả lời cho đến thời điểm này. Nhưng hãy để tôi nói lại câu hỏi một chút. Cho phép nói rằng tôi có một tải dữ liệu bán cấu trúc mà thường là một phù hợp cho CouchDB. Tôi có thể gắn thẻ chúng như "type = post" và "year = 2008". Câu hỏi của tôi là tôi có thể đi bao xa với loại gắn thẻ này? Nói rằng tôi có thể tạo một trường mảng với 10.000 tên trong đó? Hoặc có cách nào tốt hơn để làm điều này? Đó là một vấn đề của sự hiểu biết làm thế nào để suy nghĩ trong tài liệu này dựa trên ý nghĩa.

Trả lời

9

Đã có một cuộc thảo luận trên mailing list một lúc trở lại phù hợp với câu hỏi này khá tốt. Quy tắc chung là chỉ lưu trữ dữ liệu trong tài liệu có khả năng thay đổi so với tăng trưởng. Nếu dữ liệu có nhiều khả năng phát triển thì bạn có nhiều khả năng muốn lưu trữ các tài liệu riêng biệt. Vì vậy, trong trường hợp hệ thống đa người dùng, một cách để thực hiện quyền dựa trên ACL có thể là tạo 'tài liệu quyền' sẽ là ánh xạ của user_id thành doc_id với quyền thích hợp được chỉ ra.

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

Và quan điểm của bạn sẽ là một cái gì đó dọc theo dòng của

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

Và cho một docid và userid, kiểm tra các điều khoản sẽ là:

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

Rõ ràng, điều này sẽ đòi hỏi phải có một số trung gian giữa khách hàng và ghế dài để đảm bảo quyền được thực thi.

3

Hệ thống nhiều người dùng không yêu cầu cơ sở dữ liệu quan hệ, mặc dù RDBMS là công nghệ chủ yếu để lưu trữ/truy xuất dữ liệu cho một số lượng lớn (đặc biệt là CRUD).

Nếu bạn muốn đọc tài liệu/đối tượng định hướng, giải pháp cơ sở dữ liệu phân tán, tìm kiếm trên "Lotus Notes/Domino" (đó là một công nghệ/sản phẩm trưởng thành trong lĩnh vực này. được thiết kế theo mô hình dựa trên tài liệu. Cổ điển, nó thực sự tốt trong các ứng dụng kiểu luồng công việc).

On CouchDB cụ thể, kiểm tra:

http://wiki.apache.org/couchdb/ (điều này không phải là một sự ngạc nhiên)

http://seanoc.wordpress.com/2007/10/12/more-on-couchdb/ (dễ đọc mô tả tổng quan)

http://twit.tv/floss36 (phỏng vấn Podcast tất cả về CouchDB)

2

Điều gì @micahwittman nói. Chỉ cần bổ sung nhanh: Chế độ xem tạm thời sẽ không bao giờ được sử dụng trong hệ thống sản xuất, chúng chỉ dành cho phát triển. Quan điểm vĩnh viễn có thể làm tất cả mọi thứ xem tạm thời có thể làm và là magnitudes nhanh hơn.

Các vấn đề liên quan