Je lisais récemment sur les architectures évolutives. Dans ce contexte, deux mots qui continuent à apparaître en ce qui concerne les bases de données sont partage et partitionnement. J'ai regardé les descriptions, mais j'ai fini par être confus.
Les experts de stackoverflow peuvent-ils m'aider à maîtriser les bases?
Le partitionnement est plus un terme générique pour diviser des données entre des tables ou des bases de données. La fragmentation est un type spécifique de partitionnement, à savoir le partitionnement horizontal.
Voir aussi ici: http://www.quora.com/Whats-the-difference-between-sharding-and-partition
On dirait que cela répond à vos deux questions:
Le partitionnement horizontal divise une ou plusieurs tables par ligne, généralement au sein d'une seule instance d'un schéma et d'un serveur de base de données. Cela peut présenter un avantage en réduisant la taille de l’index (et donc l’effort de recherche), à condition qu’il existe un moyen évident, robuste et implicite d’identifier dans quelle table une ligne particulière sera trouvée, sans avoir besoin au préalable de rechercher l’index, par exemple, le classique. exemple des tables 'CustomersEast' et 'CustomersWest', où leur code postal indique déjà où ils seront trouvés.
La fragmentation va au-delà: elle partitionne la ou les tables problématiques de la même manière, mais elle le fait sur plusieurs instances potentielles du schéma. L’avantage évident serait que la charge de recherche pour la grande table partitionnée peut maintenant être répartie sur plusieurs serveurs (logiques ou physiques), et pas uniquement sur plusieurs index sur le même serveur logique.
Source: Wiki-Shard .
La fragmentation est le processus de stockage des enregistrements de données sur plusieurs machines et est l’approche de MongoDB pour répondre aux demandes de croissance des données. À mesure que la taille des données augmente, un seul ordinateur peut ne pas suffire pour stocker les données ni fournir un débit de lecture et d'écriture acceptable. La fragmentation résout le problème de la mise à l'échelle horizontale. Avec le sharding, vous ajoutez plus de machines pour prendre en charge la croissance des données et les exigences des opérations de lecture et d'écriture.
Source: MongoDB .
J'y ai plongé aussi et bien que je sois de loin la référence sur le sujet, il y a peu de faits clés que j'ai rassemblés et de points que j'aimerais partager:
A partition est une division d'une base de données logique ou de ses éléments constitutifs en parties indépendantes distinctes. Database partitioning est normalement utilisé pour des raisons de facilité de gestion, de performance ou de disponibilité, comme pour l'équilibrage de charge.
https://en.wikipedia.org/wiki/Partition_ (database)
Sharding est un type de partitionnement, tel que Partitioning horizontal (HP)
Il existe également Partitionnement vertical (VP) grâce auquel vous divisez un tableau en parties distinctes plus petites. La normalisation implique également cette division des colonnes entre les tables, mais le partitionnement vertical va au-delà et partitionne les colonnes même lorsqu'elles sont déjà normalisées.
https://en.wikipedia.org/wiki/Shard_ (database_architecture)
J'aime beaucoup la réponse de Tony Baco sur Quora où il vous fait penser en termes de schéma (plutôt que de colonnes et de lignes). Il affirme que...
" Partitionnement horizontal", ou sharding, réplique [copie] le schéma, puis divise les données en fonction d'une clé de partition.
" Partitionnement vertical" implique de diviser le schéma (et les données s’accumulent).
https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them
Le Guide de partitionnement de base de données Oracle contient quelques chiffres intéressants. J'ai copié quelques extraits de l'article.
https://docs.Oracle.com/cd/B28359_01/server.111/b32024/partition.htm
Quand partitionner une table
Voici quelques suggestions pour savoir quand partitionner une table:
Taille de partition
L'élagage par partition est le moyen le plus simple et le plus important d'améliorer les performances avec le partitionnement. L'élagage par partition peut souvent améliorer les performances des requêtes de plusieurs ordres de grandeur. Par exemple, supposons qu'une application contienne une table Orders contenant un enregistrement historique des commandes et que cette table a été partitionnée par semaine. Une requête demandant des commandes pour une seule semaine n'accède qu'à une seule partition de la table Orders. Si la table Orders avait 2 années de données historiques, cette requête accéderait à une partition au lieu de 104 partitions. Cette requête pourrait potentiellement être exécutée 100 fois plus rapidement, simplement en raison de l'élagage de la partition.
Stratégies de partitionnement
Vous pouvez lire leur texte et visualiser leurs images qui expliquent assez bien tout.
Enfin, il est important de comprendre que les bases de données utilisent énormément de ressources:
De nombreux administrateurs de bases de données partitionnent sur le même ordinateur, où les partitions partageront toutes les ressources, mais apporteront une amélioration du disque et des E/S en fractionnant les données et/ou l'index.
Tandis que d'autres stratégies emploieront une architecture "sans partage", les fragments résidant sur des unités de calcul distinctes et distinctes (nœuds), disposant de 100% de la CPU, du disque, des E/S et de la mémoire. Fournir ses propres avantages et complexités.
Considérons une table dans une base de données avec 1 million de lignes et 100 colonnes. Dans Partitioning, vous pouvez diviser la table en 2 ou plusieurs tables ayant des propriétés telles que:
0,4 million de lignes (table1), 0,6 million de lignes (table2)
1 million de lignes et 60 colonnes (table1) et 1 million de lignes et 40 colonnes (table2)
Il pourrait y avoir plusieurs cas comme celui-là
Ceci est un partitionnement général
Mais Sharding fait référence au 1er cas uniquement lorsque nous divisons les données sur la base de lignes. Si nous divisons la table en plusieurs tables, nous devons conserver plusieurs copies similaires de schémas, car nous avons maintenant plusieurs tables.
Sharding dans le cas particulier partitionnement horizontal, lorsque les partitions sont réparties sur plusieurs instances de base de données. Si une base de données est partagée, cela signifie qu'elle est partitionnée par définition.