Un problème de démarrage de printemps dans le district a été séché, et c'est assez!

Android, je t'aime. 2021-09-15 06:26:51
probl marrage printemps dans le


Introduction au système

L'ensemble du système peut être divisé fonctionnellement en 3Bloc:

  1. Systèmes opérationnels: Il y a beaucoup de systèmes d'affaires en amont , Le fonctionnement du système d'affaires génère beaucoup de données , Ces données sont dispersées dans de nombreuses bases de données ,En grande partieMySQLBase de données
  2. Plate - forme d'intelligence des données: La plate - forme d'intelligence des données appartient au système de plate - forme intermédiaire , Fournit principalement un service de soutien des données puissant pour le système d'affaires , Entrepôt de données de connexion inférieur .
  3. Entrepôt de données: L'entrepôt de données gère uniformément et centralement toutes les données , L'entrepôt de données traite les données générées par le système d'affaires quotidiennement. 、Extraction、 Conversion en entrepôt de données .

Quand la journée se termine , Chaque système d'affaires génère une grande quantité de données , Ces données sont traitées par des tâches programmées 、 Extraction dans un entrepôt de données , Pendant que tu dormais au milieu de la nuit, , Ces tâches programmées fonctionnent en silence .

 Un district SpringBoot Le problème est tombé. ,La principale différence est que!_Arrière - plan

Les données traitées quotidiennement doivent généralement être traitées avant les heures de travail. , Ensuite, le système d'interrogation de la plate - forme d'intelligence des données est utilisé pour l'interrogation et l'appel du système d'affaires. , Cette fois, les données n'ont pas été trouvées parce que le lendemain matin 10Point, Données non traitées . C'est le problème de l'optimisation. , Parce que normalement, , Même si la chaîne de tâches programmée est plus longue , Pas aussi lentement que le lendemain. 10 Les données de l'heure ne sont pas encore disponibles . Voilà le problème. , Et optimisé .

Optimisation des tâches

L'extraction des données d'un système en amont a été découverte par le Journal des tâches. 3Heures, Et la quantité de données est seulement 100(En milliers de dollars des États - Unis).Bien sûr., Il n'est pas certain que la tâche puisse être optimisée à elle seule. .

Afficher le Code de tâche , La logique est simple. : Il y a une feuille de données originale , Enregistrer les informations sur l'article et la classification définie ( C'est une fiction. , C'est plus compliqué. , Je l'ai réduit et je l'ai transformé. ,Facile à comprendre), Le tableau cible de l'entrepôt de données est de stocker la classification et les marchandises dans différents tableaux. ,La structure générale est la suivante:.

 Un district SpringBoot Le problème est tombé. ,La principale différence est que!_Java_02

Alors pourquoi une telle conversion est - elle nécessaire? ? C'est à cause de tout le système. , En général, seules quelques spécifications de base peuvent être définies , Les spécifications de détail spécifiques ne sont pas contraignantes ,Par exemple,A Le nom du champ d'identification du système est card_no,EtB Le nom du champ d'identification du système est crdt_no( C'est quelque chose que vous devriez rencontrer plus souvent. ); Comme quand il s'agit de relations physiques. , Le traitement est différent ,1C'est exact.1La relation entre, Vous pouvez créer deux associations de tables , Vous pouvez également stocker toutes les tables , Cela crée une incohérence dans plusieurs systèmes , Et c'est inévitable. , Parce que du point de vue du système d'affaires, , Assure le bon fonctionnement du système .

Lorsque l'entrepôt de données traite plusieurs données brutes, il doit tenir compte de la compatibilité. , Ainsi, le processus de conversion ci - dessus se produit. .

Et cette tâche 3 Heures en raison d'un enregistrement dans le tableau original , Sera converti en trois tableaux dans le tableau des entrepôts , Et ces trois tableaux passent idAssocier, L'ensemble du processus de code est le suivant: .

 Un district SpringBoot Le problème est tombé. ,La principale différence est que!_Programmeur_03

Mais la question se pose. ,100Les données de Wan,Il s'est enfui3Heures, Puis j'ai commencé à essayer d'optimiser le processus d'exécution du programme , Commençons par les points suivants.

  1. Mise en cache des catégories , Classification déjà fixée dans le système ,Il n'y aura pas de changement, La mise en cache peut réduire le nombre de fois que la base de données est interrogée
  2. Plus de données sont lues à partir du tableau original à la fois ,De l'original500/Une fois -> 2000/Une fois

Optimisé, Amélioration de l'efficacité , Mais ce n'est pas évident. ( Il y a peut - être des camarades de classe. , C'est très basique. , Pourquoi commencer? ? Toux...C'est ça., Pour des raisons historiques. , Il n'y a peut - être pas beaucoup de données au début , Quel que soit le mode d'exécution , C'est pas si différent. ,Comme l'exécution10 Minutes et exécution 20Minutes,Apparemment.2 Double efficacité d'exécution , Mais comme il n'y a pas d'impact sur le système d'affaires , Et fonctionne toujours normalement , Je ne vois pas le problème. ).

