2017-01-11 17 views
-6

Я хочу иметь сайт, похожий на отзывы, но не только с отзывами, другими типами контента. Дизайн сайта сочетает в себе иерархическую структуру (содержание каждого объекта/запись/юридическое лицо имеет родителя - вид контейнера), а отношения - содержание каждого объекта/запись/организация имеет ряд связанных с этим других объектов:Какую базу данных выбрать для иерархического контента с отношениями?

  • автор контента (т.е. пользователь)
  • связанные комментарии (со своими собственными отношениями, в частности, авторы)
  • пункта пересмотрен в виде отдельной записи в БД
  • изображений из галереи

Одна из самых важных вещей - производительность. В NoSQL отношения были неэффективными, поскольку я читал в сети и уже опробовал другие проекты. С другой стороны, общий дизайн, помимо упомянутых отношений, имеет явный репозиторий контента, такой как структура, которая является точным отражением иерархического расположения объектов (документов, статей, обзоров). Кроме того, мне очень нравится свободная структура записей в NoSQL. Тем не менее, меня не волнуют (и не используют) такие вещи, как управление версиями и другие вещи, связанные с NoSQL.

Так что я хочу объединить оба слова: иерархический и реляционный внутри одного проекта, или на самом деле его модель. Помимо этого, я хочу, чтобы проект был restful, так что мобильные приложения могли использовать тот же контент, доступный через API. Другое требование состоит в том, что содержание должно быть , которое можно найти.

Какой тип хранилища вы выбрали бы для такого проекта?

+1

Внизу здесь несправедливы. Люди, вероятно, даже не читали вопрос! Я представил конкретный прецедент, который у меня есть, поэтому он не слишком широк и не в тему. – forsberg

+0

Это широкий вопрос архитектуры и затрагивает многие области (структура данных, REST API, поиск), но я думаю, что это все еще правильный вопрос. Это очень бесполезно проголосовать без объяснения причин. – MattMS

ответ

0

Я решил пойти с графическими DB. Вот почему я отверг другие из них:

  • Я не хочу использовать NoSQL (документы), так как отношения трудно поддерживать и часто требуют дополнительного кода инфраструктуры (часто на заказ), чтобы справиться с ними, смотри, например, Diaspora NoSQL problems
  • Я не хочу использовать СУБД, так как структура на основе БД накладывают хорошо известные ограничения и не отражает домен
  • Я отверг ключ-значение и большой стол DBS, поскольку они имеют очень конкретные случаи использования

Графические базы данных использовались в ряде проектов, ориентированных на контент, и, как представляется, делали эту работу на удивление хорошо.

+1

Из любопытства вы можете указать, какую конкретную базу данных графа вы выбрали? – MattMS

+0

StackOverflow иногда удивляет меня. Кажется, что я почему-то не получил -6 голосов, но люди все еще интересуются ответом. Я решил пойти с Neo4j. Почему вы спрашиваете? – forsberg

+0

Возможно, более полезно обновить свой ответ, чтобы сказать, что, если кто-то в будущем находится в подобной ситуации. Мне было просто любопытно, что вы выбрали, но я не использовал Neo4j. Я по-прежнему придерживаюсь своей рекомендации, но вам очень повезло с этим! – MattMS

0

Вы можете легко смоделировать иерархическую структуру данных в SQL с следующим образом (с использованием PostgreSQL):

CREATE TABLE comments (
    id INTEGER, 
    parent INTEGER, 
    content VARCHAR(1024) 
) 

Где parent относится к id родительского комментария.

Если вы используете базу данных NoSQL, которая предоставляет интерфейс RESTful, вы можете рассмотреть CouchDB. Затем вы можете реплицировать CouchDB на Elasticsearch для более надежного поиска.

Но если ваши данные являются реляционными, я бы очень рекомендовал сначала использовать базу данных SQL, такую ​​как PostgreSQL.

+0

Итак, вы вообще не рекомендуем использовать NoSQL DB, когда важны отношения? Массивы в PGSQL кажутся приятной особенностью (которую я часто использую в NoSQL), но мне интересно, как хорошо они работают на практике в мире РСУБД - можете ли вы немного разобраться с этим, или это выходит за рамки вашего опыта ? – forsberg

+0

Трудно сказать, что у меня нет конкретного варианта использования, но я бы рекомендовал сначала изучить SQL и посмотреть, где находятся ограничения. Мой опыт NoSQL (документ, хранилище ключей) показал, что лучше, когда обновления элементов являются широкими, как и весь документ JSON, а не многими частями этого документа. Приятно посмотреть на другие вопросы, и, пожалуйста, отметьте это как ответ, если я помогу. – MattMS

+0

Я предполагаю, вы имеете в виду встроенный вид «отношения» в NoSQL, говоря о широких обновлениях? Кстати, я точно описал свой вариант использования. – forsberg