...

воскресенье, 10 ноября 2013 г.

Получение K новых новостей в социальном графе


сегодня в 18:28


Допустим у нас есть небольшой сервис основанный на социальном граф. Одной из функций таких проектов является формирование списка из k последних публикаций «друзей» пользователя. И так сложилось, что в основе проекта лежит документ-ориентированное NoSQL решение. Работа с графами в таких системах затруднительна, а формирование списка должно проходить максимально быстро. Тогда можно приметь следующий подход.




Рассмотрим на примере. Допустим у нас есть пользователь A, для которого мы бы хотели получить K свежих постов. Как видно из рисунка данный пользователь связан с тремя другими пользователями (но их может быть гораздо больше). Нам необходимо сформировать для него набор из K самых свежих постов от его «друзей».


Для решения данной задачи можно сделать следующее. Для каждого пользователя сети мы будем хранить документ UserPostMetadata содержащий следующие поля:



  • Id пользователя;

  • LastPubDate — дата последней публикации пользователя;

  • LastPubs — набор из K элементов вида { PubId, AddDate }, где PubId – идентификатор поста, AddDate – дата публикации поста. Набор должен содержать информацию о K последних публикаций пользователя.


Данный документ будет создаваться для каждого пользователя и обновляться при добавление пользователем новой публикации. При этом LastPubDate будет устанавливаться в текущую дату, а набор LastPubs будет модифицироваться путем удаления последнего элемента и добавлением в начало нового содержащего данные для новой публикации.


Тогда, данные для пользователя A могут быть представлены следующим образом.



Для формирования k последних постов для пользователя A, мы возьмем K документов UserPostMetadata пользователей из списка друзей A, упорядоченные по LasPubDate. В данном наборе будут точно содержаться, K самых новых публикаций. Нам остается объединить наборы LastPubs выбранных документов UserPostMetadata, упорядочить их по времени AddDate и выдать первые K. Так как первые K будут содержать самые новые публикации его друзей.





Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла




Boomburum

исследует LTE


Эволюция средств связи

в путешествии по России




Проблемы коммуникации внутри бизнеса?



Смотри бесплатные курсы

и выиграй Xbox



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий