Шаблон голосования хранилища Azure - PullRequest
2 голосов
/ 07 апреля 2011

Я изучаю использование хранилища Azure для приложения, которое я имею в виду. Часть этого включает в себя некоторые SO-подобные функции для голосования и фаворитов. Как и в случае с SO, я бы хотел, чтобы пользователь мог голосовать / добавлять избранное только один раз, а позже использовать его для оценки / оценки.

Как можно поступить так, используя хранилище Azure или AWS SimpleDB? Существуют ли шаблоны для этого типа сценария?

Ответы [ 4 ]

2 голосов
/ 15 апреля 2011

Вы используете Table Storage?При работе с хранилищем Azure следует помнить о том, что не хватает таких функций, как Count.

Чтобы не дать кому-то проголосовать или отдать предпочтение чему-либо дважды, вам необходимо указать в первичном ключе идентификатор контента и идентификатор пользователя.Допустим, пользователь может голосовать за комментарий.Мы создадим таблицу под названием CommentVotes с PartitionKey «UserID» и RowKey «CommentID».Теперь любые дубликаты будут генерировать исключение и предотвращать его возникновение.Проблема в том, чтобы рассчитать количество вещей, не захватывая все строки.Вам нужно будет создать другую таблицу, в которой будут храниться агрегированные результаты, которые будут увеличиваться при успешной вставке.Эта таблица может выглядеть как PK "Comments", RK "CommentID", TotalVotes "5".

1 голос
/ 18 апреля 2011

Самое простое решение состоит в использовании 1 капли на счетчик (или Blob Storage).BLOB-объект на самом деле будет содержать не только окончательный счет, но и идентификаторы голосующих пользователей .Это обеспечит двойное голосование.В этом вам могут помочь библиотеки с открытым исходным кодом, такие как Lokad.Cloud (отказ от ответственности: я работаю в Lokad).

Один недостаток этого подхода заключается в том, что ваш счетчик не будет масштабироваться выше ~ 10голосов / секунду - что уже много для большинства веб-приложений.Затем, если вы действительно задумываетесь о счетчиках со сверхмощной нагрузкой, вам следует подумать о защищенных счетчиках , которые могут быть реализованы как с помощью Table Storage, так и Blob Storage.

Другой взгляд на этоэто думать CQRS и позволить голосованию выдать командное сообщение для асинхронной обработки, в то время как Javascript позаботится о предоставлении немедленной обратной связи пользователю.Наиболее заметным преимуществом здесь является то, что становится возможным иметь одиночный BLOB-объект, представляющий все состояние страницы , счетчики для голосования наряду с другими вещами для ускоренного чтения .Проверьте Lokad.CQRS , чтобы сделать это.

1 голос
/ 18 апреля 2011

Вы можете выбрать несколько способов использования хранилища: BLOB (большие двоичные объекты) или таблицы. BLOB-объекты просто хранят текстовые или двоичные данные. Таблицы обеспечивают немного больше структуры. Кроме того, они предоставляют услуги REST для управления ими.

Если вам нужны «постоянные и долговечные» варианты хранения, Microsoft говорит, что хранилище Azure идеально подходит для этого. Однако если ваше приложение подвержено изменениям, характерным для большинства приложений, я бы рекомендовал использовать SQL Azure. SQL гораздо чаще используется для хранения данных приложения. Хранилище Azure более полезно для использования журналов диагностики и т. Д. Без необходимости настройки базы данных SQL (или для записи проблем с подключением к базе данных самих себя).

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

Кроме того, вы можете использовать хранилище для развертывания и сборки. Я считаю, что Visual Studio использует хранилище для поддержки развертывания при настройке его для развертывания через IDE. Я хочу сказать, что все больше людей находят SQL полезным для данных приложений и для хранения оперативных данных.

Один шаблон, который мне нравится, но еще не реализован, - это использование очередей Azure. Полезность становится очевидной, когда вы хотите масштабировать свое приложение с парой разных типов ролей. Например, веб-роль может использовать Очередь для добавления транзакций и иметь две или более рабочих ролей, выбирающих транзакции из очереди для обработки и хранения. Как правило, узким местом во многих приложениях Azure является база данных, поэтому перемещение обработки данных из веб-ролей в рабочие роли полезно, когда важна масштабируемость.

0 голосов
/ 15 апреля 2011

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

Как уже указывал @Vyrotek, вы должны хранить информацию о «количестве», хранящуюся где-то в другом месте, и обновлять ее самостоятельно каждый раз, когда за элемент голосуют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...