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

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