Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le partitionnement est une technique utilisée dans les systèmes de base de données et l’informatique distribuée pour partitionner horizontalement des données sur plusieurs serveurs ou nœuds. Il implique de diviser une base de données ou un jeu de données volumineux en parties plus petites et plus gérables appelées partitions. Une partition contient un sous-ensemble des données, et l’ensemble des partitions forme le jeu de données complet.
Les clusters élastiques sur Azure Database pour PostgreSQL serveurs flexibles offrent deux types de partitionnement de données : basés sur des lignes et basés sur un schéma. Chaque option est fournie avec ses propres compromis. Vous pouvez donc choisir l’approche qui s’aligne le mieux sur les exigences de votre application.
Partitionnement basé sur les lignes
partitionne les tables dans le modèle de schéma partagé de base de données unique, également appelé partitionnement basé sur les lignes ; les tenants coexistent en tant que lignes dans la même table. Vous définissez une colonne de distribution pour déterminer le tenant, qui partitionne horizontalement une table.
Le partitionnement basé sur les lignes est la méthode la plus efficace en matière de matériel. Les nœuds du cluster regroupent de manière dense et répartissent les clients. Toutefois, cette approche nécessite de s’assurer que toutes les tables du schéma comportent la colonne de distribution et que toutes les requêtes de l’application filtrent selon cette colonne. Le partitionnement basé sur les lignes fonctionne bien dans les charges de travail IoT et pour obtenir la meilleure marge d’utilisation matérielle.
Avantages :
- Meilleures performances.
- Meilleure densité de locataire par nœud.
Inconvénients :
- Nécessite des modifications de schéma.
- Nécessite des modifications des requêtes de l’application.
- Nécessite que tous les locataires partagent le même schéma.
Partitionnement basé sur un schéma
Le partitionnement basé sur un schéma utilise une base de données partagée et un modèle de schéma distinct. Chaque schéma agit comme une partition logique dans la base de données. Les applications multilocataires peuvent utiliser un schéma pour chaque locataire afin de fragmenter facilement les données selon la dimension du locataire. Vous n’avez pas besoin de modifier les requêtes, et l’application a uniquement besoin d’une petite modification pour définir la valeur appropriée search_path lors du changement de locataire. Le partitionnement basé sur un schéma est une solution idéale pour les microservices et pour les éditeurs de logiciels indépendants déployant des applications qui ne peuvent pas subir les modifications nécessaires pour intégrer le partitionnement basé sur les lignes.
Avantages :
- Les locataires peuvent avoir des schémas hétérogènes.
- Aucune modification du schéma n’est requise.
- Aucune modification des requêtes des applications n’est requise.
- La compatibilité SQL du partitionnement basée sur un schéma est mieux comparée au partitionnement basé sur les lignes.
Inconvénients :
- Moins de locataires par nœud par rapport au partitionnement basé sur les lignes.
Compromis de partitionnement
| Partitionnement basé sur un schéma | Partitionnement basé sur les lignes | |
|---|---|---|
| Modèle multilocataire | Schéma distinct par locataire | Tables partagées avec des colonnes d’ID de locataire |
| Version Citus | 12.0+ | Toutes les versions |
| Étapes supplémentaires par rapport à vanilla PostgreSQL | Aucune, seule une modification de configuration | Utiliser create_distributed_table sur chaque table pour distribuer et colocaliser des tables par ID de locataire |
| Le nombre de locataires | 1 à 10 000 | 1 à 1 000 000+ |
| Exigence de modélisation des données | Aucune clé étrangère entre les schémas distribués | Vous devez inclure une colonne d’ID de locataire (une colonne de distribution, également appelée clé de sharding) dans chaque table, et dans les clés primaires, les clés étrangères |
| Spécification SQL pour les requêtes à nœud unique | Utiliser un schéma distribué unique par requête | Les clauses JOIN et WHERE doivent inclure la colonne tenant_id |
| Requêtes multilocataires parallèles | Non | Oui |
| Définitions de table personnalisées par locataire | Oui | Non |
| Contrôle d’accès | Autorisations sur un schéma | Autorisations sur un schéma |
| Partage de données entre locataires | Oui, à l’aide de tables de référence (dans un schéma distinct) | Oui, à l’aide de tables de référence |
| Isolement du locataire à la partition | Chaque locataire a son propre groupe de partitions par définition | Permet d’attribuer à des ID de locataire spécifiques un groupe de partitions dédié grâce à isolate_tenant_to_new_shard |