Интересует хранение в БД.
В голову приходит только одно:
Создаём новую таблицу и храним там id - поста и id - пользователя, получается связь многие ко многим. Оба id индексы. А для того что бы каждый раз не считать сколько лайков у поста, в таблице с постом добавить поле `like` и там хранить количество и уже просто выводить число на кнопку.
Вот сомневаюсь что это не лучший вариант, ещё нужно будет делать выборку всех лайков от 1-го юзера . Если есть 10.000 постов и 25.000 пользователей, допустим лайкают только 10% постов, 10% юзеров то таблица будет размером (10.000/100*10)*(25.000/100*10)=2.500.000. Боюсь что выборка всех лайков от 1-го юзера будет делаться долго. С такими темпами количество строк может быть очень большим как же хранить такие данные? Какой предел в mysql?
В таких решениях не используют 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}
Выборка по PK (или, в Вашем случае, его части) достаточно быстра, но сначала задайтесь вопросом: а нужны ли Вам все лайки юзера? Сомневаюсь, что Вы хотите вывести их на одной странице, ибо юзер может лайкать много и долго.
Если кол-во строк начнет превышать какое-то разумное число - можно применить какие-нибудь алгоритмы шардинга. В любом случае, тут нет особых технических проблем.