Зная все, что вы знаете о SQL и no-SQL, что лучше хранить деревья? - PullRequest
0 голосов
/ 25 января 2012

Мы собираемся обновить систему комментирования на нашем веб-сайте, которая сейчас является одноуровневой структурой и использует MySQL. Мы хотим изменить его на многоуровневый.

Следует иметь в виду, что мы показываем все комментарии под каждым профилем пользователя.

Пока что следующие соображения:

Плюсы SQL:

  • Проще получить комментарии для каждого пользователя

Минусы SQL:

  • Занимает больше времени, чтобы получить все дерево для потока

профи без SQL:

  • Все комментарии в теме можно получить как один объект
  • Существующие структуры дерева

Минусы без SQL:

  • Труднее / медленнее получать комментарии только одного пользователя
  • Более сложные обновления существующих деревьев

Какие еще плюсы и минусы в вашем производственном опыте?

Ответы [ 4 ]

1 голос
/ 25 января 2012

С RDBMS вы можете использовать JOIN - поэтому сохраняйте каждый комментарий только один раз, без дублирования данных (pro), и вы можете выполнить оба ваших варианта использования дисплея, используя JOIN.

Например, MongoDB, JOIN не поддерживаются (con), но вы можете добиться хорошей производительности в обоих случаях, дублируя данные - сохраните комментарий один раз в документе страницы, к которому он относится, в древовидной структуре и еще раз в документе коллекции UserComments. это относится к этому конкретному пользователю. то есть, чтобы увидеть все комментарии, связанные со страницей, запросить CollectionA для этой страницы, просмотреть все комментарии для пользователя, запросить CollectionB по идентификатору пользователя.

1 голос
/ 25 января 2012

Вы можете использовать древовидную структуру в SQL, см. LTree для PostgreSQL - http://www.postgresql.org/docs/9.1/static/ltree.html

Кроме того, вы можете выполнять рекурсивные запросы с использованием распространенных табличных выражений, как это делает Disqus - http://justcramer.com/2010/05/30/scaling-threaded-comments-on-django-at-disqus/

0 голосов
/ 26 января 2012

для NOSQL (& может применяться и к SQL), вам не нужно хранить данные в нормализованной форме, денормализовать их.хранить комментарии в двух местах!есть список комментариев к пользователю.

хорошее чтение от kyle banker о подходах к вложенным комментариям .

и похожему stackoverflow post

0 голосов
/ 25 января 2012

Вы также можете сохранить все комментарии в потоке в одной записи с SQL, сохранив ее в виде строки XML. Это даст вам простоту доступа в сочетании с быстрым поиском.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...