Эффективная рейтинговая система - PullRequest
1 голос
/ 22 декабря 2009

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

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

Было бы лучшим решением сохранить его в базе данных, или есть лучшие решения.

Ответы [ 5 ]

1 голос
/ 22 декабря 2009

Если вы планируете иметь> 1 000 000 записей, вы должны убедиться, что структура таблицы эффективна (что не должно быть сложно для вашего примера) и правильно ее проиндексировать.

Memcached - это самый простой способ реализовать кэширование, и его легко масштабировать, если ваш сайт растет и требуется больше серверов.

1 голос
/ 22 декабря 2009

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

Добавьте некоторое кэширование для каждого пользователя (на клиенте, в $ _SESSION, используя memcached), и вы получите довольно быстрое время ответа "нет").

0 голосов
/ 22 декабря 2009

Вы видели это?

http://destiney.com/php#Destiney_rated_images

Демо здесь: http://ratedsite.com/

0 голосов
/ 22 декабря 2009

Поскольку вы не можете использовать memcached, я бы сказал это. Достойный сервер базы данных (достойное оборудование + достойная реализация БД) должен уметь справляться с этим достаточно хорошо. Одна таблица с физическим индексом для идентификатора статьи и вторая запись, представляющая голосование, легко справится с несколькими статьями googillion (да, я это придумал):

Обоснование:

Серверы баз данных поддерживают статистику - чтение: самонастройка - и только горячие элементы (индекс + записи строк) остаются в памяти.

Мораль:

Не беспокойтесь о таких вещах, если они не станут проблемой, т. Е. Если бы ваша компания была размером с Facebook, я бы волновалась.

0 голосов
/ 22 декабря 2009

Memcached был бы очень хорошим способом сделать это. вам нужно время от времени синхронизировать с memcached (я бы сделал это, используя модель pull, используя скрипт cron на вашем сервере MySQL).

...