web-dev-qa-db-fra.com

Partage de base de données vs partitionnement

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?

  • Quelle est la différence entre sharding et partitionnement?
  • Est-il vrai que 'toutes les bases de données partagées sont essentiellement partitionnées (sur différents nœuds), mais toutes les bases de données partitionnées ne sont pas nécessairement partagées'?
117
Amit Sharma

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

83
Canis

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 .

34
NoChance

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:

  • Les tables supérieures à 2 Go doivent toujours être considérées comme candidates au partitionnement.
  • Tables contenant des données historiques, dans lesquelles de nouvelles données sont ajoutées à la partition la plus récente. Un exemple typique est une table historique dans laquelle seules les données du mois en cours peuvent être mises à jour et les 11 autres mois en lecture seule.
  • Lorsque le contenu d'une table doit être réparti sur différents types de périphériques de stockage.

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

  • Gamme
  • Hacher
  • Liste

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:

  • CPU
  • Disque
  • I/O
  • Mémoire

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.

https://en.wikipedia.org/wiki/Shared_nothing_architecture

28
Jeach

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:

  1. 0,4 million de lignes (table1), 0,6 million de lignes (table2)

  2. 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.

1
vikas bhandari

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.

0
Pavel