Actuellement, j'utilise LIBXML :: SAXParser :: Callbacks pour analyser un grand fichier XML contenant des données de 140 000 produits. J'utilise une tâche pour importer les données de ces produits dans mon application rails.Analyse de très gros fichier XML avec Ruby on Rails (1.4GB) - Existe-t-il un meilleur moyen que SAXParser?
Ma dernière importation a pris un peu moins de 10 heures pour terminer:
rake asi:import_products --trace 26815.23s user 1393.03s system 80% cpu 9:47:34.09 total
Le problème avec la mise en œuvre actuelle est que la structure complexe de dépendance dans le fichier XML signifie, je dois garder une trace du nœud entier de produit savoir comment l'analyser correctement. Idéalement, je voudrais un moyen de traiter chaque nœud de produit par lui-même et avoir la possibilité d'utiliser XPATH, la taille du fichier nous empêche d'utiliser une méthode qui nécessite le chargement du fichier XML entier en mémoire. Je ne peux pas contrôler le format ou la taille du fichier XML original. J'ai au maximum, 3 Go de mémoire que je peux utiliser sur le processus.
Y at-il un meilleur moyen que cela?
Faut-il le faire dans Ruby? C# ou Java serait-il une option que vous êtes prêt à envisager? –
Il ne doit pas être analysé dans ruby, mais les données seront éventuellement utilisées par une application Rails. Tout ce qui peut l'obtenir dans ma base de données suffira. Ruby semble être le plus facile à coder pour ce problème particulier jusqu'à présent. Je préférerais ne pas utiliser C# sur celui-ci, mais je suis ouvert à Java, PHP, Python, ou Perl si l'un d'entre eux présente une solution particulièrement facile. – DBruns
Vérifiez VTD-XML étendu ou standard vtd-xml, le problème devrait être résolu instantanément .. –