SharedMergeTree est la famille de moteurs de table par défaut d'ApsaraDB for ClickHouse Enterprise Edition. Cette alternative cloud-native aux moteurs ReplicatedMergeTree s'appuie sur Object Storage Service (OSS).
Fonctionnement
ReplicatedMergeTree stocke les données dans le stockage objet, mais conserve les métadonnées sur chaque serveur ClickHouse. Chaque événement de réplication implique la copie des métadonnées vers tous les réplicas.

SharedMergeTree supprime la communication directe entre réplicas. Tous les réplicas se coordonnent via un stockage partagé et ClickHouse Keeper, qui centralise les métadonnées.

Cette architecture — réplication asynchrone sans leader avec métadonnées centralisées — offre plusieurs avantages par rapport à ReplicatedMergeTree :
Débit d'insertion plus élevé
Meilleur débit des fusions en arrière-plan
Meilleur débit des mutations
Mise à l'échelle plus rapide — les métadonnées n'ayant pas besoin d'être redistribuées lors de l'extension du cluster, chaque table peut gérer des centaines de réplicas et monter en charge sans resharding. Cela permet également d'exécuter les requêtes de manière distribuée sur davantage de ressources de calcul.
Cohérence forte des données plus légère pour les requêtes SELECT
Créer une table
Les moteurs basés sur SharedMergeTree sont activés par défaut dans ApsaraDB for ClickHouse Enterprise Edition. Aucune modification de configuration n'est nécessaire : créez une table comme à l'accoutumée, le moteur s'applique automatiquement.
Table de base
CREATE TABLE my_table(
key UInt64,
value String
)
ENGINE = MergeTree
ORDER BY key
Comme default_table_engine est défini sur MergeTree dans Enterprise Edition, la clause ENGINE est facultative :
CREATE TABLE my_table(
key UInt64,
value String
)
ORDER BY key
Moteurs variantes
Les moteurs suivants sont automatiquement convertis en leurs équivalents SharedMergeTree : ReplacingMergeTree, CollapsingMergeTree, AggregatingMergeTree, SummingMergeTree, VersionedCollapsingMergeTree et GraphiteMergeTree.
CREATE TABLE myFirstReplacingMT
(
`key` Int64,
`someCol` String,
`eventTime` DateTime
)
ENGINE = ReplacingMergeTree
ORDER BY key;
Exécutez SHOW CREATE TABLE pour vérifier le moteur effectivement utilisé :
SHOW CREATE TABLE myFirstReplacingMT;
Le résultat affiche l'équivalent SharedMergeTree :
CREATE TABLE default.myFirstReplacingMT
( `key` Int64, `someCol` String, `eventTime` DateTime )
ENGINE = SharedReplacingMergeTree('/clickhouse/tables/{uuid}/{shard}', '{replica}')
ORDER BY key
SETTINGS index_granularity = 8192
Introspection
La plupart des tables système utilisées pour l'introspection de ReplicatedMergeTree sont disponibles pour SharedMergeTree. Deux tables font exception — system.replication_queue et system.replicated_fetches — car la réplication des données et des métadonnées n'a pas lieu. SharedMergeTree propose des replacements directs :
| Table ReplicatedMergeTree | Remplacement SharedMergeTree | Description |
|---|---|---|
system.replication_queue |
system.virtual_parts |
Stocke l'ensemble le plus récent des parties de données actuelles et futures en cours, y compris les fusions, modifications et suppressions de partitions |
system.replicated_fetches |
system.shared_merge_tree_fetches |
Contient les clés primaires et les sommes de contrôle en cours de chargement en mémoire |
Modifications de la configuration du moteur
SharedMergeTree modifie le comportement de trois paramètres.
**insert_quorum**
Non requis. Toutes les insertions dans SharedMergeTree utilisent le quorum (données écrites dans le stockage partagé). Il n'est pas nécessaire de configurer ce paramètre explicitement.
**insert_quorum_parallel**
Non requis pour la même raison : toutes les insertions utilisent déjà le quorum (données écrites dans le stockage partagé).
**select_sequential_consistency**
Les insertions avec quorum ne sont pas requises. Définissez ce paramètre pour envoyer des requêtes supplémentaires à ClickHouse Keeper lors des requêtes SELECT.