Koc
Новичок
Добрый вечер. Летом мы организовывали новостную ленту (activity feed/newsfeed), на mysql. Есть пользователь, он подписывается на несколько каналов. Есть события (прокомментировали фотку/отметились на ней, добавили друга), каждое вещает на несколько каналов. Находим события, вещающие на каналы, к которым подписан пользователь и отдаем их ему.
Все простно, но есть такие требования:
1. Каналов много, событий тоже. Предположим пользователь организовал встречу, она прошла, загрузил 100 фоток - и вот, он подписался сразу на 100 каналов. То есть при джоине кол-во строк в выборке раздувается до нереальных размеров.
2. Дополнительно поверх pub-sub накладываются фильтры: выбираем только действия над фотографиями. Или только действия от друзей/из групп и тд.
3. Группировка. Например если пользователь отметился на 10 фотографиях, мы выводим в одном контейнере 5 из них, остальные игнорим. И этот контейнер при пагинации считается как одна еденица (но событий-то 10).
4. Пагинация
Сейчас все эти требования выполняются, более-менее вменяемая скорость работы, но я думаю, что это ненадолго. Поэтому ищу более правильный storage и модель хранения для этой задачи. Как видно из требований - Redis'ов pub-sub курит - никаких фильтров там наложить не удастся.
Что подскажите, господа-разработчики?
Все простно, но есть такие требования:
1. Каналов много, событий тоже. Предположим пользователь организовал встречу, она прошла, загрузил 100 фоток - и вот, он подписался сразу на 100 каналов. То есть при джоине кол-во строк в выборке раздувается до нереальных размеров.
2. Дополнительно поверх pub-sub накладываются фильтры: выбираем только действия над фотографиями. Или только действия от друзей/из групп и тд.
3. Группировка. Например если пользователь отметился на 10 фотографиях, мы выводим в одном контейнере 5 из них, остальные игнорим. И этот контейнер при пагинации считается как одна еденица (но событий-то 10).
4. Пагинация
Сейчас все эти требования выполняются, более-менее вменяемая скорость работы, но я думаю, что это ненадолго. Поэтому ищу более правильный storage и модель хранения для этой задачи. Как видно из требований - Redis'ов pub-sub курит - никаких фильтров там наложить не удастся.
Что подскажите, господа-разработчики?