Pra-pengambilan sampel digunakan untuk menghitung data pada interval waktu tertentu saat data ditulis ke dalam database. Data yang telah di-pra-pengambilan sampel disimpan secara terpisah. Saat melakukan kueri pengambilan sampel, data pra-pengambilan sampel yang sesuai dapat dikueri secara otomatis untuk mengurangi latensi akses. Topik ini menjelaskan konsep pra-pengambilan sampel, cara membuat dan mengelola aturan pra-pengambilan sampel, serta memberikan praktik terbaik untuk pra-pengambilan sampel.
Prasyarat
Versi LindormTSDB dari instance Lindorm adalah 3.4.19 atau lebih baru.
Untuk informasi lebih lanjut tentang cara melihat dan meningkatkan versi LindormTSDB dari instance Lindorm, lihat Catatan Rilis LindormTSDB dan Tingkatkan Versi Mesin Minor dari Instance Lindorm.
Ikhtisar
Pra-pengambilan sampel
Pra-pengambilan sampel dilakukan untuk menghitung data sebelum ditulis ke dalam database. Proses ini mengurangi jumlah data dan menyimpan data berdasarkan aturan pra-pengambilan sampel yang telah ditentukan. Saat Anda mengkueri data yang telah ditulis, data dengan rasio pra-pengambilan sampel paling dekat dengan rasio pengambilan sampel dalam kondisi kueri akan dikueri secara otomatis. Data tersebut kemudian diproses oleh mesin komputasi, sehingga mengurangi jumlah data yang perlu dikueri dan dihitung secara real-time, serta menurunkan latensi kueri.
Dibandingkan dengan kueri kontinu, pra-pengambilan sampel memiliki manfaat berikut:
Data yang telah diambil sampel dapat langsung dikueri setelah ditulis. Tidak perlu menunggu eksekusi kueri kontinu.
Pra-pengambilan sampel tidak mempengaruhi performa penulisan. Data yang telah diambil sampel disimpan secara real-time saat ditulis.
Data yang telah di-pra-pengambilan sampel dan data mentah disimpan dalam tabel yang sama. Saat melakukan kueri pra-pengambilan sampel, data pra-pengambilan sampel yang paling sesuai dengan aturan yang ditentukan akan dikueri. Jika data pra-pengambilan sampel tidak sesuai dengan aturan yang ditentukan, data mentah akan dikueri.
Aturan pra-pengambilan sampel
Aturan pra-pengambilan sampel mendefinisikan granularitas waktu operasi pra-pengambilan sampel dan bagaimana data di-aggregat selama proses tersebut. Misalnya, jika satu baris data mentah dihasilkan setiap menit, Anda dapat mengonfigurasi aturan pra-pengambilan sampel untuk menghitung nilai rata-rata data mentah secara per jam. Aturan pra-pengambilan sampel dapat dikonfigurasikan untuk database atau tabel. Gambar berikut menunjukkan perbedaan antara dua jenis aturan pra-pengambilan sampel.
Buat aturan pra-pengambilan sampel
Aturan pra-pengambilan sampel hanya berlaku untuk data yang ditulis ke tabel atau database sebelum aturan dibuat.
Buat aturan pra-pengambilan sampel untuk tabel menggunakan pernyataan SQL
Contoh
Konfigurasikan aturan pra-pengambilan sampel di mana rasio pra-pengambilan sampel diatur menjadi satu jam dan operasi sum dan max dilakukan pada data yang telah di-pra-pengambilan sampel.
CREATE PREDOWNSAMPLE `1h` AGGREGATORS (`sum`, `max`) ON sensor;Konfigurasikan aturan pra-pengambilan sampel di mana rasio pra-pengambilan sampel diatur menjadi satu jam, operasi sum dan max dilakukan pada data yang telah di-pra-pengambilan sampel, dan TTL data yang telah di-pra-pengambilan sampel diatur menjadi 90 hari.
CREATE PREDOWNSAMPLE `1h` AGGREGATORS (`sum`, `max`) TTL `90d` ON sensor;
Referensi sintaksis
Buat aturan pra-pengambilan sampel untuk database menggunakan operasi API
Jalur permintaan dan metode
Jalur permintaan | Metode permintaan | Deskripsi |
/api/database |
| Konfigurasikan aturan pra-pengambilan sampel untuk database yang ditentukan. Jika database yang ditentukan (seperti database default) sudah ada, gunakan metode PUT untuk memperbarui aturan pra-pengambilan sampel untuk database tersebut. Untuk mengonfigurasi aturan pra-pengambilan sampel untuk database saat Anda membuat database, gunakan metode POST. |
Parameter permintaan
Parameter | Diperlukan | Deskripsi |
name | Ya | Nama database. Contoh: default. |
downsampleRules | Ya | Daftar aturan pra-pengambilan sampel yang ingin Anda konfigurasikan. Setiap kali Anda memperbarui aturan pra-pengambilan sampel database, semua aturan dalam daftar diperbarui. |
Parameter untuk satu aturan pra-pengambilan sampel
Parameter | Diperlukan | Deskripsi | Contoh |
aggregator | Ya | Fungsi agregat yang digunakan dalam pra-pengambilan sampel. Nilai valid: sum, count, max, min, first, last, dan median. Untuk informasi lebih lanjut tentang fungsi agregat, lihat CREATE PREDOWNSAMPLE. Penting
| "aggregator": "sum" |
intervals | Ya | Daftar interval waktu berdasarkan mana pra-pengambilan sampel dilakukan. Unit berikut didukung: s (detik), m (menit), h (jam), dan d (hari). | Misalnya, jika parameter diatur ke ["10m", "1h"] , data mentah di-pra-pengambilan sampel secara terpisah berdasarkan interval 10 menit dan interval satu jam. |
Permintaan contoh
PUT /api/database
{
"name": "default",
"downsampleRules": {
"rules": [
{
"aggregator": "sum",
"intervals": [
"1m",
"1h"
]
},
{
"aggregator": "max",
"intervals": [
"1m",
"1h"
]
}
]
}
}Deskripsi respons
Jika permintaan berhasil, kode status HTTP 200 dikembalikan.
Kueri aturan pra-pengambilan sampel
Metode yang dapat Anda gunakan untuk mengkueri aturan pra-pengambilan sampel tergantung pada apakah aturan dikonfigurasikan untuk database atau tabel. Anda dapat menggunakan operasi API untuk mengkueri aturan pra-pengambilan sampel yang dikonfigurasikan untuk database dan menggunakan pernyataan SQL untuk mengkueri aturan pra-pengambilan sampel yang dikonfigurasikan untuk tabel.
Kueri aturan pra-pengambilan sampel yang dikonfigurasikan untuk tabel menggunakan pernyataan SQL
Contoh
Kueri semua aturan pra-pengambilan sampel yang dikonfigurasikan untuk semua tabel dalam database.
SHOW PREDOWNSAMPLES;Kueri semua aturan pra-pengambilan sampel yang dikonfigurasikan untuk tabel bernama sensor.
SHOW PREDOWNSAMPLES ON sensor;
Referensi sintaksis
Kueri aturan pra-pengambilan sampel yang dikonfigurasikan untuk database menggunakan operasi API
Jalur permintaan dan metode
Jalur permintaan | Metode permintaan | Deskripsi |
/api/database | GET | Kueri aturan pra-pengambilan sampel yang dikonfigurasikan untuk database. |
Respons contoh
[{
"name": "default",
"downsampleRules": {
"rules": [
{
"aggregator": "sum",
"intervals": [
"1m",
"1h"
]
},
{
"aggregator": "max",
"intervals": [
"1m",
"1h"
]
}
]
}
}]Deskripsi respons
Jika permintaan berhasil, kode status HTTP 204 dikembalikan.
Hapus aturan pra-pengambilan sampel
Metode yang dapat Anda gunakan untuk menghapus aturan pra-pengambilan sampel tergantung pada apakah aturan dikonfigurasikan untuk database atau tabel. Anda dapat menggunakan operasi API untuk menghapus aturan pra-pengambilan sampel yang dikonfigurasikan untuk database dan menggunakan pernyataan SQL untuk menghapus aturan pra-pengambilan sampel yang dikonfigurasikan untuk tabel.
Setelah Anda menghapus aturan pra-pengambilan sampel, data yang telah di-pra-pengambilan sampel berdasarkan aturan tersebut tidak langsung dihapus. Namun, data tersebut tidak dikembalikan saat Anda mengkueri data pra-pengambilan sampel. Data pra-pengambilan sampel secara otomatis dihapus setelah kedaluwarsa.
Hapus aturan pra-pengambilan sampel yang dikonfigurasikan untuk tabel menggunakan pernyataan SQL
Contoh
DROP PREDOWNSAMPLE `1h` AGGREGATORS (`sum`, `max`) ON sensor;Referensi sintaksis
Hapus aturan pra-pengambilan sampel yang dikonfigurasikan untuk database menggunakan operasi API
Jalur permintaan, metode permintaan, dan parameter permintaan yang perlu Anda konfigurasikan untuk menghapus aturan pra-pengambilan sampel untuk database sama dengan saat Anda membuat aturan pra-pengambilan sampel untuk database. Namun, Anda perlu mengatur bidang downsampleRules menjadi kosong. Kode status HTTP yang dikembalikan dalam respons juga sama dengan saat Anda membuat aturan pra-pengambilan sampel untuk database. Untuk informasi lebih lanjut, lihat Buat Aturan Pra-pengambilan Sampel untuk Database Menggunakan Operasi API.
Permintaan contoh
PUT /api/database
{
"name": "default",
"downsampleRules": {
}
}Kueri data pra-pengambilan sampel
Aturan pencocokan untuk data pra-pengambilan sampel
Jika aturan pra-pengambilan sampel dikonfigurasikan untuk database dan tabel dalam database pada saat yang sama, aturan yang dikonfigurasikan untuk tabel berlaku dalam kueri pra-pengambilan sampel.
Jika interval pengambilan sampel yang ditentukan dalam kueri tidak persis cocok dengan interval data pra-pengambilan sampel, data pra-pengambilan sampel yang interval pra-pengambilan sampelnya paling cocok dengan interval pengambilan sampel yang ditentukan akan dikueri. Kami merekomendasikan Anda mengatur interval waktu berdasarkan mana pra-pengambilan sampel dilakukan menjadi 1m, 10m, 1h, atau 1d untuk memenuhi kebutuhan sebagian besar kueri pengambilan sampel.
CatatanJika interval pra-pengambilan sampel dari data pra-pengambilan sampel adalah nilai maksimum yang dapat membagi interval pengambilan sampel yang ditentukan dalam kueri, data pra-pengambilan sampel paling cocok dengan kueri. Misalnya, jika data mentah di-pra-pengambilan sampel berdasarkan 1m, 5m, 8m, dan 15m dan interval pengambilan sampel yang ditentukan dalam kueri adalah 10m, data yang di-pra-pengambilan sampel berdasarkan 5m paling cocok dengan kueri.
Jika tidak ada data pra-pengambilan sampel yang cocok dengan interval pengambilan sampel yang ditentukan dalam kueri, data mentah akan dikueri.
Metode kueri
Anda dapat menggunakan pernyataan SQL atau metode yang kompatibel dengan Time Series Database (TSDB) untuk mengkueri data pra-pengambilan sampel. Kami merekomendasikan Anda menggunakan pernyataan SQL untuk mengkueri data pra-pengambilan sampel. Jika aplikasi Anda dibangun berdasarkan OpenTSDB atau TSDB, Anda dapat menggunakan metode yang kompatibel dengan TSDB untuk mengkueri data pra-pengambilan sampel.
Gunakan pernyataan SQL untuk mengkueri data pra-pengambilan sampel
Secara default, saat Anda mengkueri data pra-pengambilan sampel, data mentah sebelum pra-pengambilan sampel dikueri. Untuk hanya mengkueri data pra-pengambilan sampel, Anda harus menambahkan hint /*+ PREDOWNSAMPLE */ dalam pernyataan kueri.
SELECT /*+ PREDOWNSAMPLE */ sum(temperature) from sensor
WHERE time >= 1619074800000 AND time <= 1619085600000
SAMPLE BY 1h;Gunakan metode yang kompatibel dengan TSDB untuk mengkueri data pra-pengambilan sampel
Anda dapat menggunakan kueri multi-nilai berbasis API, kueri single-nilai berbasis API, dan SDK untuk mengkueri data pra-pengambilan sampel.
Gunakan SDK untuk mengkueri data pra-pengambilan sampel
Saat Anda menggunakan SDK untuk mengkueri data pra-pengambilan sampel, Anda harus mengonfigurasi parameter DownsampleDataSource dalam builder MultiFieldSubQuery.
Contoh
long startTime = 1619074800000L;
long endTime = 1619085600000L;
final String metric = "wind";
final String field = "speed";
MultiFieldSubQueryDetails fieldSubQueryDetails = MultiFieldSubQueryDetails
.field(field)
.aggregator(Aggregator.SUM)
.downsample("1h-sum")
.build();
MultiFieldSubQuery subQuery = MultiFieldSubQuery
.metric(metric)
.fieldsInfo(fieldSubQueryDetails)
// Kueri data pra-pengambilan sampel.
.downsampleDataSource(DownsampleDataSource.DOWNSAMPLE)
.build();
MultiFieldQuery query = MultiFieldQuery.
start(startTime).
end(endTime).
sub(subQuery).
build();
List<MultiFieldQueryResult> result = tsdb.multiFieldQuery(query); Parameter
Anda dapat mengatur parameter DownsampleDataSource ke salah satu nilai berikut:
DOWNSAMPLE: Kueri data pra-pengambilan sampel.
RAW: Kueri data mentah. Nilai default parameter ini adalah RAW.
Untuk informasi lebih lanjut tentang cara menggunakan model data multi-nilai SDK untuk mengkueri data pra-pengambilan sampel, lihat Gunakan Model Data Multi-nilai SDK untuk Membaca Data.
Kueri data pra-pengambilan sampel menggunakan kueri multi-nilai berbasis API
Saat Anda menggunakan kueri multi-nilai berbasis API untuk mengkueri data pra-pengambilan sampel, Anda harus menambahkan parameter downsampleSource dan mengaturnya ke downsample. Untuk informasi lebih lanjut, lihat Kueri Titik Data Multivariat.
Jalur Permintaan dan Metode
Jalur permintaan | Metode permintaan | Deskripsi |
/api/mquery | GET | Kueri data pra-pengambilan sampel. |
Parameter Permintaan
Parameter | Diperlukan | Deskripsi | Contoh |
downsampleSource | Tidak | Sumber data yang dikueri. Nilai valid:
| downsample |
Permintaan Contoh
POST /api/mquery
{
"start": 1346846400000,
"end": 1346846402000,
"queries": [
{
"downsampleDataSource" : "downsample",
"metric": "wind",
"fields" : [
{
"field" : "speed",
"aggregator" : "none",
"downsample" : "1h-sum"
}
],
"tags":{
"sensor":"IOTE_8859_0002"
}
}
]
}Praktik terbaik untuk pra-pengambilan sampel
Pra-pengambilan sampel untuk data yang diambil sampel pada interval detik
Untuk data yang diambil sampel pada interval detik, kami merekomendasikan Anda mengonfigurasi aturan pra-pengambilan sampel berdasarkan interval satu menit, satu jam, dan satu hari.
Contoh aturan pra-pengambilan sampel
Konfigurasikan aturan pra-pengambilan sampel di mana fungsi agregat sum, count, min, dan max ditentukan berdasarkan interval satu menit, satu jam, dan satu hari.
CREATE PREDOWNSAMPLE `1m` AGGREGATORS (`sum`, `count`, `min`, `max`) ON sensor;
CREATE PREDOWNSAMPLE `1h` AGGREGATORS (`sum`, `count`, `min`, `max`) ON sensor;
CREATE PREDOWNSAMPLE `1d` AGGREGATORS (`sum`, `count`, `min`, `max`) ON sensor;Contoh kueri pra-pengambilan sampel
Lakukan kueri pengambilan sampel pada rasio pengambilan sampel menit apa pun menggunakan aturan pra-pengambilan sampel yang dikonfigurasikan berdasarkan interval satu menit.
SELECT /*+ PREDOWNSAMPLE */ sum(temperature), max(temperature) FROM sensor WHERE time >= 1619074800000 AND time <= 1619085600000 SAMPLE BY <N>m;Lakukan kueri pengambilan sampel pada rasio pengambilan sampel jam apa pun menggunakan aturan pra-pengambilan sampel yang dikonfigurasikan berdasarkan interval satu jam.
SELECT /*+ PREDOWNSAMPLE */ sum(temperature), max(temperature) FROM sensor WHERE time >= 1619074800000 AND time <= 1619085600000 SAMPLE BY <N>h;Lakukan kueri pengambilan sampel pada rasio pengambilan sampel hari apa pun menggunakan aturan pra-pengambilan sampel yang dikonfigurasikan berdasarkan interval satu hari.
SELECT /*+ PREDOWNSAMPLE */ sum(temperature), max(temperature) FROM sensor WHERE time >= 1619074800000 AND time <= 1619600400000 SAMPLE BY <N>d;
Pra-pengambilan sampel untuk data yang diambil sampel pada interval menit
Untuk data yang diambil sampel pada interval menit, kami merekomendasikan Anda mengonfigurasi aturan pra-pengambilan sampel berdasarkan interval satu jam dan satu hari untuk melakukan kueri pengambilan sampel pada rasio pengambilan sampel jam atau hari apa pun.
Contoh aturan pra-pengambilan sampel
Konfigurasikan aturan pra-pengambilan sampel di mana fungsi agregat sum, count, min, dan max ditentukan berdasarkan interval satu jam dan satu hari.
CREATE PREDOWNSAMPLE `1h` AGGREGATORS (`sum`, `count`, `min`, `max`) ON sensor;
CREATE PREDOWNSAMPLE `1d` AGGREGATORS (`sum`, `count`, `min`, `max`) ON sensor;Contoh kueri pra-pengambilan sampel
Lakukan kueri pengambilan sampel pada rasio pengambilan sampel jam apa pun menggunakan aturan pra-pengambilan sampel yang dikonfigurasikan berdasarkan interval satu jam.
SELECT /*+ PREDOWNSAMPLE */ sum(temperature), max(temperature) FROM sensor WHERE time >= 1619074800000 AND time <= 1619085600000 SAMPLE BY <N>h;Lakukan kueri pengambilan sampel pada rasio pengambilan sampel hari apa pun menggunakan aturan pra-pengambilan sampel yang dikonfigurasikan berdasarkan interval satu hari.
SELECT /*+ PREDOWNSAMPLE */ sum(temperature), max(temperature) FROM sensor WHERE time >= 1619074800000 AND time <= 1619600400000 SAMPLE BY <N>d;