Base de données de partitionnement Horizontal vs Vertical - Différence entre la Normalisation et de la Ligne de Fractionnement?
Je suis en train d'essayer de comprendre les différents concepts de Base de données de Partitionnement et c'est ce que j'ai compris: la
Partitionnement Horizontal/Sharding: la division d'un tableau à l'autre table qui contient un sous-ensemble de lignes qui ont été dans la première table (un exemple que j'ai vu beaucoup si le fractionnement d'une table d'Utilisateurs par Continent, comme une sous-table pour l'Amérique du Nord, un autre pour l'Europe, etc...). Chaque partition dans un autre emplacement physique (comprendre "machine").
Ce que j'ai compris, le Partitionnement Horizontal et de Fragmentation sont exactement la même chose(?).
Partitionnement Vertical: De ce que j'ai compris (http://technet.microsoft.com/en-us/library/ms178148%28v=sql.105%29.aspx ), il y a 2 sortes de Partitionnement Vertical:
-
Normalisation (qui consiste à enlever les licenciements à partir de la base de données par le fractionnement des tables et de les relier avec une clé étrangère).
-
Ligne de Fractionnement, voici ce que je ne comprends pas, quelle est la différence entre Normalisation et Ligne de Fractionnement? Dans ce que ces 2 techniques diffèrent les uns des autres?
J'ai aussi lu dans ce post (La différence entre la mise à l'échelle à l'horizontale et à la verticale pour les bases de données ) que la différence entre le Partitionnement Horizontal et Vertical de Partitionnement est que dans la première mise à l'échelle par l'ajout de machines de plus, alors que dans le second, vous balance en ajoutant plus de puissance (CPU, RAM) de votre ordinateur existant, c'est qu'une définition correcte? Je pensais que le de base différence entre ces 2 techniques réside dans la façon dont vous divisez vos tables.
Je suis désolé pour la charge de questions mais je suis un peu confus comme beaucoup de sites différents que je suis venu à travers dire des choses différentes.
Toute aide à clarifier serait grandement apprécié. Tout lien vers un clair et simple démonstration avec quelques tables serait également très utile.
- cette question est plus pour dba.stackexchange.com
Vous devez vous connecter pour publier un commentaire.
Partitionnement est plutôt une notion générale et peut être appliquée dans de nombreux contextes. Lorsqu'il estime que la partition de l'relationnel données, il se réfère généralement à la décomposition de vos tables de ligne-sage (horizontalement) ou des colonnes (à la verticale).
Partitionnement Vertical, aka la ligne de fractionnement, utilise les mêmes techniques de fractionnement de base de la normalisation, mais en général le terme (verticale /horizontale) partitionnement de données se réfère à un optimisation physique alors que la normalisation est une optimisation sur le conceptuel niveau.
Puisque vous demandez une simple démonstration - supposons que vous disposez d'un tableau comme ceci:
Une façon de partition
data
verticalement: Diviser comme suit:Ce type de partitionnement peut être appliqué, par exemple, lorsque vous avez rarement besoin de la colonne 2 dans vos requêtes. Partition data_main prendra moins de place, donc plein les analyses de la table sera plus rapide et il est plus probable qu'il s'inscrit dans le SGBD' cache de la page. Le revers de la médaille: Quand vous avez une requête à toutes les colonnes de
data
, vous obivously ont pour joindre les tables, ce qui sera plus cher que l'interrogation de la table d'origine.Avis vous fractionnez les colonnes de la même manière que vous le feriez si vous normaliser les tables. Toutefois, dans ce cas
data
pourrait déjà être normalisé à 3FN (et même FNBC et 4NF), mais vous décider de continuer à le diviser pour la raison de l'optimisation physique.Une façon de partition
data
horizontalement, à l'aide d'Oracle syntaxe:Ce serait de dire au SGBD à l'interne de stockage de la table
data
en deux segments (deux tableaux), en fonction de la valeur de la colonnestatus
. Cette façon de partitionnementdata
peut être appliqué, par exemple, quand on a l'habitude de requête uniquement les lignes d'une partition, par exemple, le statut de 'A' lignes (appelons-les lignes actives). Comme avant, les analyses complètes sera plus rapide (surtout si il y a seulement quelques lignes actives), les lignes (et les autres lignes resp.) sont stockés de manière contiguë (ils ne seront pas dispersés dans les pages qu'ils partagent avec les lignes d'un statut différent de la valeur, et il est plus probable que les lignes actifs seront dans le cache de la page.Partitionnement Horizontal dans la base de données
Garder tous les domaines par exemple:Table
Employees
aPar exemple:1.La tenue de tous les champs et la distribution des documents à plusieurs machines.dire id= 1-100000 ou 100000-200000 enregistrements dans une machine chaque machine et de la distribution sur plusieurs machines.
Par exemple:2.En gardant des bases de données distinctes pour les Régions par exemple: l'Asie-Pacifique,Amérique du Nord
Clés:choix de la série de lignes en fonction d'un critère
Partitionnement Vertical dans la base de données
Il est similaire à la Normalisation, où le même tableau est divisé en plusieurs tables et utilisé avec des jointures, si nécessaire.
Par exemple:
id
,name
,designation
est mis dans un tableau etphone
,email
qui ne peut être fréquemment consultées sont mis dans une autre.Clés:choix de la série de colonnes en fonction de critères.
Mise À L'Échelle Horizontale:
est d'environ l'ajout de plus de machines à permettre d'améliorer la réactivité et la disponibilité de tout le système, y compris la base de données.L'idée est de distribuer la charge de travail sur plusieurs machines.
Mise À L'Échelle Verticale:
est sur l'ajout de plus de capacités dans la forme de la CPU,de la Mémoire de la machine existante ou des machines pour permettre d'améliorer la réactivité et la disponibilité de tout le système, y compris la base de données.Dans une machine virtuelle, il peut être configuré pratiquement au lieu de l'ajout réel de machines physiques.
Sameer Sukumaran
La différence entre Normalisation et le fractionnement des mensonges dans le but de le faire.
Le principal objectif de la Normalisation est de supprimer les données redondantes Où, comme Le but de la Ligne de fractionnement est de séparer le moins de données requis.
par exemple:- Supposons que vous avez une table All_Details avec les colonnes id , Emp_name, Emp_address, Emp_phNo ,Emp_other_data, Company_Name , Company_Address , Company_revenue.
Maintenant, si vous voulez normaliser la table, vous devez créer deux nouveaux tableau Employee_Details et Company_Details et de garder une clé étrangère de company_id dans le tableau Employee_Details. de cette façon redondante des données de l'entreprise sera supprimé .
Maintenant parlons de la ligne de fractionnement. Dire que, même après la normalisation vous êtes seulement l'accès employee_name et emp_phNo mais vous n'êtes pas accès emp_address et emp_other_data si souvent. Donc, pour améliorer les performances de diviser la Employee_Details tableau en deux table de . table1 contenant fréquemment les données nécessaires( employee_name et emp_phNo ) et table2 contenant le moins fréquemment les données nécessaires( Emp_address, Emp_other_data) . À la fois de table aura le même unique_key colonne, de sorte que vous pouvez recréer une ligne de la table Employee_Details avec unique_key. Cela peut améliorer les performances de votre système drasticaly.
Les problèmes avec une seule base de données se pose lorsqu'il commence à devenir énorme. Donc, il est nécessaire pour la partition, afin de réduire l'espace de recherche, de sorte qu'il peut exécuter les actions nécessaires plus rapidement.Il y a divers partition stratégies disponibles, par exemple: le partitionnement horizontal, à la verticale de partitionnement, de hachage basée sur le partitionnement, la recherche basée sur le partitionnement. Horizontal, mise à l'échelle verticale est concept différent par rapport à ces stratégies.
Partitionnement Horizontal : Il se sépare de la table/collection dans plusieurs tables/collections basées sur des informations clés qui peuvent vous aider à obtenir de la table de droite comme le partitionnement horizontal aura plusieurs tables sur les différents nœuds/machines. par exemple: région sage utilisateurs de l'information.
Partitionnement Vertical : Elle sépare les colonnes en plusieurs parties comme mentionné dans l'une des réponses ci-dessus, par exemple: les colonnes relatives à l'utilisateur d'infos, commentaires, likes, amis etc, en application de réseautage social.
Hachage en fonction de partitionnement : Il utilise la fonction de hachage pour décider de la table/nœud, et de prendre des éléments clés comme entrée dans la génération de hachage. Si on change le nombre de tableaux, il nécessite une nouvelle organisation des données qui est coûteux. Il y a un problème lorsque vous voulez ajouter plus de table/node.
De recherche en fonction de partitionnement : Il utilise une table de correspondance qui permet de rediriger vers les différentes tables/node base sur des champs de saisie. On peut facilement ajouter une nouvelle table/node dans cette approche.
Mise à l'échelle horizontale vs mise à l'échelle verticale :
Lorsque nous concevons tout type d'application, nous avons besoin de penser à l'échelle aussi bien. Comment allons-nous gérer énorme quantité de trafic à l'avenir? Nous devons penser en termes de consommation de mémoire, le temps de latence, l'utilisation du processeur, de la tolérance de panne, la résilience. Mise à l'échelle verticale ajoute plus de ressources par exemple: le processeur, la mémoire de la machine simple de sorte qu'il peut gérer le trafic. Mais il y a limitation de cette approche, vous ne pouvez pas ajouter plus de ressources que certaine limite. Mise à l'échelle horizontale de permettre au trafic de distribuer sur plusieurs nœuds. Il doit disposer d'équilibrage de la charge à l'avant qui, fondamentalement, gérer le trafic, et de naviguer dans la circulation à un nœud. Mise à l'échelle horizontale vous permettent d'ajouter suffisamment de nombre de serveurs, mais vous aussi, vous avez besoin de ces nombreux nœuds.