@Billy_Milligan

Как сделать свою кнопку Like (мне нравится)?

Интересует хранение в БД.
В голову приходит только одно:

Создаём новую таблицу и храним там id - поста и id - пользователя, получается связь многие ко многим. Оба id индексы. А для того что бы каждый раз не считать сколько лайков у поста, в таблице с постом добавить поле `like` и там хранить количество и уже просто выводить число на кнопку.

Вот сомневаюсь что это не лучший вариант, ещё нужно будет делать выборку всех лайков от 1-го юзера . Если есть 10.000 постов и 25.000 пользователей, допустим лайкают только 10% постов, 10% юзеров то таблица будет размером (10.000/100*10)*(25.000/100*10)=2.500.000. Боюсь что выборка всех лайков от 1-го юзера будет делаться долго. С такими темпами количество строк может быть очень большим как же хранить такие данные? Какой предел в mysql?
  • Вопрос задан
  • 4704 просмотра
Решения вопроса 2
SELECT * 
FROM  `forum_search_wordmatch` 
WHERE  `post_id` =127913

Запрос занял 0.0001 сек

Таблица имеет 20млн записей

Если вы собираетесь хранить userid,time,postid то 1 запись дудет занимать максимум 40байт. Другими словами: 1Гб ~ 35-40млн записей.
Ответ написан
Anonym
@Anonym
Программирую немного )
В таких решениях не используют MySQL.
Берите Redis и храните что-то типа такого:
1. like:post:{pid}:count - количество лайков поста с ID={pid}
2. like:post:{pid}:users - пользователи, которые лайкнули пост c ID={pid}
3. like:user:{uid}:count - количество постов, которые лайкнул пользователь с ID={uid}
4. like:user:{uid}:posts - посты, которые лайкнул пользователь с ID={uid}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
mannaro
@mannaro
Умею профессионально гуглить
Предел в MySQL - это 255 девяток. Т.е. хранить более 9999(255 раз) записей в одной таблице вы не сможете:)
Ответ написан
Комментировать
metamorph
@metamorph
Выборка по PK (или, в Вашем случае, его части) достаточно быстра, но сначала задайтесь вопросом: а нужны ли Вам все лайки юзера? Сомневаюсь, что Вы хотите вывести их на одной странице, ибо юзер может лайкать много и долго.

Если кол-во строк начнет превышать какое-то разумное число - можно применить какие-нибудь алгоритмы шардинга. В любом случае, тут нет особых технических проблем.
Ответ написан
Комментировать
@2slide
Если сделать в таблице поста поле like. И хранить там выборку из таблицы с лайками.
Запускать выборку для поле like через cron например раз в час.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы