2016-10-24 6 views
1

Я работаю над 5-звездочным рейтингом, который отлично работает. Теперь я хочу оптимизировать базу данных.Звездный рейтинг в php с mysql

CREATE TABLE IF NOT EXISTS `rating` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `article_id` int(11) NOT NULL, 
    `vote` float NOT NULL, 
    'user_id' int(11) NOT NULL 

    PRIMARY KEY (`id`) 
) 

Это моя текущая база данных. Теперь, если 10 000 пользователей в той же статье, я получил 10000 записей в одной таблице.

Может кто-нибудь поможет мне понять и оптимизировать базу данных?

+2

'10000' записи рассматриваются как небольшое количество, теперь оптимизация зависит от характера операции вы выполняете на приложениях и запроса, который/часто используется. Сначала вам необходимо предоставить эти данные. –

+0

Колонка для каждой звезды. 1 *, 2 * и т. Д. Просто добавьте номер каждый раз, когда люди его оценивают. – Irvin

+0

@AbhikChakraborty может мы 10 рупий, а за одну статью ,, если я получил 100 aricle то 100 * 10 рупий будет большой –

ответ

1

Это зависит от того, что ваш рейтинг алгоритм и требования являются. Вы можете просто записать число звезд, полученными с помощью пять полеев вместо одного:

star1 integer not null default 0, 
star2 integer not null default 0, 
... 
star5 integer not null default 0, 

, но если вы делаете, вы теряете возможность "cooling off" ratings и меняющееся представление о пользовательской части.

С другой стороны, this accepted answer algorithm требуется только для хранения среднего значения, так что вы можете хранить

stars integer not null default 0, 
voters integer not null default 0, 

... но теперь пользователь не может втягивать свой голос, и на самом деле даже не знаете, ли он голосовал или нет.

(Вы можете идти на компромисс, сохраняя ежедневные или еженедельные голоса за один стол, с датой и идентификатором избирателя и т. Д., А затем «перегоняя» более старые результаты в средней таблице. Теперь избиратель может видеть и отменять то, что он сделал в на прошлой неделе).

Итак, что вам нужно сделать, это четко сформулируйте ваши требования. - что может пользователь? Что должна делать система? и т. д. - и разработать , какая информация должна быть известна; то вы получите таблицу (-ы) структуру оттуда. Если данных слишком много (10 000 000 записей не так много), вы либо пытаетесь набросать на него больше аппаратного обеспечения, либо видите, можете ли вы как-то масштабироваться - например, если вы не часто (часто) нуждаетесь в перекрестной информации (например, самые продаваемые статьи »), ничто не мешает вам разбивать таблицу рейтинга на разные серверы на основе идентификатора статьи, пока каждый раздел не станет достаточно маленьким для вашего вкуса.

Смежные вопросы