Посоветуйте решение для организации pub-sub

Koc

Новичок
Добрый вечер. Летом мы организовывали новостную ленту (activity feed/newsfeed), на mysql. Есть пользователь, он подписывается на несколько каналов. Есть события (прокомментировали фотку/отметились на ней, добавили друга), каждое вещает на несколько каналов. Находим события, вещающие на каналы, к которым подписан пользователь и отдаем их ему.

Все простно, но есть такие требования:
1. Каналов много, событий тоже. Предположим пользователь организовал встречу, она прошла, загрузил 100 фоток - и вот, он подписался сразу на 100 каналов. То есть при джоине кол-во строк в выборке раздувается до нереальных размеров.
2. Дополнительно поверх pub-sub накладываются фильтры: выбираем только действия над фотографиями. Или только действия от друзей/из групп и тд.
3. Группировка. Например если пользователь отметился на 10 фотографиях, мы выводим в одном контейнере 5 из них, остальные игнорим. И этот контейнер при пагинации считается как одна еденица (но событий-то 10).
4. Пагинация

Сейчас все эти требования выполняются, более-менее вменяемая скорость работы, но я думаю, что это ненадолго. Поэтому ищу более правильный storage и модель хранения для этой задачи. Как видно из требований - Redis'ов pub-sub курит - никаких фильтров там наложить не удастся.

Что подскажите, господа-разработчики?
 

Gas

может по одной?
http://habrahabr.ru/blogs/php/78050/

там в коментах можно найти умные слова типа RabbitMQ, AMQP, Resque и т.д., я бы копал в этом направлении. Ничего из перечисленного не использовал, что-то конкретное посоветовать не могу )
 

Koc

Новичок
да, я смотрю среди MQ-решений тоже, но мне кажется, что они слишком простые. Нужно что-то персистентное (тут еще есть варианты) и с поддержкой дополнительных фильтров + пагинация (тут уже совсем худо).

Думаю если б в mongo https://jira.mongodb.org/browse/SERVER-3385 заимплиментили такой функционал - он бы идеально подошел, хотя я сам не использовал его, пока.
 

fixxxer

К.О.
Партнер клуба
там еще в редисе что-то такое появилось. Сам не юзал, просто мало ли :)
 

tz-lom

Продвинутый новичок
APE
думаю подойдёт, по нагрузке и возможностям - самое оно
 

Ragazzo

TDD interested
tz-lom
странно, обычно в его сторону камни кидают, когда-то на хабре была статья, дак там столько гнева было :D
 

tz-lom

Продвинутый новичок
В основном гнев от всякой школоты которая раскурить не смогла обезьяну. Им проще свой велик написать на ноде, чем с существующим JS APE а разобраться, они же JS гуру как никак.
На Devconf последнем был доклад как делали pub-sub на node.js для соединений с клиентами + redis как собственно pubsub транспорт , рассказывали о глюках и прожорливости штатных сокетов нода. И опять таки на вопрос почему не АРЕ - "мы узнали о нём когда уже своё написали"
 

Ragazzo

TDD interested
tz-lom
хах, видимо та же школота гневно и node осуждала, когда говорили что у него по памяти идут серьезные утечки
 

tz-lom

Продвинутый новичок
В душе понятия не имею есть ли у нода утечки, я под него ничего не делаю.
В топике уже упоминался RabbitMQ , но его запуск+конфигурация могут с непривычки вызвать удивление и непонимание (эрланг всё таки) , плюс реализация модулей AMQP для PHP попахивает,её надо допиливать.
P.S.
Кто нибудь видел хоть один pub-sub на ноде который бы обрабатывал каналы нодом,а не внешними силами?
 

fixxxer

К.О.
Партнер клуба
Кто нибудь видел хоть один pub-sub на ноде который бы обрабатывал каналы нодом,а не внешними силами?
И не увидишь, как между процессами синхронизироваться?
 

tz-lom

Продвинутый новичок
Что,вообще никакого межпроцессного взаимодействия нет?
 

fixxxer

К.О.
Партнер клуба
Не, ну есть конечно, все что есть в юниксе.

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

Koc

Новичок
а как ape подойдет под мои задачи? Народ, мне не чат нужен а новостная лента
 

tz-lom

Продвинутый новичок
А какая разница что тебе приходит, посты или новости?
Или у тебя система не реал-тайм должна быть, но тогда от pub-sub только идея, а не реализация (и причём тогда редис, там паб-саб реалтаймовый)
 
Сверху