Je suis censé faire la jachère:
1) lire un énorme fichier XML (700MB ~ 10 millions d'éléments);
2) analyser en préservant l'ordre;
3) créer un fichier texte (un ou plusieurs) avec des instructions d'insertion SQL pour le charger en bloc sur la base de données;
4) écrire les tuples relationnels et les réécrire en XML.Lecture et écriture XML en tant que données relationnelles - meilleures pratiques
Je suis ici pour échanger quelques idées sur le meilleur moyen de le faire (== fast fast fast ...). Je vais utiliser C# 4.0 et SQL Server 2008.
Je crois que XmlTextReader est un bon début. Mais je ne sais pas si cela peut gérer un fichier aussi énorme. Est-ce qu'il charge tout le fichier quand est instancié ou contient juste la ligne de lecture réelle dans la mémoire? Je suppose que je peux faire un while(reader.Read())
et ça devrait aller.
Quelle est la meilleure façon d'écrire les fichiers texte? Comme je devrais préserver l'ordre du XML (en adoptant un schéma de numérotation), je devrai garder quelques parties de l'arbre en mémoire pour faire les calculs etc ... Dois-je parcourir avec stringbuilder?
Je vais avoir deux scénarios: un où chaque noeud (élément, attribut ou texte) sera dans la même table (ie, sera le même objet) et un autre scénario où pour chaque type de noeud (juste ces trois types , pas de commentaires etc ..) Je vais avoir une table dans le DB et une classe pour représenter cette entité.
Ma dernière question spécifique est la qualité du DataSet ds.WriteXml
? Est-ce qu'il va gérer 10M tuples? Peut-être son meilleur pour apporter des morceaux de la base de données et utiliser un XmlWriter ... Je ne sais vraiment pas.
Je suis en train de tester toutes ces choses ... Mais j'ai décidé de poster cette question pour vous écouter les gars, en sautant votre expertise peut m'aider à faire ces choses plus correctement et plus rapidement.
Merci à l'avance,
Pedro Dusso
Est-ce que quelqu'un fait plus d'analyse syntaxique? – kurosch
J'utilise 'XmlReader' dans .NET et ne manque pas SAX du tout. –
Que signifie SAX? –