InfluxDB
TidsserieEn specialbygget tidsserie-database optimeret til højhastighedsskrivninger og effektive tidsbaserede forespørgsler.
Beskrivelse
InfluxDB er den mest populære open source tidsserie-database, specifikt designet til metrikker, hændelser og analysedata der har tidsstempler. I modsætning til generelle databaser er InfluxDB optimeret til arbejdsbyrder hvor data konstant kommer ind i høj hastighed og forespørgsler primært er tidsbaserede. Data organiseres i measurements (lignende tabeller), tags (indekserede metadata), fields (faktiske værdier) og tidsstempler. Tags er automatisk indekseret for hurtig forespørgsel, mens fields ikke er. InfluxDB's lagringsmotor bruger Time-Structured Merge Tree (TSM), som komprimerer data effektivt og gør interval-forespørgsler ekstremt hurtige. Databasen har indbyggede opbevaringspolitikker (automatisk sletning af gamle data), kontinuerlige forespørgsler (auto-aggregering) og downsampling. InfluxQL er forespørgselssproget, som ligner SQL men med tidsseriespecifik funktionalitet. InfluxDB 2.0 introducerede Flux, et mere kraftfuldt funktionelt forespørgselssprog. Den bruges massivt til overvågning, IoT-sensordata, applikationsmetrikker og DevOps-observerbarhed.
Features
- •Specialbygget til tidsseriedata
- •Høj skrivegennemstrømning
- •Automatiske dataopbevaringspolitikker
- •Kontinuerlige forespørgsler til downsampling
- •Indbygget HTTP API
- •InfluxQL og Flux forespørgselssprog
- •Effektiv komprimering (10-100x)
- •Kapacitor til alarmer
Query Eksempel
-- InfluxDB InfluxQL (SQL-like)
-- Indsæt data (line protocol via HTTP eller CLI)
INSERT cpu,host=server01,region=eu-west value=64.3 1609459200000000000
INSERT cpu,host=server01,region=eu-west value=72.1 1609459260000000000
INSERT memory,host=server01,region=eu-west used=8.2,total=16.0 1609459200000000000
-- SELECT basics
SELECT * FROM cpu WHERE time > now() - 1h
-- Aggregations
SELECT MEAN(value) FROM cpu
WHERE time > now() - 1h
GROUP BY time(5m), host
-- Multiple fields
SELECT used, total, (used/total)*100 AS usage_percent
FROM memory
WHERE time > now() - 24h
-- Window functions
SELECT DERIVATIVE(MEAN(value), 1s)
FROM cpu
WHERE time > now() - 1h
GROUP BY time(1m)
-- SHOW kommandoer
SHOW MEASUREMENTS
SHOW TAG KEYS FROM cpu
SHOW TAG VALUES FROM cpu WITH KEY = "host"
SHOW FIELD KEYS FROM cpu
-- Retention policy
CREATE RETENTION POLICY "one_week" ON "mydb"
DURATION 7d
REPLICATION 1
DEFAULT
-- Continuous query (auto-aggregation)
CREATE CONTINUOUS QUERY "cpu_mean_5m" ON "mydb"
BEGIN
SELECT MEAN(value) AS mean_value
INTO "cpu_mean_5m"
FROM "cpu"
GROUP BY time(5m), *
END
-- Flux query language (InfluxDB 2.0+)
from(bucket: "metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu")
|> filter(fn: (r) => r.host == "server01")
|> aggregateWindow(every: 5m, fn: mean)
|> yield(name: "mean")
-- JavaScript client eksempel
const { InfluxDB, Point } = require('@influxdata/influxdb-client');
const client = new InfluxDB({ url: 'http://localhost:8086', token: 'mytoken' });
const writeApi = client.getWriteApi('myorg', 'mybucket');
// Write data
const point = new Point('cpu')
.tag('host', 'server01')
.tag('region', 'eu-west')
.floatField('value', 64.3);
writeApi.writePoint(point);
await writeApi.close();
// Query data
const queryApi = client.getQueryApi('myorg');
const query = `from(bucket: "mybucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu")`;
for await (const { values, tableMeta } of queryApi.iterateRows(query)) {
console.log(values);
}Anvendelsesområder
- •Server- og applikationsovervågning (metrikker)
- •IoT-sensordataindsamling
- •Realtidsanalyse-dashboards
- •DevOps-observerbarhed (Prometheus-alternativ)
- •Finansielle tick-data
Fordele
- ✓Ekstremt hurtig til tidsserie-skrivninger
- ✓Fremragende datakomprimering
- ✓Indbyggede opbevaringspolitikker
- ✓SQL-lignende forespørgselssprog (InfluxQL)
- ✓God integration med Grafana
Ulemper
- ✗Ikke optimal for ikke-tidsseriedata
- ✗Clustering kun i Enterprise-version
- ✗Begrænset UPDATE og DELETE support
- ✗Hukommelsesintensiv ved stor kardinalitet
- ✗Skemadesign kræver forståelse af tags vs fields
Bedst til
- →Overvågning og metrikindsamling (Prometheus-alternativ)
- →IoT-sensordata med høj frekvens
- →Application Performance Monitoring (APM)
- →Realtidsanalyser på streamingdata
- →DevOps-observerbarhedsstakke
Ikke anbefalet til
- ⚠Transaktionelle arbejdsbyrder (OLTP)
- ⚠Komplekse joins og relationelle forespørgsler
- ⚠Hyppige opdateringer af historiske data
- ⚠Dokumentlagring
- ⚠Data uden tidsstempler