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:
Mengaktifkan cold storage pada instans Anda. Untuk detailnya, lihat Aktifkan Capacity storage.
Menggunakan LindormTable versi 2.4.3 atau lebih baru. Untuk memeriksa atau melakukan upgrade versi, lihat Panduan versi LindormTable dan Lakukan peningkatan versi minor.
Memiliki koneksi ke LindormTable melalui Lindorm-cli. Untuk detailnya, lihat Hubungkan ke dan gunakan LindormTable menggunakan Lindorm-cli.
STORAGE_POLICY dari tabel atau column family target tidak diatur ke
COLD. Tabel dengan cold storage tidak dapat digunakan untuk pemisahan data panas dan dingin. Untuk mengubah properti penyimpanan, lihat Konfigurasi cold storage.
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.
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');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 |
| 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, |
| Properti penyimpanan layer-2. Atur ke |
| Kolom waktu kustom dan satuan waktunya. Format: |
| Algoritma kompresi untuk tabel. Tidak case-sensitive. Nilai default-nya adalah |
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'='';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.
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';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 CHSKueri 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;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.
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.