Предлагаю вам хранить различные части (пользователи, вопросы, ответы, комментарии, теги, голоса) в виде отдельных документов в одной базе данных.
Нет. Не храните их в отдельных базах данных. Вы потеряете силу просмотров и должны сделать экспоненциальное количество HTTP-запросов для сбора данных.
-
Заканчивать http://www.cmlenz.net/archives/2007/10/couchdb-joins. Это действительно пролило свет на эту тему для меня. Кредит Costa для обмена ссылками в another question.
Хотя в статье используется вездесущий блог, я считаю, что подход №2 с «View Collation» - это то, что вы хотите.
Документы, являющиеся дочерними элементами другого документа, будут связаны атрибутом «_id» родителя. Кроме того, вы дадите вашим документам атрибут «type» для целей их заказа при возврате в представлении. Например:
function(doc) {
if (doc.type == "post") {
map([doc._id, 0], doc);
} else if (doc.type == "comment") {
map([doc.post, 1], doc);
}
}
Что вы вернулись это:
{
"total_rows": 5, "offset": 0, "rows": [{
"id": "myslug",
"key": ["myslug", 0],
"value": {...}
}, {
"id": "ABCDEF",
"key": ["myslug", 1],
"value": {...}
}, {
"id": "DEFABC",
"key": ["myslug", 1],
"value": {...}
}, {
"id": "other_slug",
"key": ["other_slug", 0],
"value": {...}
}, {
"id": "CDEFAB",
"key": ["other_slug", 1],
"value": {...}
}]
}
Теперь у вас есть все данные, родитель и дети вернулись в одном запросе HTTP. Кроме того, вы можете использовать CRUD для этих документов непосредственно через свой REST API. На мой взгляд, это именно то, что вы хотите.
Вы можете применить тот же подход ко всему, что имеет отношения «один ко многим» или «много-к-одному».
Надеюсь, это поможет!
TokenMacGuy, по внешнему ключу, вы имеете в виду Почты "_id" атрибут? Вы хотите хранить дубликаты данных в объекте комментария просто для удобства? Попытка реализовать с помощью Backbone.js, поэтому я действительно думаю об этом в процессе подготовки CRUD-операций Backbone. – AndrewHenderson 2013-01-29 07:31:58
Да, вы бы связали эти два документа, добавив идентификатор родителя к атрибутам дочернего элемента. но нет, денормализация довольно неудобна, ее обычно выполняют для выполнения; couchDB может спасти вас здесь, однако, с представлениями. – SingleNegationElimination 2013-01-29 13:09:11