Моделирование CouchDB для многопользовательской работы

StackOverflow https://stackoverflow.com/questions/147837

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Неужели это совсем не тот инструмент для таких случаев?Или для этого можно использовать теги и временные представления?Или еще...

ОБНОВЛЯТЬ:
Я понимаю ответы на данный момент.Но позвольте мне немного перефразировать вопрос.Допустим, у меня есть груз полуструктурированных данных, которые обычно подходят для CouchDB.Я могу пометить их как «type=post» и «year=2008».Мой вопрос: как далеко я могу зайти с этим типом тегов?Скажите, могу ли я создать поле массива с 10 000 именами?Или есть лучший способ сделать это?Это вопрос понимания того, как мыслить в этом смысле, основанном на документе.

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top