Архитектура Microsoft Azure. CSV в SQL

Я стажер, отвечающий за исследование проекта Azure.
В данный момент я разрабатываю архитектуру для части проекта.

Цель состоит в том, чтобы преобразовать несколько CSV-файлов в базу данных SQL в облаке. Эти CSV-файлы будут отправлены из случайных мест в стране и должны быть обработаны, чтобы в конечном итоге к базе данных можно было получить доступ с помощью веб-службы.

Я совершенно новичок в лазурной сцене и учился сам, но все это немного смутно в моей голове.

некоторая информация:

CSV - это небольшие файлы, но около 20 000 будут получать ежедневно, да, это должно быть хранилище SQL, потому что нам нужно легко агрегировать данные.

что будет в csv и что нужно сохранить??
уникальное значение ключа (строка)
значение потребления (двойное)
метка даты и времени (дата/время/строка)
значение качества (int)

Архитектура, которую я имел в виду, будет следующей:
HTTP-запросы к облаку (требуется ли облаку служба прослушивания?)
Служба очередей, которая хранит файлы csv до их обработки
Хранилище sql-диска (прямой импорт? Или мне нужна какая-то промежуточная роль?)
Веб-служба, которая будет получать запросы от внешнего AOS или клиентского приложения с запросом данных в sqlDB.

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

Буду очень признателен за любой вклад, потому что я действительно чувствую себя потерянным в облаках :)
Надеюсь, я дал четкий обзор требований...
Нелегко объяснять то, что вы не полностью понимаете сами.


person peanut    schedule 07.04.2011    source источник


Ответы (2)


Вам вообще не нужна роль виртуальной машины. Вот соломенная идея:

  • Настройте веб-службу, которая позволит вам отправлять файлы csv (это легко сделать в веб-роли с помощью svc). Пусть этот метод службы хранит каждый csv в BLOB-объекте Azure в каком-то конкретном контейнере (например, «загрузки») с именем вроде «guid.csv» — просто вызовите Guid.NewGuid().ToString() для создания guid «на лету». . Как только это будет сделано, создайте сообщение очереди, ссылающееся на это имя файла.
  • В методе Run() либо того же экземпляра роли, на котором размещается ваш svc (просто переопределите Run() ), либо в отдельной рабочей роли настройте цикл while (true), чтобы просто читать из очереди, чтобы получить CSV, нуждающийся в импорте, чтение большого двоичного объекта в поток памяти и создание дампа во временный файл на диске, а затем вызов локального вспомогательного метода для анализа csv и вызова вставки SQL.
  • Настройте другую веб-службу для получения данных. Опять же, это может быть размещено в той же веб-роли или в другой.

Абсолютно нет необходимости в роли виртуальной машины.

person David Makogon    schedule 07.04.2011
comment
Я понимаю, что не упомянул, что ваш SQL будет отправлен в SQL Azure, а не в установку SQL Server, размещенную на виртуальной машине. SQL Azure — это существенное подмножество SQL Server, и у вас не должно возникнуть проблем с его использованием для используемого вами типа хранилища. - person David Makogon; 07.04.2011
comment
Привет, спасибо за ответ! Я весь вчерашний день думал о настройке, и она была близка к тому, что вы указали в ответе. Кажется достаточно прочным, так что я попробую и посмотрю, столкнусь ли я с проблемами или нет. Мне было интересно, можно ли пропустить хранилище больших двоичных объектов и просто получить рабочую роль из CSV и сохранить их непосредственно в очереди? (Поскольку CSV никогда не превысит максимальный размер 8 КБ) Опять же, вам нравится ввод здесь! TX - person peanut; 08.04.2011
comment
Вы можете оставить их в очереди и пропустить хранилище BLOB-объектов. Однако позже это может быть ограничением, особенно если вы когда-нибудь захотите пересмотреть свои csv (или, например, обработать их другим способом). Если вы придерживаетесь техники блобов, вы также сможете читать несколько сообщений очереди одновременно; если вы сохраните свой csv с сообщением, вы ограничите эту возможность. - person David Makogon; 08.04.2011

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

person Voclare    schedule 07.04.2011
comment
спасибо за замечательную ссылку, пригодится. Причина, по которой я не могу использовать массовое копирование, заключается в том, что я не контролирую экземпляры, которые отправляют csv. это фиксированные точки, которые отправляют данные на регулярной основе (извините, я не могу вдаваться в подробности об этом :)) - person peanut; 08.04.2011