Моделирование CouchDB для многопользовательской работы
-
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.Просто быстрое дополнение:Временные представления никогда не следует использовать в производственной системе, они предназначены только для разработки.Постоянные представления могут делать все, что могут временные представления, и работают намного быстрее.