当前位置:网站首页>Shardingsphere proxy 4.1 Sous - base de données sous - table

Shardingsphere proxy 4.1 Sous - base de données sous - table

2022-06-25 10:05:00 M. Fu

Un.、ShardingSphere-ProxyLe concept de base de

  • ShardingSphere-ProxyConcept

    Adresse officielle:https://shardingsphere.apache.org/index_zh.html

    ShardingSphere-ProxyC'est l'agent de la base de données,Comme le montre la figure:

    Insérer la description de l'image ici

  • ShardingSphere-ProxyQuelles bases de données sont les principaux agents

    Agent par défaut:Mysql、PostSql

  • Réalisation des objectifs de l'agent

    1. Il s'agit principalement de compléter le Sous - inventaire et le Sous - Tableau

    2. Réaliser la séparation lecture - écriture

      Les deux aussi.ShardingSphere-ProxyDeux fonctions essentielles de.

  • Sous - entrepôt sous - Tableau

    • Le concept et le but de la Sous - base

      • Concept

        Les tables de la base de données sont stockées dans différentes bases de données;Comme le montre la figure:

        Insérer la description de l'image ici

      • Objectif

        Empêcher la concurrence des ressources pour plusieurs tables dans une bibliothèque 【CPU、Mémoire】,Entraînant une dégradation des performances.

    • Concept et objet du sous - Tableau

      • Concept

        Diviser une table dans la base de données en plusieurs tables ,Comme le montre la figure:

        Insérer la description de l'image ici

      • Objectif

        Le Sous - Tableau résout le problème de la quantité excessive de données dans le tableau , Améliorer les performances des utilisateurs pour interroger et ajouter des données .

        Par exemple,:ParmysqlExemple de base de données, Lorsque l'utilisateur ajoute des données mysqlDeInnoDB Le moteur est stocké dans les données ,InnoDB Le moteur doit s'assurer que les performances des données se situent dans une certaine plage , La valeur de crête maximale de la quantité de données dans le tableau est 2000w,Si plus de2000W La performance de l'ajout de données diminue , Nous allons donc dépasser 2000W Le tableau de la quantité de données est divisé en plusieurs tableaux , Cela garantit l'expérience de l'utilisateur .

      • Défauts

        1. Trop de concurrence , Il y aura concurrence pour les ressources dans le tableau [CPU、Mémoire]La question de, Cela entraîne une dégradation des performances , L'expérience de l'utilisateur s'est détériorée .

          Solutions:Sous - base

  • Sous - entrepôt sous - Tableau

    • Objectif

      Résoudre le problème de la concurrence des ressources de table et de la quantité excessive de données .

2.、ShardingSphere-ProxyScénarios d'application pour

  • Scénario

    Les sous - bases de données et les tableaux peuvent être utilisés pour les projets individuels et les projets de micro - services. .

