CouchDB моделирование для многопользовательского - PullRequest
7 голосов
/ 29 сентября 2008

Я уже в восторге от баз данных документов и особенно от простоты CouchDB. Но мне трудно понять, являются ли такие базы данных жизнеспособным вариантом для многопользовательских систем. Поскольку эти системы требуют каких-то отношений между записями, которые базы данных документов не предоставляют.

Это совершенно неправильный инструмент для таких случаев? Или некоторые теги и временные просмотры - способ сделать это? Или еще ...

UPDATE:
Я понимаю ответы до сих пор. Но позвольте мне немного перефразировать вопрос. Допустим, у меня есть загрузка полуструктурированных данных, которые обычно подходят для CouchDB. Я могу пометить их как "type = post" и "year = 2008". Мой вопрос: как далеко я могу пойти с этим типом пометки? Скажите, можно ли создать поле массива с 10.000 именами в нем? Или есть лучший способ сделать это? Это вопрос понимания того, как думать в этом смысле, основанном на этом документе.

Ответы [ 3 ]

9 голосов
/ 29 сентября 2008

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

Таким образом, в случае многопользовательской системы одним из способов реализации разрешений на основе 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 голосов
/ 29 сентября 2008

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

Что говорит @micahwittman. Просто быстрое добавление: временные представления никогда не должны использоваться в производственной системе, они предназначены только для разработки. Постоянные представления могут делать все, что могут делать временные представления, и работают на величины быстрее.

...