Ici, les données doivent être associées , Donc nous devons insérer des données et obtenir l'auto - croissance de cet enregistrement id, Puis insérer dans la table associée , Et la structure de la table est presque impossible à déplacer ( La structure de la montre a bougé. , Le lendemain, on m'appellera pour le thé. ).

 Un district SpringBoot Le problème est tombé. ,La principale différence est que!_Arrière - plan_04

Alors commençons par analyser pourquoi il est si lent ici. .

  1. Tableau original100Les données de Wan, Chaque requête 2000Article (s), Donc le nombre total de requêtes est 1000000/2000 = 500Une fois, Ça ne prendra pas beaucoup de temps. . Il n'y a pas de place pour l'optimisation ici. , Même si tout est demandé en même temps , Et juste économiser 499 Temps de requête pour ( Il n'est pas possible d'interroger autant de données à la fois. )
  2. Requête2000Données,Conversion des données, Puis insérez - le dans la table d'information et dans la table associée , Voici une résolution par résolution , Total insérer dans la base de données 4000Une fois,Sans aucun doute, C'est le plus long. . La conversion des données est nécessaire , Et fonctionne en mémoire , Donc ça ne prend pas beaucoup de temps. ; Le reste, c'est le total. 100(En milliers de dollars des États - Unis) * 2 Nombre d'Inserts de base de données pour , Peut - on l'optimiser? ?

La première pensée est l'insertion par lots , L'insertion par lots réduit efficacement le nombre d'accès à la base de données . Mais l'insertion par lots n'est pas possible ici parce que l'auto - croissance est nécessaire id, J'ai l'impression d'avoir des ennuis. .

 Un district SpringBoot Le problème est tombé. ,La principale différence est que!_Programmeur_05

Cette nuit - là, après le sport d'hier soir, , Laisse tomber tes soucis. , Je me sens à l'aise. .

 Un district SpringBoot Le problème est tombé. ,La principale différence est que!_Arrière - plan_06

Tout à coup., La tête brille. , Auto - croissance de la base de données id Est une valeur numérique contrôlée par la base de données , Et nous connaissons les étapes de l'auto - croissance , Par exemple, l'auto - croissance 1, Auto - croissance actuelle idPour1Et si, C'est sûr. , Auto - croissance du prochain record idC'est tout.2,Et ainsi de suite..

Puis - je insérer un enregistrement , Obtenir de la croissance id, Ensuite, vous pouvez calculer l'auto - croissance de toutes les données id, Au lieu d'avoir besoin de chaque enregistrement pour la croissance idC'est.

Mais il y a aussi un problème. , Dans le processus d'importation de données transformées , Aucun autre programme ne peut insérer de données dans le tableau , Sinon, le programme calculera l'auto - croissance idÇa ne correspond pas.. Et ce problème n'existe pas. , Parce que les données de l'entrepôt sont insérées par le calcul du tableau original , Il n'y a pas d'autres tâches pour écrire ce tableau en même temps , Alors nous pouvons être assurés d'un travail audacieux .

Enfin

L'or, trois, l'argent et quatre sont là.,Un petit avantage.!

 CodeChinaProjet Open Source:【Grandes usines de première ligneJavaAnalyse des questions d'entrevue+Résumé de base notes d'étude+Dernière vidéo d'explication】

 Un district SpringBoot Le problème est tombé. ,La principale différence est que!_Programmeur_07

 Un district SpringBoot Le problème est tombé. ,La principale différence est que!_Programmeur_08

 Un district SpringBoot Le problème est tombé. ,La principale différence est que!_Programmeur_09

