Requêtes inter-partitions : le problème le plus complexe
Comprenez pourquoi les jointures et transactions inter-partitions constituent le problème le plus difficile des bases de données distribuées, ainsi que les modèles permettant de les limiter.
Requêtes inter-partitions : le problème le plus complexe est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Le coût du partitionnement horizontal
Le partitionnement horizontal permet de mettre les écritures et la capacité à l'échelle, mais complique les requêtes qui couvrent plusieurs partitions : chaque requête inter-partitions est diffusée à toutes les partitions.
Les requêtes sur une seule partition sont simples
Si votre clé de partitionnement figure dans la clause WHERE, le routeur envoie une seule requête à une seule partition :
-- shard_id = hash(user_id) % N
SELECT * FROM orders WHERE user_id = 42;
-- Router computes shard, sends one query, gets one result.Requêtes diffusées à toutes les partitions
Sans la clé de partitionnement, le routeur interroge chaque partition et fusionne les résultats :
-- WHERE status = 'paid' — no user_id
SELECT * FROM orders WHERE status = 'paid' ORDER BY created_at DESC LIMIT 100;
-- Must query all N shards, merge results, sort, take top 100.Agrégations diffusées à toutes les partitions
Pour COUNT/SUM/AVG : obtenez les résultats partiels de chaque partition, puis combinez-les dans le routeur ou l'application :
-- On each shard:
SELECT COUNT(*), SUM(total) FROM orders;
-- Aggregator:
final_count = SUM(counts), final_sum = SUM(sums)
-- AVG is trickier — need SUM and COUNT, can't average averages.JOIN entre partitions
Si les deux côtés sont partitionnés avec la même clé (et donc colocalisés), le JOIN reste local à la partition. Sinon, il devient pratiquement impossible à exécuter à grande échelle.
Tables de référence (répliquées partout)
Les petites tables de recherche sont répliquées sur chaque partition, de sorte que les JOIN qui les utilisent restent locaux. Citus les appelle des « tables de référence ».
Éviter les schémas inter-partitions
Astuces de conception du schéma :
- Dénormalisez — dupliquez les données du parent dans la partition contenant l'enfant
- Utilisez la clé de partitionnement partout — même lorsqu'elle semble « inutile »
- Calculez les rapports à l'avance dans une base de données analytique distincte
Pagination entre partitions
OFFSET 1000 LIMIT 10 sur de nombreuses partitions est désastreux — chaque partition doit produire 1 010 lignes. Utilisez plutôt la pagination par clé.
Transactions distribuées
La validation en deux phases (2PC) coordonne les validations atomiques entre les partitions. Elle est lente et fragile en cas de partitionnement du réseau. En pratique, concevez votre système autour de schémas de type « saga » :
// Saga pattern (conceptual):
// 1. Local TX on shard A: mark as pending, log
// 2. RPC to shard B: do its part
// 3. Local TX on shard A: mark as committed
// 4. On failure: compensating transactionsPartitions surchargées
Un utilisateur célèbre ou un produit viral — un trafic concentré sur une seule partition compromet toute possibilité de mise à l'échelle. Détectez la partition concernée et scindez-la (sous-partitionnement) ou déplacez-la.
Clés étrangères inter-partitions
Les clés étrangères d'un RDBMS ne s'étendent pas à plusieurs partitions. Vous imposez l'intégrité référentielle dans l'application ou acceptez une cohérence éventuelle pour les relations entre partitions.
Récapitulatif
Le partitionnement horizontal déplace la difficulté de la « mise à l'échelle des écritures » vers la « conception de requêtes qui restent locales à une partition ».
- Les requêtes sur une seule partition sont rapides
- La diffusion à toutes les partitions est lente
- Dénormalisez pour conserver le traitement local
- Utilisez des tables de référence pour les dimensions partagées
- Préférez les sagas à 2PC
Vérification rapide
Pourquoi un SELECT dont la clause WHERE ne contient pas la clé de partitionnement est-il coûteux dans une base de données partitionnée ?
Apprends SQL avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 46
- Leçons
- 183
Questions Fréquemment Posées
La leçon « Requêtes inter-partitions : le problème le plus complexe » est-elle gratuite ?
Oui — le texte complet de « Requêtes inter-partitions : le problème le plus complexe » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Requêtes inter-partitions : le problème le plus complexe » ?
Comprenez pourquoi les jointures et transactions inter-partitions constituent le problème le plus difficile des bases de données distribuées, ainsi que les modèles permettant de les limiter. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Requêtes inter-partitions : le problème le plus complexe » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Stratégies de partitionnement horizontal : intervalle, hachage et annuaire
- Requêtes inter-partitions : le problème le plus complexe
- Citus et Postgres distribué
- Quand NE PAS partitionner horizontalement