Trois、ShardingSphere-Proxy Atterrissage du sous - tableau de distribution

  • Outils

    ShardingSphere-Proxy

  • Programme

    • Dans le processus

      Comme le montre la figure:

      Insérer la description de l'image ici

      • Défauts
        1. Questions relatives à la concurrence en matière de ressources.
        2. Problème d'influence anormale .
    • Hors processus 【Recommandations】

      Comme le montre la figure:

      Insérer la description de l'image ici

      • Défauts
        1. Problèmes d'entretien important .
        2. La performance est plus faible que dans le processus .
          • Peut être placé dans l'intranet pour la communication 【docker】
  • Réalisation

    • Conditions

      • MysqlBase de données Version:5.7

      • ShardingSphere-Proxy

        • Adresse de téléchargement du disque réseau

          Liens:https://pan.baidu.com/s/15yUIDQOdDDwUtVLNxNa9Cg 
          Code d'extraction:3hp3
          
      • JavaDeJDK

        • Adresse de téléchargement du disque réseau

          Liens:https://pan.baidu.com/s/1A-ksNN0YicT3hXjFscGGwA 
          Code d'extraction:r9e0
          
      • TéléchargerMysqlConnexion à l'entraînement Fichier à la racine labSous le dossier

        Adresse de téléchargement du disque réseau:

        Liens:https://pan.baidu.com/s/1924iUe7wxGpStAzxxv2K3g 
        Code d'extraction:jy7z
        
    • Configuration

      1. Sous - Tableaux

        • Configuration

          1. config-sharding.yaml Fichiers de configuration fragmentés

            # 3、 Créer une bibliothèque de connexion client  hmms: Nom de la base de données virtuelle 【 De préférence le même nom que la base de données réelle 】 Inserver.yamlNom
            schemaName: hmms
            
            # 1、Connexionmysql
            dataSources:
              hmmsdatasources-0:  #Nom du noeud Personnalisation
                url: jdbc:mysql://127.0.0.1:3306/ Nom réel de la base de données ?serverTimezone=UTC&useSSL=false
                username: Nom d'utilisateur de la base de données
                password: Mot de passe de la base de données 
                connectionTimeoutMilliseconds: 30000
                idleTimeoutMilliseconds: 60000
                maxLifetimeMilliseconds: 1800000
                maxPoolSize: 50
                
            # 2、Règle du fractionnement
            shardingRule:
              tables: #Tableau
                user: #Nom du tableau logique  Quel tableau voulez - vous diviser? 
                  actualDataNodes: hmmsdatasources-0.user-${
                          0..1} #En quelques tableaux  Voici deux montres.  #hmmsdatasources-0:Nom du noeud 
                  tableStrategy: # Tableau des données 
                    inline:
                      shardingColumn: useid #Champs Tabulés
                      algorithmExpression: user-${
                          useid % 2} #C'est exact.useidTableau de séparation des moisissures 
                 #Créer plusieurs tables
                #Nom du tableau: #Nom du tableau logique  Quel tableau voulez - vous diviser? 
                  #actualDataNodes: hmmsdatasources-0.Nom du tableau-${0..1} #En quelques tableaux  Voici deux montres.  #hmmsdatasources-0:Nom du noeud 
            
          2. server.yaml

            authentication:
              users:
                root: #Nom d'utilisateur de la base de données
                  password:  Mot de passe des données 
                sharding:
                  password: sharding 
                  authorizedSchemas: hmms
            
          3. ShardingSpere-Proxy

            Exécuter les commandes

            #Racinebin Exécuter la commande sous le fichier 
             start.bat
            

            Les résultats de l'opération sont présentés dans la figure ci - dessous.:

            Insérer la description de l'image ici

          4. MySql Base de données

            • Nouveau nom de la base de données réelle

              SET NAMES utf8mb4;
              SET FOREIGN_KEY_CHECKS = 0;
              
              -- ----------------------------
              -- Table structure for user
              -- ----------------------------
              DROP TABLE IF EXISTS `user`;
              CREATE TABLE `user`  (
                `useid` int(11) NOT NULL,
                `usenam` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Nom de connexion',
                `usepwd` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Mot de passe de connexion',
                `usestate` int(11) NULL DEFAULT 2 COMMENT '-1:Supprimer1:Déconnecter 2:Normal 3:Signaler la perte',
                `usekey` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ' Clé utilisateur ',
                `usetel` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Téléphone de l'utilisateur',
                `createbyid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Ajouter quelqu'un',
                `createbytime` datetime(0) NULL DEFAULT NULL COMMENT 'Ajouter le temps',
                `modifybyid` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Modifié par',
                `modifybytime` datetime(0) NULL DEFAULT NULL COMMENT 'Temps de modification',
                PRIMARY KEY (`useid`) USING BTREE
              ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
              
              SET FOREIGN_KEY_CHECKS = 1;
              

              Comme le montre la figure:

              Insérer la description de l'image ici

            • Nouveau 3307 Connexion à la base de données virtuelle

              Comme le montre la figure:

              Insérer la description de l'image ici

            • Supprimer le tableau

              Supprimer3306MoyennehmmsDe la bibliothèqueuserTableau, Et exécuter le script de la nouvelle table dans la base de données virtuelle ,Les résultats sont les suivants:

              Base de données virtuelle:

              Insérer la description de l'image ici

              Base de données réelle

              Insérer la description de l'image ici

            • Ajouter des données

              Ajouter deux données à la base de données virtuelle ,Les résultats sont les suivants:

              Insérer la description de l'image ici

              Base de données réelle Tableau I,Les résultats sont les suivants:

              Insérer la description de l'image ici

              Base de données réelle Tableau II,Les résultats sont les suivants:

              Insérer la description de l'image ici

      2. Sous - base

        • Configuration

          # 3、 Créer une bibliothèque de connexion client 
          schemaName: hmms
          
          # 1、Connexionmysql
          dataSources:
            hmmsdatasources-0: #Base de données réelle0
              url: jdbc:mysql://127.0.0.1:3306/hmms-0?serverTimezone=UTC&useSSL=false
              username: Nom d'utilisateur
              password: Mot de passe 
              connectionTimeoutMilliseconds: 30000
              idleTimeoutMilliseconds: 60000
              maxLifetimeMilliseconds: 1800000
              maxPoolSize: 50
            hmmsdatasources-1: #Base de données réelle1
              url: jdbc:mysql://127.0.0.1:3306/hmms-1?serverTimezone=UTC&useSSL=false
              username: Nom d'utilisateur
              password: Mot de passe 
              connectionTimeoutMilliseconds: 30000
              idleTimeoutMilliseconds: 60000
              maxLifetimeMilliseconds: 1800000
              maxPoolSize: 50 
              
          # 2、Règle du fractionnement
          shardingRule:
            tables: #Tableau
              user: #Nom du tableau logique
                actualDataNodes: hmmsdatasources-${
                      0..1}.user #Sous - Tableaux
                tableStrategy: # Tableau des données 
                  inline:
                    shardingColumn: useid #Champs Tabulés
                    algorithmExpression: user-${
                      useid % 2} #C'est exact.useidTableau de séparation des moisissures 
            defaultDatabaseStrategy: # Stratégie de sous - base de données
              inline:
               shardingColumn: useid #Champ de sous - base
               algorithmExpression: hmmsdatasources-${
                      useid % 2}  #C'est exact.IdSous - base d'accès aux modulesproductdatasources-0 
          
      3. Sous - entrepôt sous - Tableau

        • Configuration

          # 3、 Créer une bibliothèque de connexion client 
          schemaName: hmms
          
          # 1、Connexionmysql
          dataSources:
            hmmsdatasources-0: #Base de données réelle0
              url: jdbc:mysql://127.0.0.1:3306/hmms-0?serverTimezone=UTC&useSSL=false
              username: Nom d'utilisateur
              password: Mot de passe 
              connectionTimeoutMilliseconds: 30000
              idleTimeoutMilliseconds: 60000
              maxLifetimeMilliseconds: 1800000
              maxPoolSize: 50
            hmmsdatasources-1: #Base de données réelle1
              url: jdbc:mysql://127.0.0.1:3306/hmms-1?serverTimezone=UTC&useSSL=false
              username: Nom d'utilisateur
              password: Mot de passe 
              connectionTimeoutMilliseconds: 30000
              idleTimeoutMilliseconds: 60000
              maxLifetimeMilliseconds: 1800000
              maxPoolSize: 50    
              
          # 2、Règle du fractionnement
          shardingRule:
            tables: #Tableau
              user: #Nom du tableau logique
                actualDataNodes: hmmsdatasources-${0..1}.user-${0..1} #Sous - Tableaux
                tableStrategy: # Tableau des données 
                  inline:
                    shardingColumn: useid #Champs Tabulés
                    algorithmExpression: user-${useid % 2} #C'est exact.useidTableau de séparation des moisissures
            defaultDatabaseStrategy: # Stratégie de sous - base de données
              inline:
               shardingColumn: useid #Champ de sous - base
               algorithmExpression: hmmsdatasources-${useid % 2}  #C'est exact.IdSous - base d'accès aux modulesproductdatasources-0  
          

Quatre、ShardingSphere-ProxyPrincipe de fonctionnement

  • Structure générale

    Insérer la description de l'image ici

    Total6Étapes:

    1、Database Adaptors:Sélection de la base de données

    2、SQL Parser:Analysesql

    3、SQL Router:sqlRoutage Vers quelle base de données réelle exécuter

    4、SQL Rewriter:sql Optimiser la réécriture Core Performance garantie

    5、SQL Executor Engine:Mise en œuvresqlDéclarations Résultats de l'acquisition de la base de données réelle

    6、Result Merger:Fusion des résultats Obtenir les résultats de plusieurs tableaux

Cinq、ShardingSphere_Proxy Principe du fractionnement

  • Le concept de fractionnement

    Est de diviser les données en différents tableaux .

  • Clé Split

    La clé Split est le champ du tableau . Selon quel champ .

  • Algorithme de segmentation

    Selon les règles【Algorithme de segmentation】 Appuyez sur la touche Split pour diviser les données en différents tableaux .

    • Algorithme de prise de modèle

      • Défauts

        Type de numéro seulement

    • hash+Prendre le moule

      • Si la clé Split est un type de caractère ,C'est bon.hash+ Méthode de découpage .

        Math.abs(Clé Split.hashCode()%2)
        
原网站

版权声明
本文为[M. Fu]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/176/202206250915501553.html