Я должен сделать следующее:
1) прочитать огромный (700 МБ ~ 10 миллионов элементов) XML-файл;
2) разобрать сохранение порядка ;
3) создать текстовый (один или несколько) файл с инструкциями вставки SQL для массовой загрузки его в БД;
4) написать реляционные кортежи и записать их обратно в XML.
Я здесь, чтобы обменяться идеями о лучшем (== быстро, быстро, быстро ...) способе сделать это. Я буду использовать C # 4.0 и SQL Server 2008.
Я считаю, что XmlTextReader - хорошее начало. Но я не знаю, сможет ли он обработать такой огромный файл. Загружает ли он весь файл, когда создается его экземпляр, или содержит в памяти только фактическую строку чтения? Я полагаю, я могу сделать while(reader.Read())
, и это должно быть хорошо.
Как лучше всего писать текстовые файлы? Поскольку я должен сохранить порядок XML (принимая некоторую схему нумерации), мне придется держать некоторые части дерева в памяти для выполнения вычислений и т. Д. Должен ли я выполнять итерации с помощью stringbuilder?
У меня будет два сценария: один, где каждый узел (элемент, атрибут или текст) будет находиться в одной и той же таблице (т. Е. Будет одним и тем же объектом), и другой сценарий, где для каждого типа узла (только эти три типа, без комментариев и т.д ..) У меня будет таблица в БД и класс для представления этой сущности.
Мой последний конкретный вопрос: насколько хорош DataSet ds.WriteXml
? Будет ли он обрабатывать 10М кортежей? Может быть, лучше всего извлечь куски из базы данных и использовать XmlWriter ... Я действительно не знаю.
Я тестирую все эти вещи ... Но я решил опубликовать этот вопрос, чтобы выслушали вас, ребята, если вы поделитесь своими знаниями, это поможет мне сделать это более правильно и быстрее.
Заранее спасибо,
Педро Дуссо