当前位置:网站首页>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:
ShardingSphere-ProxyQuelles bases de données sont les principaux agents
Agent par défaut:Mysql、PostSql
Réalisation des objectifs de l'agent
Il s'agit principalement de compléter le Sous - inventaire et le Sous - Tableau
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:
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:
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
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:
- Défauts
- Questions relatives à la concurrence en matière de ressources.
- Problème d'influence anormale .
- Défauts
Hors processus 【Recommandations】
Comme le montre la figure:
- Défauts
- Problèmes d'entretien important .
- La performance est plus faible que dans le processus .
- Peut être placé dans l'intranet pour la communication 【docker】
- Défauts
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
Sous - Tableaux
Configuration
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
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
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.:
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:
Nouveau 3307 Connexion à la base de données virtuelle
Comme le montre la figure:
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:
Base de données réelle
Ajouter des données
Ajouter deux données à la base de données virtuelle ,Les résultats sont les suivants:
Base de données réelle Tableau I,Les résultats sont les suivants:
Base de données réelle Tableau II,Les résultats sont les suivants:
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
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
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)
边栏推荐
- puzzle(019.2)六边锁
- Kotlin common standard functions
- The problem of wirengpi program running permission
- Why should the terminal retail industry choose the member management system
- MySQL create given statement
- 处理图片类库
- Cocopod error failed: undefined method `map 'for nil:nilclass
- Jetpack compose layout (IV) - constraintlayout
- Remove the mosaic, there's a way, attached with the running tutorial
- 2台三菱PLC走BCNetTCP协议,能否实现网口无线通讯?
猜你喜欢
Minio基本使用与原理
How much money have I made by sticking to fixed investment for 3 years?
How to "transform" small and micro businesses (I)?
How to apply for a widget on wechat how to get a widget on wechat
Free platform for wechat applet making, steps for wechat applet making
How much does a small program cost? How much does a small program cost? It's clear at a glance
Remittance international empowers cross-border e-commerce: to be a compliant cross-border payment platform!
22 mathematical modeling contest 22 contest C
Can two Mitsubishi PLC adopt bcnettcp protocol to realize wireless communication of network interface?
Simple waterfall effect
随机推荐
Etcd tutorial - Chapter 4 etcd cluster security configuration
Pytorch_Geometric(PyG)使用DataLoader报错RuntimeError: Sizes of tensors must match except in dimension 0.
[buuctf.reverse] 121-125
Force buckle -104 Maximum depth of binary tree
Chitubox micromake l3+ slicing software configuration correspondence
(forwarding articles) after skipping multiple pages, shuttle returns to the first page and passes parameters
Reza RA series - development environment construction
Mysql 源码阅读(二)登录连接调试
How to "transform" small and micro businesses (II)?
How to make small programs on wechat? How to make small programs on wechat
Best producer consumer code
Data-driven anomaly detection and early warning of 21 May Day C
使用EVO
处理图片类库
How to make a self-service order wechat applet? How to do the wechat order applet? visual editing
Repo sync will automatically switch the correspondence between the local branch and the remote branch - how to customize this behavior
Remove the mosaic, there's a way, attached with the running tutorial
Methodchannel of flutter
[buuctf.reverse] 117-120
Wechat official account can reply messages normally, but it still prompts that the service provided by the official account has failed. Please try again later