2008-09-29 3 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}); 
} 

И дал DocId и идентификатор, проверка прав доступа будет:

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

Очевидно, что для этого потребуется, имеющий некоторый посредник между клиентом и кушеткой, чтобы обеспечить соблюдение разрешений.

3

Многопользовательские системы не требуют реляционных баз данных, хотя РСУБД являются стандартной технологией для хранения/извлечения данных для большого количества приложений (особенно 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. Просто быстрое добавление: представления Temp никогда не должны использоваться в производственной системе, они предназначены только для разработки. Постоянные взгляды могут делать все, что позволяет временные просмотры, и ускоряются.

Смежные вопросы