Архитектура для Microsoft azure. CSV в SQL

#csv #azure #azure-sql-database #azure-storage #azure-worker-roles

#csv #azure #azure-sql-database #azure-хранилище #azure-рабочие роли

Вопрос:

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

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

Я совершенно новичок в Azure и сам обучался, но все это немного расплывчато у меня в голове.

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

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

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

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

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

Любой вклад был бы очень признателен, потому что я действительно чувствую себя потерянным в облаках 🙂
Надеюсь, я дал четкий обзор требований…
Нелегко объяснять то, что вы сами не до конца понимаете

Ответ №1:

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

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

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

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

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

2. Привет, спасибо за ответ! Я провел весь вчерашний день, размышляя о настройке, и она была близка к тому, что вы указали в ответе. Кажется достаточно надежной, поэтому я попробую и посмотрю, столкнусь ли я с проблемами или нет. Мне было интересно, возможно ли пропустить хранилище больших двоичных объектов и просто попросить рабочую роль извлекать CSV-файлы и сохранять их непосредственно в очереди? (Поскольку CSV-файлы никогда не будут превышать максимальный размер в 8 КБ) Опять же, мне нравится ввод здесь! tx

3. Вы «могли» оставить их в очереди и пропустить хранилище больших двоичных объектов. Однако в дальнейшем это может привести к ограничениям, особенно если вы когда-нибудь захотите пересмотреть свои CSV-файлы (или, например, обработать их другим способом). Если вы будете придерживаться метода blob, вы также сможете читать несколько сообщений очереди одновременно; если вы сохраните свой CSV вместе с сообщением, вы ограничите эту возможность.

Ответ №2:

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

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

1. спасибо за предоставленную ссылку, она пригодится. Причина, по которой я не могу использовать массовую копию, заключается в том, что я не контролирую экземпляры, которые отправляют csv. это фиксированные точки, которые регулярно отправляют данные (извините, я не могу подробно рассказать об этом :))