7
votes

Comment insérer un très grand nombre d'enregistrements dans une base de données MySQL aussi vite que possible

J'ai une table de base de données comme ci-dessous: xxx

et dans mon programme, j'ai eu environ 20 millions de températures à insérer dans la table. Je vis dans l'environnement .NET, utilisez le connecteur / net Connectant à MySQL. Le code était comme ci-dessous: xxx

Comment puis-je insérer tant de données de lignes aussi vite que possible? (Il ne peut insérer que 2000 enregistrements chaque minute dans mon ordinateur.)


5 commentaires

Je suis un peu curieux. Pourquoi voudriez-vous insérer 20 millions de températures dans une DB?


Avez-vous besoin d'autocramenta? J'ai une situation similaire (sur SQL Server) et je gère le côté des touches d'incrément sur le chargeur. Je gère 75 000 rangs par seconde sur mon matériel actuel. Pas de SQL, bien que ...


Aussi votre SQL "SUCKS";) Ne pouvez-vous pas soumettre de multiples relevés d'insertion en une seule exécution? C'est une corde - MySQL peut-elle gérer Hhat? 10 Isnterts par aller-retour est de 10% des voyages ronds. Les threads ajoutent MOER à cela (charge multi-filetée).


@Tomtom Je crois fermement que «la forçage» multithread de données dans le serveur ne vous aidera pas beaucoup ici, car elle générerait un verrouillage inutile sur le serveur.


Oh, mais - la plupart du temps, le serveur ne peut rien faire ici car vous avez des voyages d'un client au serveur. Envoyez des données, attendez les données de retour - dans cette période, un autre thread pourrait updaet la table.


4 Réponses :


6
votes

Vous pouvez utiliser le concept de insert en vrac qui exécute de nombreux inserts en même temps minimisant les frais généraux de l'appelant exécutenonquery plusieurs fois.

dans mysql Ceci s'appelle Load Data , vérifiez ici pour plus de détails: http://dev.mysql.com/doc/refman/5.5/fr/load-Data.html

dans MS SQL Server Ceci s'appelle insert en vrac et il est connu comme tel, c'est pourquoi je l'ai mentionné avec ce nom.


0 commentaires

1
votes

Règles générales: -

  1. Utiliser les données de charge infilière
  2. Désactiver la clé pendant l'importation, le permet de retourner après que toutes les données ont été importées
  3. Exécutez le script sur le serveur de base de données lui-même, connectez-vous à l'aide de la prise au lieu de TCP / IP

    La plupart des conseils sont expliqués à la documentation.


1 commentaires

règle générale n ° 2 ne s'appliquera pas ici, puisqu'il s'agit de la clé primaire automatique



2
votes

Vous devriez faire des inserts en vrac. Le moyen Ado.net de le faire est d'utiliser un DataDapter . < / p>

Pour une solution spécifique MySQL, utilisez Mysqlbulkloader .


0 commentaires