All Products
Search
Document Center

Lindorm:Pisahkan data panas dan dingin berdasarkan kolom waktu kustom

Last Updated:Sep 17, 2026

Jika tabel Anda menggunakan timestamp bisnis—seperti waktu event atau waktu transaksi—untuk mengklasifikasikan usia data alih-alih waktu tulis sistem, Anda dapat mengonfigurasi LindormTable agar menempatkan data panas dan dingin ke tier penyimpanan yang berbeda berdasarkan kolom tersebut. LindormTable mengarsipkan seluruh baris ke cold storage ketika nilai dalam kolom waktu kustom melewati batas yang telah dikonfigurasi. Baris terbaru tetap berada di penyimpanan cepat untuk kueri berlatensi rendah, sedangkan baris lama dipindahkan ke cold storage guna mengurangi biaya. Karena data panas dan dingin tetap berada dalam tabel yang sama, kueri secara transparan diarahkan ke tier penyimpanan yang tepat saat Anda menerapkan filter pada kolom waktu kustom.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Batasan

  • Fitur ini hanya didukung untuk Lindorm SQL. Operasi yang kompatibel dengan HBase tidak didukung.

  • Ketika nilai suatu baris dalam kolom waktu kustom melewati batas data panas, seluruh baris tersebut diarsipkan ke cold storage.

  • Kolom waktu kustom harus memenuhi semua kondisi berikut:

    • Kolom tersebut harus merupakan kolom kunci primer.

    • Kolom tersebut tidak boleh menjadi kolom pertama dari kunci primer.

    • Tipe datanya harus BIGINT atau TIMESTAMP. Jika kolom tidak ada, tidak memiliki data, atau berisi data dengan tipe yang salah, semua data akan ditulis ke hot storage.

Konfigurasi pemisahan data panas dan dingin untuk tabel

Langkah 1: Tetapkan kolom waktu kustom dan batas data

Pilih salah satu metode berikut berdasarkan apakah tabel sudah ada atau belum.

Metode 1: Tetapkan saat membuat tabel

Contoh berikut membuat tabel bernama dt dengan batas pemisahan data panas dan dingin satu hari, menggunakan kolom p2 sebagai kolom waktu kustom.

Catatan

Kolom waktu kustom (p2 dalam contoh ini) harus merupakan kolom kunci primer tetapi tidak boleh menjadi kolom kunci primer pertama.

