Untuk kemampuan serupa dengan Amazon Timestream LiveAnalytics, pertimbangkan Amazon Timestream untuk InfluxDB. Ini menawarkan konsumsi data yang disederhanakan dan waktu respons kueri milidetik satu digit untuk analitik waktu nyata. Pelajari lebih lanjut di sini.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Meminta data dari Timestream untuk InfluxDB 3
Amazon TimeStream untuk InfluxDB 3 menyediakan beberapa kueri APIs dan protokol untuk mengambil data deret waktu Anda. Platform ini mendukung bahasa kueri SQL dan InfluxQL melalui protokol HTTP dan Flight (gRPC), menawarkan fleksibilitas untuk berbagai kasus penggunaan dan preferensi klien.
Ikhtisar metode kueri
InfluxDB 3 mendukung metode query berikut:
-
API HTTP v3 asli - kueri SQL dan InfluxQL melalui titik akhir REST.
-
influxdb3 CLI - Antarmuka baris perintah untuk kueri interaktif.
-
Flight+GRPC Protocol — Protokol biner berkinerja tinggi untuk pustaka klien.
-
API Kompatibilitas v1 - Kueri InfluxQL lama untuk kompatibilitas mundur.
Menggunakan API kueri HTTP v3
API v3 menyediakan titik akhir khusus untuk kueri SQL dan InfluxQL dengan dukungan untuk metode GET dan POST.
Kueri SQL () /api/v3/query_sql
DAPATKAN contoh permintaan:
curl --get "https://your-cluster-endpoint:8086/api/v3/query_sql" \ --header "Authorization: Bearer YOUR_TOKEN" \ --data-urlencode "db=DATABASE_NAME" \ --data-urlencode "q=SELECT * FROM home WHERE time >= now() - INTERVAL '1 day'"
Contoh permintaan POST (untuk kueri kompleks):
curl "https://your-cluster-endpoint:8086/api/v3/query_sql" \ --header "Authorization: Bearer YOUR_TOKEN" \ --json '{ "db": "DATABASE_NAME", "q": "SELECT * FROM home WHERE room = '\''Kitchen'\'' AND temp > 20", "format": "jsonl" }'
kueri InfluxQL () /api/v3/query_influxql
Untuk kueri InfluxQL lakukan hal berikut:
curl --get "https://your-cluster-endpoint:8086/api/v3/query_influxql" \ --header "Authorization: Bearer YOUR_TOKEN" \ --data-urlencode "db=DATABASE_NAME" \ --data-urlencode "q=SELECT mean(temp) FROM home WHERE time >= now() - 1d GROUP BY room"
Parameter kueri
Anda dapat menggunakan parameter kueri berikut:
| Parameter | Deskripsi | Diperlukan |
|---|---|---|
db
|
Nama basis data | Ya |
q
|
String kueri (SQL atau InfluxQL) | Ya |
format
|
Format respons (json, jsonl, csv, cantik, parket) | Tidak (default: json) |
params
|
Parameter untuk kueri berparameter | Tidak |
Menggunakan CLI Influxdb3
Antarmuka baris perintah InfluxDB 3 (CLI) dipanggil dengan perintah. influxdb3 Ini menyediakan cara interaktif untuk menanyakan data Anda dengan dukungan untuk beberapa format output.
Berikut ini menunjukkan query dasar:
influxdb3 query \ --host "your-cluster-endpoint:8086" \ --token "YOUR_TOKEN" \ --database "DATABASE_NAME" \ "SELECT * FROM home WHERE time >= now() - INTERVAL '1 day'"
Berikut ini menunjukkan query dengan format output yang berbeda:
# JSON output influxdb3 query \ --database "DATABASE_NAME" \ --format json \ "SELECT * FROM home LIMIT 10" # CSV output influxdb3 query \ --database "DATABASE_NAME" \ --format csv \ "SELECT * FROM home LIMIT 10" # Parquet file output influxdb3 query \ --database "DATABASE_NAME" \ --format parquet \ --output results.parquet \ "SELECT * FROM home"
Format output berikut didukung:
-
cantik (default) - Format tabel yang dapat dibaca manusia.
-
json - Array JSON standar.
-
jsonl - JSON Lines (ramah streaming).
-
csv - Nilai yang dipisahkan koma.
-
parket — Format kolom biner (membutuhkan output file).
Menggunakan API kompatibilitas v1
Untuk kueri InfluxQL lama, gunakan titik akhir: /query
curl --get "https://your-cluster-endpoint:8086/query" \ --header "Authorization: Bearer YOUR_TOKEN" \ --data-urlencode "db=DATABASE_NAME" \ --data-urlencode "q=SELECT * FROM home" \ --data-urlencode "epoch=ms"
Opsi otentikasi untuk v3 HTTP Query API
-
Token pembawa:
Authorization: Bearer TOKEN -
Autentikasi dasar:
--user "any:TOKEN" -
Parameter kueri:
?p=TOKEN
Format respons untuk API Kueri HTTP v3
-
JSON (default)
-
CSV (dengan
Accept: application/csvheader)
Contoh Query SQL
Berikut ini menunjukkan query dasar:
-- Select specific fields with time filter SELECT temp, humidity, room FROM home WHERE time >= now() - INTERVAL '7 days' AND room = 'Kitchen' ORDER BY time DESC -- Show all tables in database SHOW TABLES -- Show columns in a table SHOW COLUMNS FROM home
Berikut ini menunjukkan kueri agregasi:
-- Aggregate by tags SELECT room, AVG(temp) as avg_temp, MAX(humidity) as max_humidity FROM home WHERE time >= now() - INTERVAL '24 hours' GROUP BY room -- Time-based aggregation using DATE_BIN SELECT DATE_BIN(INTERVAL '1 hour', time) as time, AVG(temp) as avg_temp, COUNT(*) as reading_count FROM home GROUP BY 1 ORDER BY time DESC
Berikut ini menunjukkan fitur SQL tingkat lanjut:
-- Parameterized queries (via API) SELECT * FROM home WHERE room = $room AND temp > $min_temp AND time >= $start_time -- Gap filling with interpolation SELECT date_bin_gapfill(INTERVAL '5 minutes', time) as time, room, interpolate(avg(temp)) as temp FROM home WHERE time >= '2025-01-01T00:00:00Z' AND time <= '2025-01-01T12:00:00Z' GROUP BY 1, room -- Type casting SELECT temp::INTEGER as temp_int, CAST(humidity AS VARCHAR) as humidity_str FROM home
Berikut ini menunjukkan contoh query InfluxQL:
-- Basic query with time filter SELECT * FROM home WHERE time >= now() - 1d -- Aggregation with GROUP BY time SELECT MEAN(temp), MAX(humidity) FROM home WHERE time >= now() - 7d GROUP BY time(1h), room -- Using selector functions SELECT FIRST(temp), LAST(temp) FROM home WHERE time >= now() - 1h GROUP BY room
Berikut ini menunjukkan bagaimana untuk query tabel sistem untuk memahami struktur database Anda dan memantau kinerja:
-- View all tables with schema information SELECT * FROM information_schema.tables -- View column details for a specific table SELECT * FROM information_schema.columns WHERE table_name = 'home' -- Monitor recent queries SELECT * FROM system.queries ORDER BY issue_time DESC LIMIT 10 -- Check cache configurations SELECT * FROM system.last_caches SELECT * FROM system.distinct_caches
Praktik terbaik kinerja kueri
-
Gunakan Filter Waktu: Selalu sertakan filter rentang waktu untuk membatasi data yang dipindai.
-
Indeks Leverage: Desain kueri untuk menggunakan filter tag secara efektif.
-
Pilih Format Output yang Sesuai:
-
Gunakan jsonl untuk streaming hasil besar.
-
Gunakan parket untuk ekspor data dan analitik.
-
Gunakan csv untuk kompatibilitas spreadsheet.
-
-
Optimalkan Agregasi: Gunakan DATE_BIN untuk pengelompokan berbasis waktu.
-
Gunakan Parameterized Query: Mencegah serangan injeksi dan meningkatkan penggunaan kembali.
-
Monitor Kinerja Kueri: Periksa tabel system.queries untuk kueri lambat.
Dukungan kueri pustaka klien
Pustaka klien InfluxDB 3 menggunakan protokol Flight+GRPC untuk kinerja optimal. Kode Python berikut menunjukkan contoh ini.
from influxdb3 import InfluxDBClient3 client = InfluxDBClient3( host="your-cluster-endpoint:8086", token="YOUR_TOKEN", database="DATABASE_NAME" ) # SQL query sql_result = client.query("SELECT * FROM home WHERE room = 'Kitchen'") # InfluxQL query influxql_result = client.query( "SELECT MEAN(temp) FROM home WHERE time >= now() - 1h GROUP BY room", language="influxql" )
Bandingkan kemampuan kueri SQL dan InfluxQL
Tabel berikut membandingkan kemampuan query SQL dan InfluxQL:
| Fitur | SQL | InfluxQL |
|---|---|---|
| Bergabung | Didukung | Tidak Support |
| Fungsi Jendela | Dukungan penuh | Terbatas |
| Subkueri | Didukung | Tidak Support |
| Fungsi Waktu |
DATE_BIN, INTERVAL
|
time()pengelompokan |
| Kueri Parameterisasi | Dukungan asli | Tidak didukung |
| Pengisian Celah |
date_bin_gapfill()
|
Fungsi fill() |
Dengan memahami kemampuan kueri ini dan memilih metode yang sesuai untuk kasus penggunaan Anda, Anda dapat secara efisien mengambil dan menganalisis data deret waktu Anda dari Timestream untuk InfluxDB 3.
Keuntungan SQL:
-
Implementasi SQL berfitur lengkap dengan dukungan untuk kueri kompleks.
-
Support untuk fungsi gabungan, serikat pekerja, dan jendela.
-
Sintaks familiar untuk pengguna dengan latar belakang SQL.
-
Kemampuan analitis yang lebih luas.
Keuntungan InfluxQL:
-
Dirancang khusus untuk data deret waktu.
-
Sintaks yang lebih sederhana untuk operasi deret waktu umum.
-
Kompatibilitas mundur untuk pengguna yang bermigrasi dari InfluxDB v1.
-
Fungsi deret waktu khusus.
Fitur pengoptimalan kueri
InfluxDB 3 menawarkan beberapa fitur pengoptimalan untuk meningkatkan kinerja kueri untuk kasus penggunaan tertentu. Fitur-fitur ini memanfaatkan caching dalam memori dan strategi pengindeksan khusus untuk memberikan waktu respons sub-milidetik untuk pola data yang sering diakses.
Cache Nilai Terakhir (LVC)
Last Value Cache (LVC) menyimpan nilai N terbaru untuk bidang tertentu dalam memori, memungkinkan waktu respons sub-10ms untuk kueri yang memerlukan titik data terbaru. Fitur ini tersedia dalam edisi Core dan Enterprise.
Bagaimana LVC bekerja
LVC mempertahankan tabel dalam memori dari nilai terbaru untuk setiap kombinasi unik kolom kunci (biasanya tag). Misalnya, dengan data sensor:
Table: home ├── Tags: room, wall └── Fields: temp, humidity, co LVC Configuration: - Key columns: room, wall - Value columns: temp, humidity, co - Count: 4 (last 4 values)
Cache menyimpan:
| kamar | dinding | suhu | kelembaban | co | waktu |
|---|---|---|---|---|---|
| Dapur | timur | 22.7 | 36,5 | 26 | 2025-01-26T 20:00:00 Z |
| Dapur | timur | 22.7 | 36.0 | 9 | 2025-01-26T 17:00:00 Z |
| Dapur | timur | 22.7 | 36.2 | 3 | 2025-01-26T 15:00:00 Z |
| Dapur | timur | 22.7 | 36.1 | 0 | 2025-01-26T 10:00:00 Z |
| Ruang Tamu | utara | 22.2 | 36,4 | 17 | 2025-01-26T 20:00:00 Z |
| ... | ... | ... | ... | ... | ... |
Buat LVC
Gunakan perintah berikut untuk membuat LVC:
influxdb3 create last_cache \ --database DATABASE_NAME \ --token YOUR_TOKEN \ --table home \ --key-columns room,wall \ --value-columns temp,hum,co \ --count 5 \ --ttl 30mins \ homeLastCache
Kueri LVC
Gunakan perintah berikut untuk query LVC:
-- Query the last cached values SELECT * FROM last_cache('home', 'homeLastCache') -- Filter specific series SELECT * FROM last_cache('home', 'homeLastCache') WHERE room = 'Kitchen'
Praktik terbaik LVC
-
Kelola Kardinalitas: Hanya sertakan tag penting sebagai kolom kunci untuk meminimalkan penggunaan memori.
-
Optimalkan Jumlah Nilai: Keseimbangan antara kebutuhan kueri dan konsumsi memori.
-
Pertimbangkan TTL: Set sesuai time-to-live untuk entri cache.
-
Memori Monitor: Ukuran cache = (key_column_cardinality × hitungan × value_columns).
Cache Nilai Berbeda (DVC)
Distinct Value Cache (DVC) mempertahankan nilai unik untuk kolom tertentu dalam memori, mempercepat kueri metadata hingga kurang dari 30 ms waktu respons. Tersedia dalam edisi Core dan Enterprise.
Cara kerja DVC
DVC menyimpan semua kombinasi nilai unik untuk kolom tertentu, cocok untuk kueri yang perlu mencantumkan nilai tag atau metadata yang tersedia.
Contoh cache untuk data lokasi:
| negara | kabupaten | kota |
|---|---|---|
| Austria | Salzburg | Salzburg |
| Austria | Wina | Wina |
| Belgium | Antwerp | Antwerp |
| Belgium | Flanders Barat | Bruges |
| Czech Republic | Praha | Praha |
Buat DVC
Gunakan perintah berikut untuk membuat DVC:
influxdb3 create distinct_cache \ --database DATABASE_NAME \ --token YOUR_TOKEN \ --table wind_data \ --columns country,county,city \ --max-cardinality 10000 \ --max-age 24h \ windDistinctCache
Kueri DVC
Gunakan perintah berikut untuk menanyakan DVC:
-- Get all distinct values SELECT * FROM distinct_cache('wind_data', 'windDistinctCache') -- Get distinct countries SELECT DISTINCT country FROM distinct_cache('wind_data', 'windDistinctCache')
Praktik terbaik DVC
-
Tetapkan Batas Kardinalitas: Tentukan kombinasi nilai unik maksimum untuk mengontrol memori.
-
Konfigurasikan Usia Maks: Hapus nilai basi secara otomatis.
-
Kolom Strategis Cache: Fokus pada kolom yang sering digunakan dalam kueri metadata.
-
Ukuran Cache Monitor: Kardinalitas yang lebih tinggi berarti lebih banyak memori diperlukan.
Indeks file hanya tersedia di Enterprise
Hanya tersedia dalam Enterprise Edition. Indeks file memungkinkan penyesuaian bagaimana data diindeks dalam penyimpanan, secara signifikan meningkatkan kinerja kueri seri tunggal.
Default vs. pengindeksan khusus
Pengindeksan Default: InfluxDB mengindeks pada semua tag plus waktu.
Pengindeksan Kustom: Indeks hanya pada kolom yang relevan dengan kueri Anda.
Contoh optimasi:
Schema columns: country, state_province, county, city, postal_code Query patterns: Always filter by country, state_province, city Custom index: time, country, state_province, city (skip county, postal_code)
Berikut ini menunjukkan cara membuat indeks file kustom
influxdb3 create file_index \ --database DATABASE_NAME \ --token YOUR_TOKEN \ --table wind_data \ country,state_province,city
Berikut ini menunjukkan cara menghapus indeks file:
influxdb3 delete file_index \ --database DATABASE_NAME \ --token YOUR_TOKEN \ --table wind_data
Pertimbangan indeks file
-
Diperlukan Pemadatan: Indeks dibangun selama pemadatan data (gen2 +).
-
Hanya Kolom String: Dapat mengindeks tag dan bidang string.
-
Analisis Pola Kueri: Analisis beban kerja Anda sebelum membuat indeks khusus.
-
Optimasi Seri Tunggal: Paling bermanfaat untuk kueri yang menargetkan seri tertentu.
Mengelola informasi cache
Lihat konfigurasi cache dan statistik menggunakan tabel sistem:
-- View Last Value Caches SELECT * FROM system.last_caches -- View Distinct Value Caches SELECT * FROM system.distinct_caches -- Check cache memory usage SELECT cache_name, table_name, key_columns, value_count, memory_size_bytes FROM system.last_caches
Strategi pengoptimalan kinerja
Pilih fitur pengoptimalan yang tepat berdasarkan pola kueri Anda:
| Pola Kueri | Fitur yang Direkomendasikan | Kinerja yang Diharapkan |
|---|---|---|
| Nilai terbaru per seri | Cache Nilai Terakhir | <10ms |
| Nilai tag yang tersedia | Cache Nilai Berbeda | <30ms |
| Kueri seri tunggal | Indeks File (Perusahaan) | Peningkatan yang signifikan |
| Agregasi rentang waktu | Indeks standar | Kinerja dasar |
Pertimbangan memori dan sumber daya
Rumus memori cache:
-
LVC: memori = key_cardinality × value_count × value_columns × data_size
-
DVC: memori = distinct_combination × column_count × data_size
Praktik terbaik:
-
Mulailah dengan cache kecil dan pantau penggunaan memori
-
Gunakan pengaturan TTL untuk membatasi pertumbuhan cache
-
Hanya cache data yang sering ditanyakan
-
Pantau tingkat hit cache melalui tabel sistem
-
Untuk Perusahaan: Gabungkan cache dengan indeks file khusus untuk kinerja optimal
Dengan memanfaatkan fitur pengoptimalan ini secara tepat, Anda dapat mencapai peningkatan kinerja yang signifikan untuk pola kueri tertentu sambil mengelola konsumsi sumber daya secara efektif.