并发 - redis队列里每天有超过一亿条数据,使用python如何高效的将其写入sql数据库?
PHPz
PHPz 2017-04-17 18:01:11
0
6
885

使用python拉redis队列里的数据,如何确保完整高效不阻塞的把每天上亿条的数据写入mysql/oracle数据库?

PHPz
PHPz

学习是最好的投资!

répondre à tous(6)
刘奇

L'ensemble du processus est une file d'attente une file d'attente de consommation.

Donnez-moi une série d'idées :

  1. Utilisez la commande monitor pour surveiller les événements Redis, ou mettez à niveau la version Redis (>=2.8) pour surveiller les événements de modification Redis.

  2. Plusieurs processus/threads/coroutines gèrent les événements (par exemple mis dans un tampon)

  3. Les données du tampon sont insérées dans la base de données par lots. (mysql semble pouvoir insérer jusqu'à 5 000 éléments à la fois, je ne suis pas sûr, cela peut être 9999 ou 4999, mais il y a une limite supérieure), en s'appuyant sur la fonction de transaction de la base de données SQL, il sera annulé en cas d'échec.

Série Parlons des montagnes :

4. Pour des données aussi volumineuses, vous pouvez envisager une base de données de colonnes, hbase, etc.

Série Irresponsable :

5. Certaines personnes semblent dire qu'il y a des problèmes avec la conférence sur le volume de données de MongoDB, y compris à l'étranger et au niveau national, ainsi que les conclusions après tests par des personnes autour de moi.

伊谢尔伦

Quelle base de données est utilisée ? Les performances des versions autonomes de MySQL et de SQL Server sont très différentes. Les performances de SQL Server / Oracle / DB2 sont au même niveau. Les performances de MySQL open source ne sont pas très bonnes Compte tenu du cluster, postgresql est meilleur
Si vous souhaitez déplacer une si grande quantité de données dans la base de données. , vous devez considérer
1) Des index appropriés peuvent grandement améliorer les performances d'écriture.
2) Si la base de données n'a pas de conception maître-esclave, envisagez d'utiliser RAID ou SSD. Les performances ne sont même pas pires qu'un disque dur mécanique ordinaire.
3) En utilisant différents moteurs de base de données, en prenant MySQL comme exemple, il existe encore des différences de performances entre InnoDB et MyISAM.
4) Ne validez pas tous les enregistrements. Les performances de validation centralisées seront plus de 10 fois meilleures.
5) Séparez la lecture et l'écriture, sinon vous constaterez que l'écriture des données bloque la lecture des données.

Si la quantité de données quotidienne est si importante, alors SQL ne convient pas. Envisagez Hadoop HBase.
En fait, la base de données que vous utilisez dépend davantage de votre format de données. Certaines bases de données sont plus conviviales pour les données dans des formats spécifiques. Par exemple, HDF5 est plus convivial pour les données binaires et spatiales

.
PHPzhong

Il sera plus rapide d'utiliser mongodb pour une si grande quantité de données

伊谢尔伦

Mysql n'a pas été beaucoup utilisé, mais SQL Server dispose d'une fonction d'importation par lots qui peut facilement en transmettre 10 000 en une seconde.
Je pense que Mysql a également la fonction d'insertion par lots. Après l'insertion, le post-traitement doit prendre en compte le type maître-esclave de la sous-base de données et de la table.

迷茫

Insérez chaque jour 100 millions de données dans MySQL. . . L'analyse des requêtes est un problème. . Mais il ne devrait s'agir que de données historiques

PHPzhong

1. [Terminé] : Utilisez le mécanisme de vérification.

2. [Efficace] : utilisez la lecture par lots, l'écriture par lots ou des interfaces dédiées.

3. [Pas de blocage] : Il est impossible de ne pas bloquer du tout. Le temps de blocage ne peut être que le plus court possible sans provoquer de perception. Cela nécessite l'utilisation de deux mécanismes : la segmentation des tâches et le traitement en temps partagé. Vous pouvez même introduire deux méthodes de traitement avancées : l'estimation de la courbe de performances basée sur l'apprentissage automatique et l'équilibrage de charge en temps réel.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal