Я пытаюсь моделировать документ иерархии в CouchDB для использования в моей системе, которая концептуально похожа на блог. Каждое сообщение в блоге относится как минимум к одной категории, и каждая категория может иметь много сообщений. Категории являются иерархическими, что означает, что если сообщение принадлежит CatB в иерархии CatA → CatB "(" CatB находится в CatA "), он также относится к CatA.
Пользователи должны иметь возможность быстро находить все сообщения в категории (и все ее дочерние элементы).
Решение 1 Каждый документ типа post содержит массив "category", представляющий его позицию в иерархии (см. 2).
{
"_id": "8e7a440862347a22f4a1b2ca7f000e83",
"type": "post",
"author": "dexter",
"title": "Hello",
"category":["OO","Programming","C++"]
}
Решение 2 Каждый документ типа post содержит строку "category", представляющую ее путь в иерархии (см. 4).
{
"_id": "8e7a440862347a22f4a1b2ca7f000e83",
"type": "post",
"author": "dexter",
"title": "Hello",
"category": "OO/Programming/C++"
}
Решение 3 Каждый документ типа post содержит свой родительский идентификатор категории, представляющий его путь в иерархии (см. 3). Структура иерархической категории строится по связанным типам документов категории.
{
"_id": "8e7a440862347a22f4a1b2ca7f000e83",
"type": "post",
"author": "dexter",
"title": "Hello",
"category_id": "3"
}
{
"_id": "1",
"type": "category",
"name": "OO"
}
{
"_id": "2",
"type": "category",
"name": "Programming",
"parent": "1"
}
{
"_id": "3",
"type": "category",
"name": "C++",
"parent": "2"
}
Вопрос
Какой лучший способ сохранить такие отношения в CouchDB? Какое наиболее эффективное решение с точки зрения дискового пространства, масштабируемости и скорости поиска?
Можно ли смоделировать такое отношение, чтобы учесть локализованные имена категорий?
Отказ
Я знаю, что этот вопрос был задан несколько раз здесь, на SO, но, похоже, нет окончательного ответа на него или ответа, который касается плюсов и минусов каждого решения. Извините за длину вопроса:)
Прочитайте до сих пор
CouchDB - окончательное руководство
Сохранение иерархических данных в CouchDB