全部产品
Search
文档中心

Lindorm:Merancang tabel deret waktu

更新时间:Jul 06, 2025

Anda dapat menggunakan tabel deret waktu untuk meningkatkan kinerja kueri dan penyimpanan. Topik ini menjelaskan cara merancang tabel deret waktu berdasarkan sumber data deret waktu dan skenario bisnis tempat data tersebut digunakan.

Data deret waktu contoh

Pemodelan sangat penting untuk data deret waktu. Anda perlu menganalisis skenario kueri dan karakteristik sumber data untuk membuat tabel yang sesuai, sehingga memperoleh kinerja penyimpanan dan kueri optimal. Gambar berikut memberikan contoh penggunaan data pemantauan kualitas udara (AQM).

2023-02-20_15-32-24

Catatan data yang dihasilkan pada setiap titik waktu dapat dibagi menjadi bagian-bagian berikut:

  • Tabel: menunjukkan kumpulan data deret waktu dengan tipe yang sama.

  • Tag: menunjukkan atribut dari objek yang dimonitor metriknya. Tag terdiri dari kunci tag dan nilai tag. Secara default, LindormTSDB membuat indeks yang memetakan tag ke deret waktu untuk pasangan nilai-kunci setiap tag. Dalam beberapa skenario, tag mungkin disebut sebagai label atau dimensi.

  • Timestamp: menunjukkan waktu ketika catatan data dihasilkan.

  • Field: menunjukkan aspek dari metrik. Catatan data dapat berisi nilai dari beberapa field. LindormTSDB tidak membuat indeks untuk field.

Praktik terbaik untuk merancang tabel deret waktu

Anda dapat menggunakan pengukuran untuk data deret waktu dengan tipe yang sama sebagai nama tabel berdasarkan model data sebelumnya, lalu menjalankan pernyataan SQL CREATE TABLE untuk merancang tabel. Sebagai contoh, pengukuran AQM yang ditunjukkan dalam gambar sebelumnya dapat digunakan sebagai nama tabel.

Kode sampel berikut memberikan contoh cara mendefinisikan tabel. Contoh ini menggunakan model deret waktu AQM yang telah disebutkan sebelumnya.

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)  //// Instans Lindorm satu node tidak mendukung kunci utama. Jika instans Lindorm Anda adalah instans Lindorm satu node, hapus baris ini.
);

Setelah tabel didefinisikan, jalankan pernyataan INSERT untuk menulis data ke dalam tabel.

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

Anda juga dapat menjalankan pernyataan INSERT berikut untuk menulis beberapa catatan ke dalam tabel sekaligus:

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

Catatan

Kata kunci TAG adalah ekstensi sintaksis SQL. Kata kunci ini digunakan untuk menentukan kolom dalam tabel sebagai tag. Saat membuat tabel deret waktu, kami merekomendasikan agar Anda mendefinisikan kolom sebagai tag berdasarkan aturan berikut:

  • Pastikan bahwa kolom yang didefinisikan sebagai tag dapat secara unik mengidentifikasi atribut dari sumber data.

  • Hindari penggunaan atribut yang nilainya sering berubah sebagai tag. Sebagai contoh, hindari penggunaan ID proses dan atribut terkait waktu sebagai tag. Kami merekomendasikan agar Anda mendefinisikan atribut ini sebagai field meskipun tipe datanya adalah STRING. Jika atribut ini digunakan sebagai tag, jumlah deret waktu bertambah, sehingga ukuran indeks deret waktu juga bertambah. Hal ini dapat memengaruhi kinerja kueri secara negatif.

Praktik terbaik untuk merancang kunci utama

Basis data melakukan sharding penyimpanan dan optimasi kueri berdasarkan kunci utama. Jika kunci utama ditentukan dalam kueri, efisiensi kueri meningkat. Kami merekomendasikan agar Anda menentukan kunci utama saat membuat tabel.

Catatan

Instans Lindorm satu node tidak mendukung kunci utama.

Dalam kebanyakan kasus, kami merekomendasikan agar Anda menggunakan pengenal unik dari sumber data sebagai kunci utama berdasarkan skenario aktual.

  • Dalam skenario IoT dan Industrial Internet of Things (IIoT), Anda dapat menggunakan ID perangkat sebagai kunci utama.

  • Dalam skenario Internet of Vehicles (IoV), Anda dapat menggunakan pengenal unik kendaraan sebagai kunci utama.

  • Dalam skenario pemantauan, Anda dapat menggunakan pengenal seperti app ID atau host:port sebagai kunci utama.

Dalam tabel deret waktu aqm yang diberikan dalam contoh sebelumnya, Anda dapat menggunakan ID sebagai kunci utama untuk mendapatkan kinerja kueri optimal jika sejumlah besar kueri dilakukan berdasarkan ID.

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)   // Instans Lindorm satu node tidak mendukung kunci utama. Jika instans Lindorm Anda adalah instans Lindorm satu node, hapus baris ini.
);
Penting

Tabel deret waktu berbeda dari tabel dalam basis data relasional tradisional. Tabel deret waktu tidak memerlukan nilai dalam kolom kunci utama untuk bersifat unik. Jika Anda ingin menentukan kolom sebagai kolom kunci utama, pastikan bahwa kolom tersebut diberi label sebagai tag.

Praktik terbaik untuk memilih tipe data

Untuk informasi lebih lanjut tentang tipe data yang didukung oleh LindormTSDB, lihat Tipe Data. Saat membuat tabel deret waktu, kami merekomendasikan agar Anda memilih tipe data berdasarkan aturan berikut:

  • Kolom tag

    Nilai dalam kolom yang dinyatakan sebagai tag harus bertipe data VARCHAR. Tipe data kolom ini tidak dapat diubah.

  • Kolom timestamp

    LindormTSDB menyimpan timestamp sebagai nilai BIGINT dalam format waktu UNIX di LindormDFS. Ini meningkatkan kinerja kompresi timestamp. Saat membuat tabel, Anda dapat menentukan tipe BIGINT atau TIMESTAMP berdasarkan kebutuhan perhitungan Anda untuk timestamp.

  • Kolom field

    Kolom field mendukung semua tipe data. Untuk memastikan kompresi data yang sangat baik dan kinerja kueri optimal, kami merekomendasikan agar Anda tidak menggunakan VARCHAR sebagai tipe data untuk nilai dalam kolom field.