Avantages de l'utilisation d'une base de données fractionnée dans un projet

Pourquoi diviser la base de données ?

Dépend de la charge de la base de données et du volume de données.

Au début de la construction d'un projet unique, la charge et le volume de données de la base de données ne sont pas importants, il n'est donc pas nécessaire de diviser la base de données.Une instance de base de données MySQL est fondamentalement suffisante pour les petits systèmes financiers, les systèmes de documents, les systèmes ERP , et les systèmes OA.

Comme mentionné dans "Les dix ans de la technologie Taobao", le volume de données des activités de commerce électronique augmente rapidement, de sorte que l'architecture PHP + MySQL initiale ne peut plus répondre aux exigences réelles, donc la première façon à laquelle Taobao a pensé était d'utiliser MySQL Remplacé par Oracle. Mais peu de temps après, vers 2008, la base de données Oracle à nœud unique n'était pas facile à utiliser, alors Taobao a finalement fait ses adieux à la base de données à nœud unique et a commencé à diviser la base de données. D'un nœud à plusieurs nœuds.

Le fractionnement de la base de données est particulier, par exemple, il existe deux méthodes de fractionnement : le fractionnement vertical et le fractionnement horizontal. Ensuite, divisez-vous d'abord horizontalement ou verticalement ? L'ordre est-il important ? Non, l'ordre est important, et l'ordre ne doit jamais être erroné : divisez d'abord horizontalement, puis divisez verticalement .

Qu'est-ce que la séparation verticale ?

Le fractionnement vertical consiste à fractionner la base de données en fonction de l'entreprise (c'est-à-dire qu'il existe différentes bases de données pour les tables de différentes entreprises). Les tables de données d'un même type d'entreprise sont divisées en une base de données indépendante, et les tables de données d'un autre type sont répartis dans d'autres bases de données.

Par exemple, pour une nouvelle base de données de commerce électronique de détail, nous pouvons diviser les tables de données relatives aux produits en une base de données, puis créer un système de produits basé sur ces tables de données. Par exemple, utilisez le langage JAVA ou PHP pour créer un système de centre commercial. Divisez ensuite les tables de données liées au suivi, aux ventes et à l'inventaire dans une autre base de données, puis utilisez le programme pour créer un système d'entrepôt.

Quel problème le découpage vertical résout-il ?

Le partitionnement vertical peut réduire la charge sur une base de données à nœud unique. Il s'avère que toutes les tables de données sont placées sur un nœud de base de données, et sans aucun doute toutes les demandes de lecture et d'écriture sont également envoyées à ce MySQL, de sorte que la charge sur la base de données est trop élevée. Si la base de données d'un nœud est divisée en plusieurs bases de données MySQL, la charge de chaque base de données MySQL peut être efficacement réduite.

Quels problèmes ne peuvent pas être résolus par la division verticale

Le fractionnement vertical ne peut pas résoudre le rétrécissement de la table. Par exemple, quel que soit le nœud de base de données dans lequel la table des marchandises est divisée, il y a toujours autant d'enregistrements dans la table des marchandises. Quelle que soit la précision avec laquelle vous divisez la base de données verticalement, la quantité de données dans chaque tableau de données est Pas de changement.

MySQL a plus de 20 millions d'enregistrements dans une seule table, et les performances de lecture et d'écriture chuteront rapidement. Par conséquent, le fractionnement vertical ne peut pas avoir pour effet de réduire la table.

Qu'est-ce que le fractionnement horizontal ?

La segmentation horizontale consiste à diviser les données en plusieurs tables de données selon certaines règles d'un certain domaine. Une table de données est divisée en parties et divisée en plusieurs tables de données, de sorte que l'effet de réduction de la table puisse être obtenu.

Beaucoup de gens comprennent mal la segmentation horizontale, pensant que les tables de données obtenues par segmentation horizontale doivent être stockées sur différents nœuds MySQL. En fait, les tables de données divisées horizontalement peuvent également être stockées sur un nœud MySQL. Ce n'est pas que le partage horizontal nécessite nécessairement plusieurs nœuds MySQL. Pourquoi dites vous cela?

Beaucoup de gens ne savent pas que MySQL est livré avec une technologie de partitionnement des données, qui peut diviser et stocker les données d'une table dans différents répertoires selon des règles spéciales. Si nous montons plusieurs disques durs sur l'hôte Linux, nous pouvons utiliser la technologie de partitionnement MySQL pour diviser et stocker les données d'une table sur plusieurs disques durs. De cette manière, la capacité d'E/S limitée d'origine d'un disque dur est mise à niveau vers la capacité d'E/S améliorée de plusieurs disques.

Utilisations de l'horizon partagé

Le partitionnement horizontal peut diviser les données d'une table en plusieurs tables de données, ce qui peut jouer un rôle dans la réduction de la table.

