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

Европа - быстрые серверы на дисках NVMe от $5 / Русский датацентр от 199руб

Тема в разделе "PHP и базы данных", создана пользователем Koc, 17 ноя 2011.

  1. Koc

    Koc Новичок

    Сообщения:
    349
    Ваш город:
    \Ukraine\Dnepropetrovsk
    Address:
    Dnipro, Ukraine
    Country:
    Location on Map:
    Добрый вечер. Летом мы организовывали новостную ленту (activity feed/newsfeed), на mysql. Есть пользователь, он подписывается на несколько каналов. Есть события (прокомментировали фотку/отметились на ней, добавили друга), каждое вещает на несколько каналов. Находим события, вещающие на каналы, к которым подписан пользователь и отдаем их ему.

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

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

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

    Gas может по одной?

    Сообщения:
    2.644
    Ваш город:
    dp.ua
    Address:
    Donetsk, Ukraine
    Country:
    Location on Map:
    http://habrahabr.ru/blogs/php/78050/

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

    Koc Новичок

    Сообщения:
    349
    Ваш город:
    \Ukraine\Dnepropetrovsk
    Address:
    Dnipro, Ukraine
    Country:
    Location on Map:
    да, я смотрю среди MQ-решений тоже, но мне кажется, что они слишком простые. Нужно что-то персистентное (тут еще есть варианты) и с поддержкой дополнительных фильтров + пагинация (тут уже совсем худо).

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

    fixxxer К.О. Партнер клуба

    Сообщения:
    12.947
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    там еще в редисе что-то такое появилось. Сам не юзал, просто мало ли :)
     
  5. tz-lom

    tz-lom Продвинутый новичок

    Сообщения:
    1.210
    Ваш город:
    Москва, Россия
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    APE
    думаю подойдёт, по нагрузке и возможностям - самое оно
     
  6. Ragazzo

    Ragazzo TDD interested

    Сообщения:
    1.836
    Address:
    Tynda, Russia
    Country:
    Location on Map:
    tz-lom
    странно, обычно в его сторону камни кидают, когда-то на хабре была статья, дак там столько гнева было :D
     
  7. tz-lom

    tz-lom Продвинутый новичок

    Сообщения:
    1.210
    Ваш город:
    Москва, Россия
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    В основном гнев от всякой школоты которая раскурить не смогла обезьяну. Им проще свой велик написать на ноде, чем с существующим JS APE а разобраться, они же JS гуру как никак.
    На Devconf последнем был доклад как делали pub-sub на node.js для соединений с клиентами + redis как собственно pubsub транспорт , рассказывали о глюках и прожорливости штатных сокетов нода. И опять таки на вопрос почему не АРЕ - "мы узнали о нём когда уже своё написали"
     
  8. Ragazzo

    Ragazzo TDD interested

    Сообщения:
    1.836
    Address:
    Tynda, Russia
    Country:
    Location on Map:
    tz-lom
    хах, видимо та же школота гневно и node осуждала, когда говорили что у него по памяти идут серьезные утечки
     
  9. tz-lom

    tz-lom Продвинутый новичок

    Сообщения:
    1.210
    Ваш город:
    Москва, Россия
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    В душе понятия не имею есть ли у нода утечки, я под него ничего не делаю.
    В топике уже упоминался RabbitMQ , но его запуск+конфигурация могут с непривычки вызвать удивление и непонимание (эрланг всё таки) , плюс реализация модулей AMQP для PHP попахивает,её надо допиливать.
    P.S.
    Кто нибудь видел хоть один pub-sub на ноде который бы обрабатывал каналы нодом,а не внешними силами?
     
  10. fixxxer

    fixxxer К.О. Партнер клуба

    Сообщения:
    12.947
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    И не увидишь, как между процессами синхронизироваться?
     
  11. tz-lom

    tz-lom Продвинутый новичок

    Сообщения:
    1.210
    Ваш город:
    Москва, Россия
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Что,вообще никакого межпроцессного взаимодействия нет?
     
  12. fixxxer

    fixxxer К.О. Партнер клуба

    Сообщения:
    12.947
    Ваш город:
    Moscow, Russia
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    Не, ну есть конечно, все что есть в юниксе.

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

    Koc Новичок

    Сообщения:
    349
    Ваш город:
    \Ukraine\Dnepropetrovsk
    Address:
    Dnipro, Ukraine
    Country:
    Location on Map:
    а как ape подойдет под мои задачи? Народ, мне не чат нужен а новостная лента
     
  14. tz-lom

    tz-lom Продвинутый новичок

    Сообщения:
    1.210
    Ваш город:
    Москва, Россия
    Address:
    Moscow, Russia
    Country:
    Location on Map:
    А какая разница что тебе приходит, посты или новости?
    Или у тебя система не реал-тайм должна быть, но тогда от pub-sub только идея, а не реализация (и причём тогда редис, там паб-саб реалтаймовый)
     
  15. Koc

    Koc Новичок

    Сообщения:
    349
    Ваш город:
    \Ukraine\Dnepropetrovsk
    Address:
    Dnipro, Ukraine
    Country:
    Location on Map:
    именно, не реал тайм

    упс, не знал.