Как обрабатывать XML в Azure. Net Core Web App - PullRequest
0 голосов
/ 01 августа 2020

У меня проблема с обработкой большого xml файла, содержащего данные, проиндексированные по состояниям. Этот файл размером> 20 МБ XML содержит данные для 50 состояний, несколько элементов на состояние.

<statefip><"a name:value data structure containing various characteristics"/></statefip>

Мне нужно создать визуализацию на основе данных внутри элементов, по одному состоянию за раз. Этот файл периодически обновляется от поставщика данных. Я ожидаю найти способ сохранить этот XML в памяти, чтобы мой API использовал Xpath для запроса и получения узлов для одного состояния. Загрузка всего файла для каждого запроса на фильтрацию по одному состоянию кажется довольно расточительной.

Различные варианты в таблице включают:

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

Нужно ли мне перевести этот файл в другой формат, прежде чем я смогу его использовать. Эта услуга работает в Azure облаке.

Спасибо

1 Ответ

0 голосов
/ 01 августа 2020
  1. Один из подходов состоит в том, чтобы преобразовать XML в реляционную структуру для заполнения базы данных, которая затем запрашивается по запросу. 20 МБ XML не огромны, поскольку XML является подробным.
  2. Другой вариант - преобразовать файл по запросу. Обратите внимание, что вам не нужно загружать файл XML для каждого запроса. Вы загрузили его (и XSLT), заполнили параметры из параметров запроса, затем преобразовали.

Второй подход может быть дорогостоящим, но вы можете разделить файл на файлы меньшего размера. Это зависит от того, что это за информация и какие запросы вы будете поддерживать.

Что наиболее эффективно, зависит от размера и структуры данных. Базы данных эффективны для запросов и могут быть оптимизированы для этого. XSLT хорош для эффективного изменения (преобразования) существующего документа в другой.

Итак, 2 будет лучше, если вы хотите сохранить большую часть содержимого документа.

Запрос XPath для контент вряд ли превзойдет запросы к базе данных эквивалентной структуры, если только не будет много вложений и вы не попытаетесь оптимизировать базу данных или запросы.

Я бы создал XSLT вашего результата и сделал бы некоторые тесты на то, сколько времени нужно, прежде чем принять решение.

...