Mais toutes les tables de données n'ont pas besoin d'être divisées horizontalement. La segmentation des données n'est requise que pour les tables de données contenant une grande quantité de données, telles que les tables d'utilisateurs, les tables de marchandises, les tables de produits, les tables d'adresses, les tables de commandes, etc. dans les systèmes de commerce électronique. Certaines tables de données n'ont pas besoin d'être fractionnées car la quantité de données n'est pas importante, telles que les tables de marque, les tables de fournisseur et les tables d'entrepôt, qui n'ont pas besoin d'être fractionnées.

Inconvénients de l'horizon partagé

Les règles de segmentation des différentes tables de données ne sont pas cohérentes et doivent être déterminées en fonction de l'activité réelle. Par conséquent, lorsque nous choisissons des produits middleware de base de données, nous devons choisir des produits avec des règles de segmentation riches. Les intergiciels de base de données courants sont : MyCat, Atlas, ProxySQL, etc. Certains pensent que MyCat est développé en langage Java, ils doutent donc de l'efficacité de MyCat. En fait, le rôle du middleware de base de données équivaut à celui de routeur d'instructions SQL. La configuration matérielle de votre routeur domestique n'est pas très élevée, mais cela n'affecte pas votre plaisir du haut débit 100M. Il en va de même pour MyCat, qui ne joue que le rôle de transfert d'instructions SQL et n'exécute pas réellement d'instructions SQL. La principale raison pour laquelle je recommande d'utiliser MyCat est qu'il contient de nombreuses règles de segmentation des données. Nous pouvons segmenter les données en fonction de la clé primaire, segmenter les données en fonction de la plage de clé primaire, et segmenter les données en fonction de la date, etc. Par conséquent, afin de répondre aux besoins de l'entreprise, MyCat est actuellement considéré comme un très bon produit middleware.

Un autre inconvénient du sharding horizontal est qu'il est plus difficile d'augmenter la capacité.Au fil du temps, le sharding ne suffira pas tôt ou tard. À l'heure actuelle, ce n'est pas le premier choix d'ajouter de nouveaux fragments de cluster. Étant donné qu'un fragment MySQL nécessite 4 à 8 nœuds MySQL (échelle minimale), le coût d'investissement de l'ajout d'un fragment est très élevé. Par conséquent, l'approche correcte consiste à séparer les données chaudes et froides et à archiver régulièrement les données dans les partitions. Transférez les données d'entreprise expirées des fragments vers les archives. Actuellement, le moteur MySQL avec le taux de compression de données le plus élevé est TokuDB, et la vitesse d'écriture avec les transactions est de 6 à 14 fois supérieure à celle du moteur InnoDB. Il est plus approprié d'utiliser TokuDB comme base de données d'archives.

Pourquoi faire un fractionnement horizontal d'abord, puis un fractionnement vertical ?

À mesure que la quantité de données augmente, la première chose à faire est de partitionner les données et d'utiliser plusieurs disques durs pour augmenter la capacité d'E/S de données et l'espace de stockage. Vous pouvez obtenir de bonnes performances d'E/S pour quelques disques durs.

À l'étape suivante, la quantité de données continue d'augmenter. À ce stade, nous devons diviser les données en plusieurs nœuds MySQL et utiliser MyCat pour gérer la division des données. Bien sûr, nous devons également faire la séparation de la lecture et de l'écriture des données, etc., ce qui ne sera pas abordé ici. Tout en effectuant une segmentation horizontale en arrière-plan, le système d'entreprise peut également introduire un équilibrage de charge, une architecture distribuée, etc. Théoriquement, après avoir utilisé la séparation des données chaudes et froides, la méthode de segmentation horizontale peut continuer longtemps, quelle que soit la taille du volume de données, il suffit de l'archiver régulièrement.

La base de données a atteint le stade de la segmentation horizontale et l'augmentation du volume de données n'est plus la raison principale du changement de conception de l'architecture. Au contraire, le système d'entreprise ne peut pas le supporter à ce stade. Si le système n'est pas divisé en modules, le système d'entreprise ne pourra pas le supporter. Par conséquent, un système est divisé en plusieurs sous-systèmes selon les modules et entreprises. Parmi plusieurs sous-systèmes, les données sont relativement indépendantes. Par exemple, Taobao ne partagera pas toutes les données avec Alipay et partagera le même ensemble de tableaux de données, ce qui affectera également le développement de leurs activités respectives. Il est donc nécessaire de faire une segmentation verticale, de classer les tables de données et de les diviser en plusieurs systèmes de base de données.

En parlant de ça, réfléchis bien. Si la base de données est découpée verticalement prématurément, il est nécessaire de reconstruire plusieurs systèmes métier indépendants et la charge de travail est trop importante. La segmentation horizontale ne nécessite pas de modifications majeures du système d'entreprise, nous devons donc commencer par la segmentation horizontale.

Je suppose que tu aimes

Origine blog.csdn.net/vcit102/article/details/131800219
conseillé
Classement