Maison > Questions et réponses > le corps du texte
使用python拉redis队列里的数据,如何确保完整高效不阻塞的把每天上亿条的数据写入mysql/oracle数据库?
怪我咯2017-04-17 18:03:11
L'ensemble du processus est une file d'attente une file d'attente de consommation.
Donnez-moi une série d'idées :
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.
Plusieurs processus/threads/coroutines gèrent les événements (par exemple mis dans un tampon)
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.
伊谢尔伦2017-04-17 18:03:11
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
PHPz2017-04-17 18:03:11
Il sera plus rapide d'utiliser mongodb pour une si grande quantité de données
伊谢尔伦2017-04-17 18:03:11
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.
迷茫2017-04-17 18:03:11
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
PHPz2017-04-17 18:03:11
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.