版权声明
本文为[Android, je t'aime.]所创,转载请带上原文链接,感谢
https://javamana.com/2021/09/20210915061928882t.html

  1. Vous apprendrez à construire un serveur d'applet Wechat (https) à la main
  2. 作为一名程序员我不忘初心,Java最新实习面试经验总结,
  3. 作为一名Java面试者你应该知道的,2021最新Java常用开源库总结,
  4. 作为一个程序员,你觉得最大的悲哀是什么,2021年大厂Java岗面试必问,
  5. Configuration de l'environnement Java du système win10
  6. 作為一個程序員,你覺得最大的悲哀是什麼,2021年大廠Java崗面試必問,
  7. En tant que programmeur, quelle est la plus grande tristesse que vous ressentez? L'entrevue d'emploi Java de 2021 dans une grande usine vous demandera:
  8. Comme vous devriez le savoir en tant qu'intervieweur Java, 2021 dernier résumé des bibliothèques open source couramment utilisées pour Java,
  9. En tant que programmeur, je n'oublie pas le dernier résumé de mon expérience d'entrevue de stage en Java.
  10. 作為一名Java面試者你應該知道的,2021最新Java常用開源庫總結,
  11. New feature of Java 8. Stream (). Map (general programming method: collect. Groupingby)
  12. Computer graduation project java + SSM hospital registration system
  13. 作為一名程序員我不忘初心,Java最新實習面試經驗總結,
  14. 使用Docker部署Spring-Boot项目,论程序员成长的正确姿势,
  15. Conseils pour améliorer l'efficacité du Code Java mille fois
  16. 全网首发,我在华为做Java外包的真实经历!
  17. 全套Java视频百度云,终于找到一个看得懂的JVM内存模型了,
  18. 入职3个月的Java程序员面临转正,字节跳动 京东 360 网易面试题整理,
  19. Docker tutorial series (I) introduction to docker tutorial spring cloud mybatis distributed microservice Cloud Architecture
  20. 全網首發,我在華為做Java外包的真實經曆!
  21. Lancement de l'ensemble du réseau, je fais l'expérience réelle de l'externalisation Java à Huawei!
  22. Run around with money? Li Weijia fell into the storm of endorsement! In the face of collective hot discussion, personal attitude has become the focus of attention
  23. 全套Java視頻百度雲,終於找到一個看得懂的JVM內存模型了,
  24. Un ensemble complet de vidéos Java Baidu Cloud a finalement trouvé un modèle de mémoire JVM compréhensible.
  25. Déployez le projet Spring Boot avec docker, et parlez de la bonne posture pour que les programmeurs grandissent.
  26. 关于网络优化你必须要知道的重点,GC 堆排 Tomcat 算法题,
  27. 关于电商秒杀系统中防超卖处理方案简述,Java开发热门前沿知识,
  28. Les programmeurs Java qui sont entrés dans l'entreprise pendant trois mois ont dû faire face à une correction d'échelle, et les octets ont sauté dans le traitement des questions d'entrevue de JD 360 Netease.
  29. What is the new syntax of XX ≠ null in Java?
  30. Spring scheduled task cron expression (@ scheduled)
  31. Une brève description du plan de traitement anti - surproduction dans le système d'arrêt du commerce électronique et les connaissances de pointe du développement Java.
  32. Ce que vous devez savoir sur l'optimisation du réseau, c'est que le problème de l'algorithme Tomcat de gerbage GC,
  33. 凭借这份Java面试题集,成体系化的神级Java进阶笔记,
  34. 凭借这份Java面试题集,BAT大厂面试基础题集合,
  35. Docker Knowledge point collation
  36. Redis sur la réalisation élégante des tâches retardées
  37. 憑借這份Java面試題集,BAT大廠面試基礎題集合,
  38. Avec cet ensemble de questions d'entrevue Java, l'ensemble de questions de base d'entrevue de bat,
  39. Avec cet ensemble de questions d'entrevue Java, les notes avancées Java de niveau divin sont systématisées,
  40. Opérateurs arithmétiques et opérateurs de comparaison pour JavaScript, Introduction classique au développement web
  41. MySQL + +: slow query log analysis (I)
  42. Android Architect path 21 Responsive Programming RX Java thread transformation Principles
  43. Explorer le cadre open source Android - 1. Okhttp Source Analysis
  44. 分布式宝典:限流 缓存 通讯,Java开发中常见的一些问题面试专题,
  45. 分享面试经历的网站,腾讯大牛教你自己写Java框架!
  46. Expliquer les six principes de base du modèle de conception par des exemples réels
  47. Site Web pour partager vos expériences d'entrevue, Tencent Bull vous apprend à écrire votre propre cadre Java!
  48. Dictionnaire distribué: communication de cache limitée par le courant, sujets d'entrevue pour certaines questions courantes dans le développement Java,
  49. Another uncle circle man is angry! The high-quality acting skills make people admire and achieve the highlight of the ending of spring in Jade House
  50. 10. MySQL database import, export and authorization
  51. 9. MySQL data query
  52. 8. MySQL data operation DML
  53. 7. MySQL database table engine and character set
  54. 分享面試經曆的網站,騰訊大牛教你自己寫Java框架!
  55. Les points de connaissance de Java Real - time Video Download, Byte Jumping Java R & D post ont été divulgués à l'intérieur.
  56. Introduction au JavaScript chapitre 15 (objets, clairvoyance)
  57. 前方高能,Java程序员最大的悲哀是什么?
  58. Tencent private cloud MySQL solution tdsql
  59. 前方高能,Java程序員最大的悲哀是什麼?
  60. Quelle est la plus grande tristesse des programmeurs Java à l'avenir?