Как структурировать классифицированную базу данных голосования? - PullRequest
0 голосов
/ 12 ноября 2011

У меня вопрос о том, как структурировать БД. У меня есть система голосования reddit'esque. Предметы могут получить голоса. Но каждый элемент относится к теме, а каждая тема - к категории. В то время как только элементы могут получать голоса, я бы хотел получить доступ к количеству голосов в рамках темы, а также в категории. Любые предложения о том, как это сделать?

Я вижу 4 основных способа сделать это:

  1. Денормализовать голоса и сохранить голоса внутри атрибута в таблице элементов, таблице тем и таблице категорий. Затем мне нужно будет обновить все 3 всякий раз, когда происходит голосование / понижение голосов.
  2. Создайте отдельную модель голосования. Голоса принадлежат элементам, элементам к темам и темам к категориям. Затем я могу просто запросить количество голосов в цепочке, когда мне нужно получить доступ к чему-либо.
  3. Просто есть предметы и голоса. Предметы будут иметь категорию и атрибут темы ... тогда я буду запрашивать предметы в теме и подсчитывать голоса по ним ..
  4. Научитесь использовать систему NoSQL db.

Дополнительная информация: я использую Rails и в настоящий момент знаю только MYSQL. Это время, когда я должен изучить что-то вроде Монго? Разве это возможно только с помощью Hadoop? Могу ли я сделать это в MySQL. Спасибо!

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

Я думаю, вы должны получить вариант 2.

Вам все равно нужно создать модель голосования, поскольку вы, вероятно, захотите ограничить пользователей одним голосованием по каждому пункту.

Если в дальнейшем у вас возникнут проблемы с производительностью, вы всегда можете кэшировать количество голосов в элементе, теме или категории.

Как вы обновляете эти цифры, должно быть тщательно продумано. Триггер для голосов, который автоматически обновляет все числа выше, может вызвать слишком много операций записи. Другой способ - периодически запускать хранимую процедуру статистики.

В любом случае, реальная точка зрения - не оптимизируйте, пока не узнаете, что есть проблема .

1 голос
/ 12 ноября 2011

Создайте отдельную модель голосования.Голоса принадлежат элементам, элементам к темам и темам к категориям.Затем я могу просто запросить количество голосов в цепочке, когда мне нужно что-то получить.

Это самый гибкий способ сделать то, о чем вы говорите.

Научитесь использовать систему DB NoSQL.

Не для вашего текущего проекта.

Это время, когда я должен изучить что-то вроде Mongo?

Нет.

Действительно ли это возможно только с помощью Hadoop?

Нет.Любая база данных SQL может сделать это.Может ли какая-либо база данных SQL управлять тем, что вы планируете, - это другой вопрос.Разные платформы по-разному масштабируются.

Могу ли я сделать это в MySQL.

Да, легко.

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