All Products
Search
Document Center

Lindorm:Cara merancang tabel data deret waktu

Last Updated:Mar 29, 2026

Desain tabel yang baik merupakan fondasi kinerja kueri dan penyimpanan di LindormTSDB. Sebelum menulis SQL apa pun, analisis pola kueri dan karakteristik sumber data Anda—keputusan yang Anda buat saat pembuatan skema sulit dibalikkan nanti.

Topik ini menggunakan data pemantauan kualitas udara (AQM) sebagai contoh berkelanjutan untuk menjelaskan setiap keputusan desain.

Ikhtisar model data

Setiap catatan dalam tabel deret waktu LindormTSDB terdiri dari empat komponen:

KomponenDeskripsi
TableKumpulan data deret waktu dengan tipe yang sama. Memetakan ke suatu ukuran—misalnya, aqm untuk semua pembacaan kualitas udara.
TagAtribut yang mengidentifikasi objek yang dipantau, disimpan sebagai pasangan kunci-nilai. Secara default, LindormTSDB mengindeks setiap pasangan kunci-nilai tag, memetakan tag ke deret waktu untuk pemfilteran cepat. Disebut juga sebagai label atau dimensi di beberapa sistem.
TimestampWaktu saat catatan dihasilkan.
FieldNilai yang diukur. Satu catatan dapat memiliki beberapa field. LindormTSDB tidak mengindeks field.

Diagram berikut menggambarkan hubungan antar komponen tersebut menggunakan data AQM:

2023-02-20_15-32-24

Tentukan kolom mana yang harus menjadi tag

Ini adalah keputusan skema paling berdampak. Kesalahan dalam penentuan ini menyebabkan indeks deret waktu tumbuh tanpa batas, sehingga menurunkan kinerja penulisan dan kueri.

Tag digunakan untuk identitas; bidang digunakan untuk pengukuran.

  • Tentukan kolom sebagai tag jika kolom tersebut mengidentifikasi sumber atau konteks data—misalnya kota, ID perangkat, wilayah, host.

  • Tentukan kolom sebagai field jika kolom tersebut menyimpan nilai yang diukur dan berubah seiring waktu—misalnya suhu, penggunaan CPU, konsentrasi PM2.5.

Hindari tag dengan pergantian nilai tinggi

Jangan gunakan atribut yang nilainya sering berubah—seperti ID proses atau atribut yang berkaitan dengan waktu—sebagai tag, meskipun tipe datanya STRING. Setiap kombinasi unik kunci-nilai tag membuat entri deret waktu baru dalam indeks. Atribut dengan pergantian nilai tinggi menghasilkan banyak deret waktu berbeda, menyebabkan indeks membesar dengan cepat. Hal ini memperlambat kueri yang bergantung pada pencarian berbasis tag.

Tentukan atribut dengan pergantian nilai tinggi sebagai field saja.

Buat tabel

Beri nama tabel sesuai dengan ukuran yang diwakilinya. Gunakan pernyataan CREATE TABLE dengan kata kunci TAG untuk menandai kolom tag. Kata kunci TAG merupakan ekstensi SQL LindormTSDB—hanya kolom yang dideklarasikan dengan TAG yang dapat digunakan sebagai kunci primer.

Contoh berikut membuat tabel AQM dengan tiga kolom tag dan empat kolom field:

CREATE TABLE aqm (
    city        VARCHAR TAG,
    district    VARCHAR TAG,
    id          VARCHAR TAG,
    time        TIMESTAMP,
    pm2_5       DOUBLE,
    pm10        DOUBLE,
    so2         DOUBLE,
    no2         DOUBLE,
    PRIMARY KEY (id)  -- Hapus baris ini untuk instans Lindorm single-node, yang tidak mendukung kunci primer.
);

Setelah membuat tabel, masukkan catatan dengan INSERT INTO:

INSERT INTO aqm (city, district, id, time, pm2_5, pm10, so2, no2)
VALUES ('hangzhou', 'yuhang', 'HY00001', '2019-04-18 10:00:00', 31.0, 66.0, 10.0, 43.0);

INSERT INTO aqm (city, district, id, time, pm2_5, pm10, so2, no2)
VALUES ('hangzhou', 'yuhang', 'HY00001', '2019-04-18 10:01:00', 31.2, 66.0, 10.5, 43.1);

Untuk memasukkan beberapa catatan dalam satu pernyataan:

INSERT INTO aqm (city, district, id, time, pm2_5, pm10, so2, no2)
VALUES
    ('hangzhou', 'yuhang', 'HY00001', '2019-04-18 10:02:00', 31.3, 66.0, 10.0, 42.9),
    ('hangzhou', 'yuhang', 'HY00001', '2019-04-18 10:03:00', 31.2, 66.4, 10.3, 43.0);

Pilih kunci primer

LindormTSDB menggunakan kunci primer untuk mempartisi data dan mengoptimalkan kueri. Kueri yang menyertakan kunci primer dalam klausa WHERE berjalan lebih cepat.

Penting

Tabel deret waktu berbeda dari tabel database relasional. Kolom kunci primer tidak perlu berisi nilai unik. Kolom kunci primer harus ditandai sebagai tag (dideklarasikan dengan kata kunci TAG).

Catatan

Instans Lindorm single-node tidak mendukung kunci primer.

Gunakan pengenal unik sumber data sebagai kunci primer:

SkenarioKunci primer yang direkomendasikan
IoT (Internet of Things) / IIoT (Industrial Internet of Things)Device ID
IoV (Internet of Vehicles)Vehicle unique identifier
Pemantauan aplikasiApp ID atau host:port

Dalam contoh AQM, id secara unik mengidentifikasi setiap stasiun pemantauan. Jika sebagian besar kueri melakukan filter berdasarkan ID stasiun, gunakan id sebagai kunci primer:

PRIMARY KEY (id)

Pilih tipe data

Kolom tag

Kolom tag harus bertipe VARCHAR. Tipe data ini tidak dapat diubah setelah tabel dibuat.

Kolom timestamp

LindormTSDB menyimpan timestamp secara internal sebagai nilai BIGINT dalam format UNIX epoch di LindormDFS, yang mengoptimalkan kompresi timestamp. Saat membuat tabel, pilih tipe kolom berdasarkan cara aplikasi Anda menangani timestamp:

TipeGunakan saat
TIMESTAMPAplikasi Anda bekerja dengan string datetime yang dapat dibaca manusia dan Anda ingin database menangani konversi secara otomatis.
BIGINTAplikasi Anda bekerja langsung dengan nilai UNIX epoch, atau Anda melakukan operasi aritmetika pada timestamp (misalnya, menghitung durasi).

Kolom field

Kolom field mendukung semua tipe data. Hindari penggunaan VARCHAR untuk kolom field—karena kompresinya buruk dan memperlambat kueri dibandingkan tipe numerik.

Untuk daftar lengkap tipe data yang didukung, lihat Tipe data.