TimescaleDB in 100 Seconds

TimeScaleDB

TimeScaleDB er en open-source database bygget på PostgreSQL, som er optimeret til time-series data og big data applikationer. Den udvider PostgreSQL med funktioner, der er specifikt designet til at håndtere tidsseriedata i stor skala.

Fordele ved Big Data

  1. Automatisk Partitionering: TimeScaleDB partitionerer automatisk data i chunks baseret på tidsintervaller, hvilket gør det effektivt at administrere og forespørge store datasæt.
  2. Forespørgselsydeevne: Optimeret query planning og eksekvering for tidsbaserede operationer, især til aggregeringer og filtrering.
  3. PostgreSQL Kompatibilitet: Opretholder fuld kompatibilitet med PostgreSQL, hvilket tillader brug af alle standard PostgreSQL funktioner og værktøjer.
  4. Skalerbarhed: Kan håndtere milliarder af datapunkter effektivt gennem sin hypertable arkitektur.
  5. Data Retention: Indbyggede værktøjer til håndtering af data retention policies og automatisk data oprydning.

HyperTable

HyperTables er kernefunktionaliteten i TimeScaleDB. De partitionerer automatisk tidsseriedata i chunks baseret på tidsintervaller: https://docs.timescale.com/use-timescale/latest/hypertables/about-hypertables/

image.png

HyperTables giver et transparent abstraktionslag, der gør håndtering af tidsseriedata mere effektiv:

image.png

Oprettelse af en HyperTable

Grundlæggende syntax for at oprette en hypertable:

-- Først oprettes en almindelig tabelCREATE TABLE conditions (
    time        TIMESTAMPTZ       NOT NULL,
    sensor_id   INTEGER           NOT NULL,
    value       DOUBLE PRECISION  NULL
);

-- Konverter den til en hypertableSELECT create_hypertable(
    'conditions',
    by_range('time', INTERVAL '7 days')
);

Centrale Funktioner

Time Bucketing

image.png

time_bucket() er en kraftfuld funktion til tidsbaseret aggregering:

SELECT
    time_bucket('7 days', time) as bucket,
    count(*) as number_of_rows,
    avg(value) as average_value
FROM conditions
GROUP BY bucket;

Continuous Aggregates

TimeScaleDB understøtter automatisk materialiserede views, der løbende opdateres:

CREATE MATERIALIZED VIEW daily_summary
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 day', time) as bucket,
       avg(value) as avg_value,
       count(*) as num_readings
FROM conditions
GROUP BY bucket;

Performance Sammenligning

TimeScaleDB viser betydelige ydelsesforbedringer sammenlignet med almindelige PostgreSQL tabeller, især for:

  1. Tidsinterval forespørgsler
  2. Aggregeringer over tidsperioder
  3. Seneste-værdi forespørgsler
  4. Beregninger med glidende vinduer

For eksempel kan forespørgsler, der beregner glidende gennemsnit eller grupperer data efter tidsintervaller, være op til 10-20 gange hurtigere på hypertables sammenlignet med almindelige tabeller.

Best Practices

  1. Inkluder altid en timestamp kolonne for korrekt tidsserie funktionalitet
  2. Vælg passende chunk intervaller baseret på dit datavolumen og forespørgselsmønstre
  3. Brug time_bucket() til tidsbaserede aggregeringer
  4. Opret indexes på hyppigt forespurgte kolonner
  5. Implementer data retention policies til håndtering af historiske data

Anvendelsesområder

TimeScaleDB er ideel til: