编程知识 cdmana.com

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

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://cdmana.com/2021/09/20210915061928882t.html

Scroll to Top