J'ai une table de base de données comme ci-dessous: 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: p> 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.) P> p>
4 Réponses :
Vous pouvez utiliser le concept de dans mysql Ceci s'appelle dans MS SQL Server Ceci s'appelle insert en vrac code> qui exécute de nombreux inserts en même temps minimisant les frais généraux de l'appelant exécutenonquery code> plusieurs fois. p>
Load Data Code>, vérifiez ici pour plus de détails: insert en vrac CODE> et il est connu comme tel, c'est pourquoi je l'ai mentionné avec ce nom. P>
Règles générales: - P>
La plupart des conseils sont expliqués à la documentation. P>
règle générale n ° 2 ne s'appliquera pas ici, puisqu'il s'agit de la clé primaire automatique
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 . P>
Il existe un certain nombre de façons d'optimiser les inserts en vrac. Certains sont: p>
Rangement multiple Vous ne devez pas insérer 20.000.000 lignes à la fois, mais peut vouloir essayer 1.000-10.000 pour une très grande vitesse. Ceci est un moyen simple et très improblémique d'augmenter la vitesse. Un facteur de 10 et parfois, davantage plus est souvent possible. P> li>
verrouillage de la table ( Index invalidants temporairement. P> li>
TUNING OPTIONS MYSQL. P> LI>
La documentation vous donne Plus de détails élaborés sur les options. Certaines options dépendent du type de table ( InnoDB vs. myisam a>). p>
Une suggestion générale: spécifiez toujours les colonnes que vous insérez devant charger des données infilières code>. Il y a un API wrapper pour .NET < / a>. C'est la voie la plus rapide, mais a des limitations et des différences sémantiques à partir d'inserts simples. P> li>
Insérer code> Déclarations: P>
Insert dans les valeurs de température (température) (1.0), (2.0), (3.0), ... code> p>
Tableaux de verrouillage code>). P> li>
Insérer retardé code> (probablement pas aussi utile ici). p> li>
ul>
valeurs code>. Cela rend un code plus maintenu. P>
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.