Мне дали задание создать прототип приложения. У меня еще нет кода, так как концепции решений, которые я придумал, кажутся в лучшем случае вонючими...
Проблема:
решение состоит из различных проектов Azure, которые работают с большим количеством данных, хранящихся в базах данных Azure SQL. Почти каждое происходящее действие создает сжатый gzip-файл журнала в хранилище BLOB-объектов. Так что это один файл .gz на запись в журнале.
У нас также должно быть небольшое настольное приложение (WPF), которое должно иметь возможность читать, фильтровать и сортировать эти файлы журналов.
Я абсолютно не влияю на то, как ведется логирование, так что это то, что нельзя изменить, чтобы решить эту проблему.
Возможные решения, которые я придумал (концептуально):
1:
- подключиться к хранилищу BLOB-объектов
- открыть контейнер
- чтение/загрузка больших двоичных объектов (с примененным фильтром)
- распаковать файлы .gz
- читать и отображать
Проблема в том, что, в зависимости от фильтра, это может означать загрузку большого количества данных (что медленно) и обработку (что также не будет очень быстрым). Я действительно не вижу в этом полезного приложения.
2:
- создать веб-роль, которая будет запускать службу WCF или REST
- сервис возьмет параметры фильтра и другие вещи и вернет один файл xml/json с данными, обработка будет выполняться в облаке
При таком подходе у меня возникнут проблемы с распаковкой этих файлов, если их много (будет ли это занимать дополнительное место в экземпляре хранилища/вычисления, где запущена служба).
EDIT: под фильтром я подразумеваю ограничение результатов по дате и серьезности (информация, предупреждение, ошибка). Файлы .gz сохраняются в структуре, которая делает это довольно простым, и я не буду фильтровать, просматривая сами файлы.
3:
- какое-то другое элегантное и простое решение, о котором я не знаю
Мне также нужен какой-то способ заставить приложение обновлять отображаемые журналы в режиме реального времени, что, я полагаю, нужно будет делать с повторными запросами к хранилищу/службе больших двоичных объектов.
Это не один из тех вопросов типа «дайте мне код». Я ищу советы по передовым методам или аналогичные решения, которые работали для аналогичных проблем. Я также знаю, что это может быть один из тех вопросов, на которые «нет правильного ответа», поскольку люди по-разному подходят к проблемам, но у меня есть время на создание прототипа, поэтому я буду пробовать разные вещи и выберу правильный. ответ, который будет тем, который показал решение, которое сработало, или тот, который направил меня в правильном направлении, даже если это займет некоторое время, прежде чем я действительно что-то создам и протестирую.