J'écris un projet lié à l'acquisition massive de données. Actuellement, j'utilise .NET Framework 4.8 et le package Mysql pour initier des connexions et insérer des données dans le serveur de base de données.
Je vais insérer environ 400 000 lignes/seconde. Je crains que la connexion SQL ne devienne un goulot d'étranglement pour mon programme. Je veux savoir si j'utilise SQL pour créer une connexion multithread et utiliser la file d'attente du consommateur pour insérer des données, cela sera-t-il plus rapide et en vaudra-t-il la peine (avantages et inconvénients) ?
Dans mon instinct, ce serait plus rapide, mais je ne suis pas sûr des performances que cela fournirait en termes de surcharge de thread. Je ne suis pas un expert SQL, ce serait donc formidable si quelqu'un pouvait expliquer les avantages et les inconvénients de l'ouverture de plusieurs connexions SQL sur plusieurs threads.
Rumeurs, opinions, ouï-dire, faits, benchmarks liés aux versions, quelques expériences personnelles, etc...
Plusieurs threads peuvent améliorer le débit, mais il existe des limites :
Traitement par lots :
LOAD DATA
是一次从单个线程INSERT
大量行的最快方法。但是,如果您包括将文件写入LOAD
coût, ce qui peut le rendre plus lent que l'insertion par lots.INSERT
suit. Mais il est plafonné à « centaines » de lignes lorsqu'une certaine limite ou des « rendements décroissants » sont atteints.INSERT
查询插入一行的速度的 10 倍。因此,它(或LOAD DATA
requête. Par conséquent, il (ouLOAD DATA
) vaut la peine d'être utilisé pour une ingestion à grande vitesse. (Source : De nombreux différents tests chronométrés.)Source des données :
Que se passe-t-il après le chargement des données ? Bien entendu, il ne s’agit pas d’une table en écriture seule.
PARTITIONing
Rarement utile, à part éventuellement effacer les anciennes données. Voir Partition