Сбор / управление данными для заполнения «живых лент новостей» в веб-приложении - PullRequest
1 голос
/ 11 мая 2011

У меня есть какой-то абстрактный вопрос, касающийся управления живыми каналами / опросами на веб-сайтах.

Я создаю веб-приложение (построенное на Java / Spring / Hibernate) и на домашней странице пользователя хочупрямая трансляция последних действий от всех членов этой команды, и я пытаюсь найти лучший способ обработать этот запрос на стороне сервера.

Грубым способом было бы загрузить текущих пользователейсписок товарищей по команде, а затем перебирать каждого из его товарищей по команде, загружать их последние разговоры / загрузки файлов / и т. д., а затем объединять все эти действия в один список, отсортированный по метке времени, и возвращать его (скажем, для примера, чтомы просто возвращаем 10 самых последних действий для канала).

Однако это кажется очень неэффективным, особенно если эту операцию необходимо выполнять регулярно (в зависимости от интервала опроса).

Я также рассмотрел возможность продления всех потенциальных действий (разговоров / обновлений статуса / загрузки)использование класса Activity, а затем наличие прямого запроса SQL / JPQL в DAO, который выбирает все последние действия из набора возвращаемых пользователей, но обеспокоен тем, что это может обойти кэширование и постоянный доступ к БД также снизит производительность.

Кто-нибудь раньше решал подобные проблемы?Кто-нибудь знает, что такое хороший подход?

Спасибо!

1 Ответ

0 голосов
/ 22 апреля 2012

Сейчас это старый, но вот что я сделал для этого:

  1. Все задачи, которые должны появиться на живой стене, расширяются Activity (это уже было так)
  2. Создан новый объект Notification, Notification имел ссылку на базовый Activity и ссылку на пользователя (который был уведомлен).
  3. Создан pre-persist hookдля Activity, который создал объект Notification для сохраняемого Activity - он делал это для каждого заинтересованного пользователя (все пользователи, следующие за пользователем, который сохранял Activity)

На данный момент Notifications сохраняется / извлекается в БД - возможно, не масштабируется до очень больших объемов, но я думаю, что подход поддерживает переход на систему на основе очередей (например, Библиотека очереди LinkedIn Kafka , котораяпредназначен именно для этой цели).Поскольку это для каждого пользователя, он также предоставляет возможность иметь флаг чтения / непрочитанного уведомления для важных уведомлений.

...