-- Satuan waktu default: milidetik (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');

-- Atur satuan waktu ke detik (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');

-- Atur satuan waktu ke menit (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');
Penting

Jangan tambahkan spasi di kedua sisi tanda sama dengan (=) dalam CHS_COLUMN. Misalnya, gunakan COLUMN=p2, bukan COLUMN = p2. Spasi akan menyebabkan error.

Parameter

Deskripsi

CHS

Batas pemisahan data panas dan dingin, dalam detik. Data yang lebih tua dari ambang batas ini (berdasarkan kolom waktu kustom) diarsipkan ke cold storage selama compaction. Contohnya, 86400 = 86.400 detik = 1 hari.

CHS_L2

Properti penyimpanan layer-2. Atur ke storagetype=COLD untuk mengarahkan data yang diarsipkan ke cold storage.

CHS_COLUMN

Kolom waktu kustom dan satuan waktunya. Format: COLUMN=<column_name>|TIMEUNIT=<unit>. Satuan default adalah milidetik (ms). Satuan yang didukung: SECONDS, MINUTES, MICROSECONDS, NANOSECONDS.

COMPRESSION

Algoritma kompresi untuk tabel. Tidak case-sensitive. Nilai default-nya adalah none.

Metode 2: Tambahkan pemisahan ke tabel yang sudah ada

Gunakan ALTER TABLE untuk mengaktifkan pemisahan data panas dan dingin pada tabel yang dibuat tanpa fitur tersebut.

-- Aktifkan pemisahan data panas dan dingin dengan batas satu hari, menggunakan p2 (satuan default: milidetik)
ALTER TABLE dt SET 'CHS' ='86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN' = 'COLUMN=p2';

-- Gunakan p2 dengan satuan waktu diatur ke detik
ALTER TABLE dt SET 'CHS' ='86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN' = 'COLUMN=p2|TIMEUNIT=SECONDS';

-- Gunakan p2 dengan satuan waktu diatur ke menit
ALTER TABLE dt SET 'CHS' ='86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN' = 'COLUMN=p2|TIMEUNIT=MINUTES';

Verifikasi konfigurasi

Gunakan salah satu metode berikut untuk mengonfirmasi pengaturan:

  • Jalankan SHOW TABLE VARIABLES FROM dt LIKE 'CHS_COLUMN'; untuk melihat properti tabel.

  • Di sistem manajemen kluster, buka halaman Overview dan klik nama tabel. Di area Current Table Details, periksa nilai CHS dan CHS_COLUMN.

Langkah 2 (Opsional): Ubah konfigurasi

Ubah batas pemisahan data panas dan dingin:

ALTER TABLE dt SET 'CHS'='1000';

Ubah kolom waktu kustom:

ALTER TABLE dt SET 'CHS_COLUMN'='COLUMN=p3';

Langkah 3 (Opsional): Nonaktifkan pemisahan data panas dan dingin

ALTER TABLE dt SET 'CHS'='', 'CHS_L2' = '', 'CHS_COLUMN'='';
Catatan

Setelah Anda mengubah batas atau menonaktifkan pemisahan, data tidak langsung dipindahkan dari cold storage kembali ke hot storage. Sistem menunggu hingga compaction latar belakang selesai. Untuk memindahkan data kembali ke hot storage segera, jalankan major compaction secara manual menggunakan perintah major_compact.

Konfigurasi pemisahan data panas dan dingin untuk indeks sekunder

Indeks sekunder disimpan dalam tabel dasar, sehingga dikonfigurasi dengan cara yang sama. Contoh berikut menggunakan tabel dt yang dibuat pada bagian sebelumnya.

Catatan

Untuk indeks sekunder, CHS_COLUMN harus mereferensikan kolom waktu kustom yang sama dengan tabel dasar. Anda tidak dapat menentukan kolom yang berbeda.

Buat indeks sekunder dengan pemisahan diaktifkan

Metode 1: Tetapkan saat membuat indeks sekunder

CREATE INDEX idx ON dt (c1) WITH(CHS = '86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN='COLUMN=p2');

Metode 2: Tambahkan pemisahan ke indeks sekunder yang sudah ada

-- Aktifkan pemisahan data panas dan dingin pada indeks yang sudah ada
ALTER TABLE `dt.idx` SET 'CHS' = '86400', 'CHS_L2' = 'storagetype=COLD', 'CHS_COLUMN'='COLUMN=p2';
Catatan

Nama tabel indeks sekunder menggunakan format TableName.IndexName. Karena titik (.) merupakan karakter khusus, sertakan nama tersebut dalam backtick (`). Misalnya, tulis `dt.idx`, bukan dt.idx.

Ubah atau nonaktifkan konfigurasi indeks sekunder

Ubah batas pemisahan data panas dan dingin:

ALTER TABLE `dt.idx` SET 'CHS'='10000';

Ubah kolom waktu kustom:

ALTER TABLE `dt.idx` SET 'CHS_COLUMN'='COLUMN=p2';

Nonaktifkan pemisahan:

ALTER TABLE `dt.idx` SET 'CHS'='', 'CHS_L2' = '', 'CHS_COLUMN'='';

Tulis data

Menulis data ke tabel dengan pemisahan data panas dan dingin yang diaktifkan bekerja sama seperti menulis ke tabel standar. Data awalnya disimpan di hot storage (Medium atau Compute-optimized). Suatu baris diarsipkan ke cold storage selama compaction ketika kondisi berikut terpenuhi:

Waktu saat ini - Nilai kolom waktu > Nilai CHS

Kueri data

Data panas dan dingin berada dalam tabel yang sama. Semua kueri menargetkan tabel tunggal tersebut. Saat Anda menerapkan filter pada kolom waktu kustom dengan rentang waktu tertentu, LindormTable menggunakannya untuk menentukan apakah akan memindai hot storage, cold storage, atau keduanya—sehingga kueri hanya membaca tier yang relevan. Tanpa filter rentang waktu, kueri mungkin mengenai data dingin, dan throughput dibatasi oleh kapasitas cold storage. Untuk detailnya, lihat Pembatasan kecepatan baca Capacity storage.

Untuk mengkueri hanya data panas saat Anda tidak dapat menerapkan filter pada kolom waktu kustom, gunakan hint _l_hot_only_.

Contoh kueri

Kueri acak (Get)

-- p2 adalah kolom waktu kustom
SELECT * FROM dt WHERE p1 = 10 AND p2 = 10;

Kueri rentang

-- p2 adalah kolom waktu kustom
SELECT * FROM dt WHERE p2 > 10 AND p2 < 1000;
Penting

Secara default, LindormTable tidak menjalankan pernyataan SELECT yang diidentifikasi sebagai kueri tidak efisien—melainkan melemparkan exception. Untuk detailnya, lihat SELECT.

Kueri Data Panas Saja Menggunakan Petunjuk

SELECT /*+ _l_hot_only_(true) */ * FROM dt WHERE p1 > 1;

Contoh: Skenario Internet of Vehicles

Dalam skenario Internet of Vehicles (IoV), kunci primer biasanya terdiri dari vin (Vehicle Identification Number) dan ts (timestamp). Tetapkan ts sebagai kolom waktu kustom. Saat mengkueri data untuk kendaraan tertentu dalam rentang waktu tertentu, LindormTable secara otomatis menentukan apakah akan mengakses hot storage atau cold storage berdasarkan kondisi kueri.

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');

-- Kueri data untuk kendaraan tertentu dalam rentang waktu tertentu
SELECT * FROM dt WHERE vin = 'xxxx' AND ts > 1675065122000 AND ts < 1675975222000;

FAQ

Jika saya memperbarui data dingin yang sudah ada, apakah data yang diperbarui tetap dingin?

Ya, jika pembaruan tersebut tidak mengubah nilai dalam kolom waktu kustom. Jika nilainya berubah, LindormTable mengevaluasi ulang status panas/dingin baris tersebut berdasarkan nilai baru.

Contohnya: sebuah tabel memiliki kolom kunci primer p1 dan p2, serta kolom non-kunci primer c1 dan c2. Sebuah baris memiliki nilai p1=row1, p2=Jan-28-2023, c1="c1", c2="c2". Dengan batas 1 hari (CHS) dan tanggal saat ini Jan-30-2023, baris tersebut bersifat dingin. Memperbarui c1 atau c2 tetap menjadikan baris tersebut dingin. Memperbarui p2 menjadi Jan-30-2023 menjadikan baris tersebut panas, dan kembali menjadi dingin pada Feb-01-2023.

Catatan

Anda tidak dapat memperbarui nilai kolom waktu kustom yang merupakan bagian dari kunci primer.

Jika suatu baris tidak memiliki nilai dalam kolom waktu kustom, apakah datanya dipisahkan?

Tidak. Baris yang tidak memiliki nilai dalam kolom waktu kustom tetap disimpan di hot storage.