Lorsque votre table utilise un horodatage métier (tel que l'heure de l'événement ou l'heure de la transaction) pour classer l'ancienneté des données plutôt que l'heure d'écriture système, vous pouvez configurer LindormTable pour hiérarchiser les données chaudes et froides en fonction de cette colonne. LindormTable archive les lignes entières vers le stockage froid lorsque la valeur de la colonne de temps personnalisée dépasse la limite configurée. Les lignes récentes restent dans le stockage rapide pour des requêtes à faible latence ; les lignes plus anciennes sont déplacées vers le stockage froid afin de réduire les coûts. Comme les données chaudes et froides résident dans la même table, les requêtes sont automatiquement routées vers le niveau de stockage approprié lorsque vous filtrez sur la colonne de temps personnalisée.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Le stockage froid activé sur votre instance. Pour plus de détails, consultez Instances Lindorm optimisées pour le stockage
Une version de LindormTable 2.4.3 ou ultérieure. Pour vérifier ou mettre à jour votre version, consultez Guide des versions de LindormTable et Effectuer une mise à jour mineure
Une connexion à LindormTable via Lindorm-cli. Pour plus de détails, consultez Se connecter et utiliser LindormTable avec Lindorm-cli
La propriété STORAGE_POLICY de la table cible ou de la famille de colonnes n'est pas définie sur
COLD. Une table de stockage froid ne peut pas être utilisée pour la séparation des données chaudes et froides. Pour modifier les propriétés de stockage, consultez Configurer le stockage froid
Contraintes
Cette fonctionnalité est prise en charge uniquement pour Lindorm SQL. Les opérations compatibles HBase ne sont pas prises en charge.
Lorsque la valeur d'une ligne dans la colonne de temps personnalisée dépasse la limite des données chaudes, la ligne entière est archivée vers le stockage froid.
-
La colonne de temps personnalisée doit satisfaire toutes les conditions suivantes :
Elle doit être une colonne de clé primaire.
Elle ne peut pas être la première colonne de la clé primaire.
Son type de données doit être BIGINT ou TIMESTAMP. Si la colonne n'existe pas, ne contient aucune donnée ou contient des données d'un type incorrect, toutes les données sont écrites dans le stockage chaud.
Configurer la séparation des données chaudes et froides pour une table
Étape 1 : Définir la colonne de temps personnalisée et la limite de données
Choisissez l'une des méthodes suivantes selon que la table existe déjà ou non.
Méthode 1 : Définir lors de la création de la table
Les exemples suivants créent une table nommée dt avec une limite de séparation des données chaudes et froides d'un jour, en utilisant la colonne p2 comme colonne de temps personnalisée.
La colonne de temps personnalisée (p2 dans ces exemples) doit être une colonne de clé primaire, mais ne peut pas être la première colonne de la clé primaire.
-- Default time unit: milliseconds (ms)
CREATE TABLE dt (p1 integer, p2 bigint, p3 bigint, c1 varchar, constraint pk PRIMARY KEY(p1, p2, p3))
WITH(COMPRESSION = 'ZSTD', CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=p2');
-- Set time unit to seconds (s)
CREATE TABLE dt (p1 integer, p2 bigint, p3 bigint, c1 varchar, constraint pk PRIMARY KEY(p1, p2, p3))
WITH(COMPRESSION = 'ZSTD', CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=p2|TIMEUNIT=SECONDS');
-- Set time unit to minutes (min)
CREATE TABLE dt (p1 integer, p2 bigint, p3 bigint, c1 varchar, constraint pk PRIMARY KEY(p1, p2, p3))
WITH(COMPRESSION = 'ZSTD', CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=p2|TIMEUNIT=MINUTES');
N'ajoutez pas d'espaces de part et d'autre du signe égal (=) dans CHS_COLUMN. Par exemple, utilisez COLUMN=p2 et non COLUMN = p2. La présence d'espaces provoquera une erreur.
| Paramètre | Description |
|---|---|
CHS |
La limite entre les données chaudes et froides, exprimée en secondes. Les données antérieures à ce seuil (basé sur la colonne de temps personnalisée) sont archivées vers le stockage froid lors de la compaction. Par exemple, 86400 = 86 400 secondes = 1 jour. |
CHS_L2 |
La propriété de stockage de niveau 2. Définissez-la sur storagetype=COLD pour diriger les données archivées vers le stockage froid. |
CHS_COLUMN |
La colonne de temps personnalisée et son unité de temps. Format : COLUMN=<column_name>|TIMEUNIT=<unit>. L'unité par défaut est la milliseconde (ms). Unités prises en charge : SECONDS, MINUTES, MICROSECONDS, NANOSECONDS. |
COMPRESSION |
L'algorithme de compression pour la table. Non sensible à la casse. La valeur par défaut est none. |
Méthode 2 : Ajouter la séparation à une table existante
Utilisez ALTER TABLE pour activer la séparation des données chaudes et froides sur une table créée sans cette fonctionnalité.
-- Enable hot and cold data separation with a one-day boundary, using p2 (default unit: milliseconds)
ALTER TABLE dt SET 'CHS' ='86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN' = 'COLUMN=p2';
-- Use p2 with time unit set to seconds
ALTER TABLE dt SET 'CHS' ='86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN' = 'COLUMN=p2|TIMEUNIT=SECONDS';
-- Use p2 with time unit set to minutes
ALTER TABLE dt SET 'CHS' ='86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN' = 'COLUMN=p2|TIMEUNIT=MINUTES';
Vérifier la configuration
Utilisez l'une des méthodes suivantes pour confirmer les paramètres :
Exécutez
SHOW TABLE VARIABLES FROM dt LIKE 'CHS_COLUMN';pour afficher les propriétés de la table.Dans le système de gestion de cluster, accédez à la page Overview et cliquez sur le nom de la table. Dans la zone Current Table Details , vérifiez les valeurs de CHS et CHS_COLUMN.
Étape 2 (facultative) : Modifier la configuration
Modifier la limite entre les données chaudes et froides :
ALTER TABLE dt SET 'CHS'='1000';
Modifier la colonne de temps personnalisée :
ALTER TABLE dt SET 'CHS_COLUMN'='COLUMN=p3';
Étape 3 (facultative) : Désactiver la séparation des données chaudes et froides
ALTER TABLE dt SET 'CHS'='', 'CHS_L2' = '', 'CHS_COLUMN'='';
Après avoir modifié la limite ou désactivé la séparation, les données ne retournent pas immédiatement du stockage froid vers le stockage chaud. Le système attend la fin d'une compaction en arrière-plan. Pour renvoyer immédiatement les données vers le stockage chaud, exécutez manuellement une major compaction à l'aide de la commande major_compact.
Configurer la séparation des données chaudes et froides pour un index secondaire
Un index secondaire étant stocké au sein de la table de base, vous le configurez de la même manière. Les exemples suivants utilisent la table dt créée dans la section précédente.
Pour un index secondaire, CHS_COLUMN doit faire référence à la même colonne de temps personnalisée que la table de base. Vous ne pouvez pas spécifier une autre colonne.
Créer un index secondaire avec la séparation activée
Méthode 1 : Définir lors de la création de l'index secondaire
CREATE INDEX idx ON dt (c1) WITH(CHS = '86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN='COLUMN=p2');
Méthode 2 : Ajouter la séparation à un index secondaire existant
-- Enable hot and cold data separation on an existing index
ALTER TABLE `dt.idx` SET 'CHS' = '86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN'='COLUMN=p2';
Le nom d'une table d'index secondaire utilise le format TableName.IndexName. Le point (.) étant un caractère spécial, placez le nom entre accents graves (). Par exemple, écrivez dt.idx et non dt.idx.
Modifier ou désactiver la configuration de l'index secondaire
Modifier la limite entre les données chaudes et froides :
ALTER TABLE `dt.idx` SET 'CHS'='10000';
Modifier la colonne de temps personnalisée :
ALTER TABLE `dt.idx` SET 'CHS_COLUMN'='COLUMN=p2';
Désactiver la séparation :
ALTER TABLE `dt.idx` SET 'CHS'='', 'CHS_L2' = '', 'CHS_COLUMN'='';
Écrire des données
L'écriture de données dans une table avec séparation des données chaudes et froides activée fonctionne de la même manière que l'écriture dans une table standard. Les données sont initialement stockées dans le stockage chaud (Medium ou Compute-optimized). Une ligne est archivée vers le stockage froid lors de la compaction lorsque la condition suivante est remplie :
Current time - Value of the time column > Value of CHS
Interroger des données
Les données chaudes et froides résident dans la même table. Toutes les requêtes ciblent cette table unique. Lorsque vous filtrez sur la colonne de temps personnalisée avec une plage temporelle, LindormTable détermine s'il doit analyser le stockage chaud, le stockage froid ou les deux, de sorte que la requête lit uniquement le niveau pertinent. Sans filtre de plage temporelle, la requête peut atteindre des données froides, et le débit est limité par la capacité du stockage froid. Pour plus de détails, consultez Instances Lindorm optimisées pour le stockage.
Pour interroger uniquement les données chaudes lorsque vous ne pouvez pas filtrer sur la colonne de temps personnalisée, utilisez l'indicateur _l_hot_only_.
Exemples de requêtes
Requête aléatoire (Get)
-- p2 is the custom time column
SELECT * FROM dt WHERE p1 = 10 AND p2 = 10;
Requête de plage
-- p2 is the custom time column
SELECT * FROM dt WHERE p2 > 10 AND p2 < 1000;
Par défaut, LindormTable n'exécute pas une instruction SELECT identifiée comme une requête inefficace ; il génère plutôt une exception. Pour plus de détails, consultez SELECT.
Interroger uniquement les données chaudes à l'aide d'un indicateur
SELECT /*+ _l_hot_only_(true) */ * FROM dt WHERE p1 > 1;
Exemple : Scénario Internet des Véhicules (IoV)
Dans les scénarios Internet des Véhicules (IoV), la clé primaire se compose généralement de vin (numéro d'identification du véhicule) et de ts (horodatage). Définissez ts comme colonne de temps personnalisée. Lors de l'interrogation des données pour un véhicule spécifique dans une plage temporelle, LindormTable détermine automatiquement s'il doit accéder au stockage chaud ou froid en fonction des conditions de requête.
USE test;
CREATE TABLE dt (
vin varchar, ts bigint, c1 varchar, c2 varchar,
constraint pk primary key(vin, ts)
) WITH (COMPRESSION = 'ZSTD', CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=ts');
-- Query data for a specific vehicle within a time range
SELECT * FROM dt WHERE vin = 'xxxx' AND ts > 1675065122000 AND ts < 1675975222000;
FAQ
Si je mets à jour des données froides existantes, les données mises à jour restent-elles froides ?
Oui, si la mise à jour ne modifie pas la valeur de la colonne de temps personnalisée. Si la valeur change, LindormTable réévalue le statut chaud/froid de la ligne en fonction de la nouvelle valeur.
Par exemple : une table possède des colonnes de clé primaire p1 et p2, ainsi que des colonnes non clés c1 et c2. Une ligne contient les valeurs p1=row1, p2=Jan-28-2023, c1="c1", c2="c2". Avec une limite d'un jour (CHS) et une date actuelle du 30 janvier 2023, la ligne est froide. La mise à jour de c1 ou de c2 maintient la ligne au statut froid. La mise à jour de p2 au 30 janvier 2023 rend la ligne chaude, et elle redevient froide le 01 février 2023.
Vous ne pouvez pas mettre à jour la valeur d'une colonne de temps personnalisée qui fait partie de la clé primaire.
Si une ligne ne possède aucune valeur dans la colonne de temps personnalisée, les données sont-elles séparées ?
Non. Les lignes sans valeur dans la colonne de temps personnalisée sont conservées dans le stockage chaud.