@AntoXa_ZiMM
I just write code and do not know English

Как прочитать данные из огромного xml?

Нужно прочитать данные из огромного xml файла, например размером 50Gb, файл представляет из себя root элемент с коллекцией похожих нод (одно название, одинаковый почти всегда набор атрибутов и вложенных нод), заранее структура каждой ноды не известна, некоторые поля должны читаться как же есть, некоторые преобразовываться/высчитываться на лету или после чтения всех остальных полей. Перед разбором xml не известна структура сущности в файле, все ложится в БД, список таблиц и столбцов может меняться на протяжении жизни приложения, есть правила по которым разбираем xml, например:
  1. из атрибута PrimaryKey считаем hash значения, если есть и ложим в ячейку KeyHash каждой таблицы
  2. для ячейки XXXId смотрим родительскую и дочернюю ноду с именем XXX и из неё забираем значение
  3. планируется зависимость от файла с рулами более сложными, так что SqlBulkCopy сразу в БД не вариант
  4. и т.д.


Самое логичное решение читать по одной ноде из файла через while(reader.read()){} и хранить все это в памяти в массивах, потом сваливать в БД, когда наберется достаточно данных (через sqlbulkcopy(writetoserver(idatareader))), но проблема в том, распарсили даже пару гигабайт занимает очень много времени. На странице есть описание парсека с красивыми результатами обработки, но инфа по этой либе я что-то не нахожу.

Вопрос: как максимально быстро можно разобрать xml на части (забрать родительский элемент, дочерний, проверить есть ли нода с именем начинающимся на XXX или забрать атрибут по имени), стандартный LINQ to XML работает медленно, какие быстрые и стабильные, с хорошей документацией есть либы для .net приложения?
  • Вопрос задан
  • 301 просмотр
Пригласить эксперта
Ответы на вопрос 1
@onepavel
Консультация и разработка мобильных приложений
sax
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы