Как бы вы подошли к Twitter-подобному приложению с хранилищем таблиц Azure? - PullRequest
0 голосов
/ 17 января 2011

Я думал о очень простом приложении, похожем на Twitter, я думал о поддержке, только о твиттах и ​​временной шкале.

Но моя голова, в значительной степени привыкшая к реляционным моделям ... не может придумать разумную модель в таблицах Azure или noSql. В основном я думал:

  • Пользователь может добавлять других пользователей как друзья.
  • Пользователь может писать сообщения (до 200 символы).
  • Сообщения всегда отображаются в порядке время, новейшее первое.
  • Страница пользователя показывает его последние 20 сообщения.
  • Главная страница (временная шкала) показывает последние 20 сообщений от него и его друзья.

Довольно просто: D

Если я помещу все сообщения в одну таблицу и введу userId в качестве ключа раздела ... все легко, НО ... Я не думаю, что это решение хорошо масштабируется. Но другие решения делают страницу временной шкалы очень сложной или очень неэффективной, потому что речь идет не о получении последних 20 сообщений от каждого из ваших друзей, а о получении последних 20 сообщений от всех вместе ... и это поражает меня. Возможно, у вас очень раздражающий друг, и последние 20 сообщений от него: D

Каким может быть масштабируемый и эффективный способ хранения этой информации в виде таблиц Azure?

Заранее спасибо.

1 Ответ

4 голосов
/ 18 января 2011

Я бы сказал, что одного использования хранилища таблиц Azure недостаточно.Вы должны также использовать Azure Queues.Когда приходит сообщение, оно помещается в очередь.Работник берет сообщения из очереди и обрабатывает их.

  1. Сообщение отправляется на общедоступную временную шкалу (таблица с отметкой времени)
  2. Работник получает всех подписчиков пользователя, который разместилсообщение и помещает копию сообщения на каждую из своих временных шкал (таблица с ключом followerId)
  3. Конечно, сообщение также помещается на временную шкалу пользователя.(таблица с ключом UserId)

Кажется, что это может быть расточительным методом, но вы оптимизируете производительность чтения с возможной согласованностью записей.Удаление соединений со стороны чтения упрощает вещи.

...