7
votes

Moyen le plus court et le plus rapide d'analyser les données PHP

J'ai des fichiers que j'ai besoin de convertir en une base de données. Ces fichiers (j'ai plus de 100 000) proviennent d'un ancien système (généré à partir d'un script COBOL). Je fais maintenant partie de l'équipe qui migre les données de ce système vers le nouveau système.

Maintenant, car nous avons beaucoup de fichiers à analyser (chaque fichier est de 50 Mo à 100 Mo), je veux m'assurer que j'utilise le droit Méthodes afin de les convertir en instruction SQL.

La plupart des fichiers ont ces éléments suivants: xxx

L'adresse2 est facultatif et peut être vide. ou xxx

Ce sont les 2 lignes les plus courantes (je dirai environ 50%), autres que celles-ci, toute la ligne a l'air identique mais avec des informations différentes.

Maintenant, ma question est que dois-je faire pour les ouvrir aussi efficacement que possible et les analyser correctement?


0 commentaires

4 Réponses :


10
votes

Honnêtement, je n'utiliserais pas php pour cela. J'utiliserais Awk. Avec une entrée qui est aussi prévisible comme cela, il fonctionnera plus rapidement et vous pouvez produire dans des commandes SQL que vous pouvez également insérer via une ligne de commande.

Si vous avez d'autres raisons pour lesquelles vous devez utiliser PHP, vous souhaitez probablement enquêter sur Fgecsv () fonction. La sortie est une matrice que vous pouvez analyser dans votre insert. L'un des premiers exemples fournis par l'utilisateur prend CSV et l'insère dans MySQL. Et cette fonction vous permet de spécifier votre propre délimiteur, alors onglet ira bien.

Si le numéro d'identification dans la première colonne est unique dans vos données d'entrée, vous devez absolument insérer ceci dans une clé primaire dans MySQL, pour vous enregistrer à partir de la duplication des données si vous devez redémarrer votre lot.


2 commentaires

désolé je ne suis pas familier avec ça, pouvez-vous me donner exemple?


Sûr. awk 'commence {fs = sprintf ("\ c", 9);} {printf ("insertion des valeurs ... (% .0f, \"% s \ ", ...);", $ 1, 2 $, ...);} ' OUTPUTS.SQL Le stdout d'AWK sera une série d'insertions que vous pouvez tuyer dans MySQL sur la ligne de commande: mysql -hdbhost -UNAME DBName Je ne sais pas quel système d'exploitation ou votre base de données utilisez-vous. Vous pouvez le faire avec PGSQL, Sybase, etc. dans UNIX, Linux, BSD, etc.



2
votes

Lorsque j'ai travaillé sur un projet où il était nécessaire d'analyser des fichiers journaux énormes et complexes (Apache, pare-feu, SQL), nous avons eu un grand gain de performances à l'aide de la fonction Preg_match_All (moins de 10 % du temps requis à l'aide d'exploser / finitions / formatage).

Les fichiers énormes (> 100 Mo) sont analysés dans 2 ou 3 minutes dans un duo Core 2 (l'inconvénient est que la consommation de mémoire est très élevée car elle crée une matrice géante avec toutes les informations prêtes à être synthétisées).

Les expressions régulières vous permettent d'identifier le contenu de la ligne si vous avez des variations dans le même fichier.

Mais si vos fichiers sont simples, essayez la suggestion de Ghoti (Fgetscv), fonctionnera bien.


0 commentaires

0
votes

Si vous connaissez déjà PHP, utilisez-le, il s'agit d'un outil parfaitement fin.

Si les enregistrements ne couvrent pas plusieurs lignes, la meilleure façon de le faire pour vous garantir que vous ne manquerez pas de mémoire sera de traiter une ligne à la fois.

Je suggère également de regarder le bibliothèque PHP standard . Il possède de bons itérateurs d'annuaire et d'objets de fichiers qui facilitent travailler avec des fichiers et des répertoires un peu plus agréable (à mon avis) que ce qu'il soit.

Si vous pouvez utiliser les fonctionnalités CSV et que vous utilisez le SPL, assurez-vous de Définissez vos options correctement pour les caractères d'onglet.

Vous pouvez utiliser couper pour supprimer le numéro des premiers et derniers champs facilement après l'appel à < Un href = "http://www.php.net/manual/fr/splfileObject.fgecsv.php" rel = "nofollow"> fgecsv


0 commentaires

-2
votes

juste assis et analyser.
C'est une opération unique et la recherche de la manière la plus efficace n'a aucun sens.
Un moyen plus ou moins sain serait suffisant.
En fait, probablement, vous perdrez probablement plus de temps à la recherche de la solution super-supplémentaire. Dites, votre code fonctionnera pendant une heure. Vous passerez une autre heure pour trouver une solution qui fonctionne 30% plus rapide. Vous passerez 1,7 heure par rapport à 1.


0 commentaires