2010-06-03 16 views
2

J'ai un simple importateur, il passe par chaque ligne d'un csv plutôt gros et l'importe dans la base de données. Ma question est la suivante: Devrais-je appeler une autre méthode pour insérer chaque objet (générant un DO et disant qu'il est mapper à insérer) ou dois-je coder en dur le processus d'insertion dans la méthode d'importation, dupliquer le code?Optimisation de gros import en php

Je sais que la chose élégante à faire est d'appeler la deuxième méthode, mais je n'arrête pas d'entendre dans ma tête que les appels de fonction sont chers.

Qu'en pensez-vous?

Répondre

4

De nombreuses marques de SGBDR supportent une commande spéciale pour les importations en vrac. Par exemple:

L'utilisation de ces commandes est préférable à l'insertion d'une ligne à la fois à partir d'une source de données CSV car la commande de chargement en masse s'exécute généralement au moins un ordre de grandeur plus rapidement.

+0

Merci beaucoup, je n'y avais même pas pensé :-D –

1

Je ne pense pas que cela soit trop important. Considérez un insert en vrac. Assurez-vous au moins que vous utilisez une transaction et pensez à désactiver les index avant de les insérer.

1

Cela ne devrait pas poser de problème, car l'insertion prendra probablement des ordres de grandeur plus longs que le code php.

Comme d'autres l'ont indiqué, l'insertion en vrac vous donnera beaucoup plus d'avantages. Ces optimisations au niveau de la ligne ne vous rendront aveugle que pour les bonnes optimisations de niveau supérieur.

Si vous n'êtes pas sûr, faites une synchronisation simple dans les deux sens, cela ne devrait pas prendre plus de quelques minutes pour le savoir. Envisagez de combiner les deux approches pour créer des insertions par lots, si elles atteignent toutes une limite de mémoire/temps/.....