Dans les projets, on rencontre souvent Quand il s'agit de problèmes de concurrence élevée, par exemple, si 100 personnes modifient les mêmes données à un moment donné, cela entraînera des problèmes et les données résultantes seront inexactes. Les méthodes habituelles pour résoudre la concurrence élevée incluent l'ajout de cache lorsque. lecture de données, écriture Ajoutez-le à la file d'attente lorsque les données sont saisies. Voici quelques méthodes courantes pour gérer une concurrence élevée, pour votre référence.
1. Optimisation de l'insertion par lots MySQL
Pour certains systèmes avec de grandes quantités de données, en plus de la faible efficacité des requêtes, la base de données est confrontée à des problèmes tels qu'une longue durée de stockage des données. En particulier pour les systèmes de reporting, le temps consacré à l'importation des données peut durer plusieurs heures, voire plus de dix heures par jour. Il est donc logique d’optimiser les performances d’insertion des bases de données.
Après quelques tests de performances sur MySQL innodb, j'ai trouvé quelques méthodes qui peuvent améliorer l'efficacité des insertions pour votre référence.
1. Une instruction SQL insère plusieurs éléments de données.
Les instructions d'insertion couramment utilisées telles que :
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0);INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1);
sont modifiées en :
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);
L'opération d'insertion modifiée peut améliorer l'efficacité d'insertion du programme. La principale raison pour laquelle l'efficacité de l'exécution du deuxième SQL est élevée ici est que la quantité de journaux après la fusion (le journal binlog de MySQL et les journaux de transactions d'innodb) est réduite, ce qui réduit le volume de données et la fréquence de vidage des journaux, améliorant ainsi l'efficacité. En fusionnant les instructions SQL, cela peut également réduire le nombre d'instructions SQL analysées et réduire les E/S de transmission réseau.
Voici quelques données de comparaison de tests, qui consistent à importer une seule donnée et à la convertir en une instruction SQL pour l'importation, et à tester respectivement 100, 1 000 et 10 000 enregistrements de données.
Vous pouvez également effectuer un traitement d'insertion dans une transaction.