MySQL дизайн базы данных? - PullRequest
       9

MySQL дизайн базы данных?

1 голос
/ 25 августа 2009

У меня есть таблица, в которой я храню оценки пользователей для каждого продукта. Таблица состоит из следующих полей productid, userid, rating (из 5) ... Эта таблица может содержать миллион строк в будущем ....
Поэтому, чтобы выбрать 5 лучших продуктов, я использую следующий запрос ::.

SELECT productid, avg( rating ) as avg_rating
from product_ratingstblx245v
GROUP BY productid
ORDER BY avg( rating ) DESC
LIMIT 5

Мой вопрос: поскольку я буду показывать этот результат на нескольких страницах моего сайта, было бы лучше вести отдельную таблицу средних оценок с полями productid, avgrating, totalvotes ???

Ответы [ 3 ]

3 голосов
/ 25 августа 2009

Вам пока не нужен ответ на этот вопрос. Вы можете начать с ПРОСМОТРА, который является результатом выполнения вышеуказанного запроса. Если после выполнения нагрузочных тестов (например, с помощью JMeter) вы видите, что ваш сайт действительно работает медленно, вы можете заменить VIEW на TEMPORARY TABLE (хранится в памяти). Поскольку внешний вид и временная таблица будут выглядеть одинаково снаружи, вам не придется менять свою бизнес-логику.

1 голос
/ 25 августа 2009

Tbh, если бы MySql не мог обрабатывать запросы в простой схеме таблиц, такой как ваша выше, для более миллиона записей с (суб) миллисекундными скоростями, я действительно удивляюсь, почему компании используют его для LOB-приложений.

Как таковой, я - разработчик MS Sql, поэтому я не очень много знаю о возможностях MySql. Однако, если предположить, что его компонент Database Engine так же хорош, как и серверы Sql (я слышал хорошие отзывы о My Sql), вам не нужно беспокоиться о проблемах производительности. Если вы хотите настроить его, то почему бы не кэшировать результаты в течение 10 минут (или дольше) на уровне приложения? Триггеры, как правило, являются чистым (хотя иногда и необходимым) злом. Серверы Sql разработаны специально для типа запроса, который вы выполняете, доверяйте Sql.

1 голос
/ 25 августа 2009

Лично мне не нравится идея подсчета итогов, подобная этой, но если это станет необходимым, я не буду хранить среднее значение, я буду хранить ОБЩИЕ ГОЛОСОВАНИЯ и ОБЩИЙ РЕЙТИНГ. Таким образом, это очень простой запрос ОБНОВЛЕНИЯ (добавьте 1 к ИТОГО ГОЛОСОВАНИЯ и добавьте рейтинг к ИТОГО РЕЙТИНГА). Затем вы можете рассчитать среднее значение на лету за минимальное время.

Что касается того, как вы могли бы справиться с этим, я бы использовал триггер, как кто-то уже предложил. Но только после попытки ПРОСМОТРА вещь, которую предложил кто-то еще.

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