Как разработать эффективную систему Like?

Я пытаюсь создать систему Like / Unlike, похожую на Facebook, для существующего раздела комментариев на сайте, и мне нужна помощь в разработке системы.

В настоящее время у каждого продукта на сайте есть раздел комментариев, и участники могут публиковать и оставлять комментарии. Мне нужно знать, что каждый участник опубликовал, сколько комментариев и каждый из его комментариев получил сколько лайков. Конечно, мне нужно знать, кому тоже понравились какие комментарии (отчасти, чтобы я мог запретить пользователю более чем один раз понравиться комментарий) для аналитических целей.

Наивным способом реализации системы Like в текущем модуле комментариев является создание новой таблицы в базе данных, имеющей внешние ключи для CommentID и UserID. Затем для каждого «лайка», данного пользователю комментарием, я вставляю строку в эту новую таблицу с идентификатором комментария таргетинга и идентификатором пользователя.

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

Я использую PHP и MySQL. Для такой системы с огромной базой данных, как мне разработать систему Like, чтобы она была более оптимизированной и стабильной?

0

Решение

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

Тогда вы можете создать TRIGGER это увеличивает / уменьшает счет на основе подобия / непохожести.

Таким образом, вы используете большую таблицу, чтобы выяснить, голосовал ли уже пользователь.

1

Другие решения

Для масштабируемости сделайте не включить столбец подсчета в той же таблице с другими вещами. Это редкий случай, когда «вертикальное разделение» выгодно. Зачем? НРАВИТСЯ / НРАВИТСЯ будут приходить быстро и яростно. Если код для выполнения увеличения / уменьшения достигает таблицы, используемой для других целей (например, для текста комментария), между ними будет неприемлемое количество разногласий.

Этот совет — первый из многих шагов к возможности масштабирования до уровней Facebook. Другие советы придут не от бесплатного форума, а от команды умных инженеров, которых вам придется нанять, чтобы достичь этого уровня. (Подсказки: шардинг, буферизация, отображение оценок и т. Д.)

0

По вопросам рекламы [email protected]