sql >> Databáze >  >> RDS >> Database

Úvod do databází časových řad

Dávno pryč jsou časy, kdy „databází“ byl jediný systém správy relačních databází, obvykle na nejvýkonnějším serveru v datovém centru. Taková databáze obsluhovala všechny druhy požadavků - OLTP, OLAP, cokoliv obchodního vyžadovalo. V dnešní době běží databáze na komoditním hardwaru, jsou také sofistikovanější z hlediska vysoké dostupnosti a specializované na konkrétní typ provozu. Specializace jim umožňuje dosahovat mnohem lepšího výkonu – vše je optimalizováno pro práci s konkrétním druhem dat:optimalizátor, úložiště, dokonce i jazyk nemusí být SQL, jako tomu bývalo v minulosti. Může být založen na SQL s některými rozšířeními umožňujícími efektivnější manipulaci s daty, nebo to může být také něco zcela nového, vytvořeného od začátku.

Dnes máme analytické, sloupcové databáze jako ClickHouse nebo MariaDB AX, máme velké datové platformy jako Hadoop, řešení NoSQL jako MongoDB nebo Cassandra, datová úložiště klíč-hodnota jako Redis. Máme také databáze Time-Series jako Prometheus nebo TimeScaleDB. Na to se zaměříme v tomto blogovém příspěvku. Databáze Time-Series – co to jsou a proč byste chtěli ve svém prostředí používat další datové úložiště.

K čemu jsou databáze časových řad?

Jak název napovídá, databáze časových řad jsou navrženy tak, aby ukládaly data, která se mění s časem. Může se jednat o jakýkoli druh dat, která byla shromážděna v průběhu času. Mohou to být metriky shromážděné z některých systémů – všechny systémy trendů jsou příklady dat časové řady.

Kdykoli se podíváte na řídicí panely v ClusterControl, ve skutečnosti se díváte na vizuální reprezentaci dat časových řad uložených v Prometheus, databázi časových řad.

Data časových řad nejsou omezena na databázové metriky. Všechno může být metrikou. Jak se v průběhu času mění tok lidí, kteří vstupují do nákupního centra? Jak se mění doprava ve městě? Jak se mění využití MHD během dne? Tok vody v potoce nebo řece. Množství energie vyrobené vodní rostlinou. To vše a vše ostatní, co lze měřit v čase, je příkladem dat časové řady. Taková data můžete dotazovat, vykreslovat, analyzovat, abyste našli korelace mezi různými metrikami.

Jak jsou data strukturována v databázi časových řad?

Jak si dokážete představit, nejdůležitějším údajem v databázi časových řad je čas. Existují dva hlavní způsoby ukládání dat. Za prvé, něco, co připomíná úložiště párů klíč–hodnota, může vypadat takto:

Časové razítko Metrika 1
28.03.2019 00:00:01 2356
2019-03-28 00:00:02 6874
2019-03-28 00:00:03 3245
2019-03-28 00:00:04 2340

Stručně řečeno, pro každé časové razítko máme určitou hodnotu pro naši metriku.

Další příklad bude zahrnovat více metrik. Místo ukládání každé metriky do samostatné tabulky nebo kolekce je možné uložit více metrik vedle sebe.

Časové razítko Metrika 1 Metrika 2 Metrika 3 Metrika 4 Metrika 5
28.03.2019 00:00:01 765 873 124 98 0
2019-03-28 00:00:02 5876 765 872 7864 634
2019-03-28 00:00:03 234 7679 98 65 34
2019-03-28 00:00:04 345 3 598 0 7345

Tato datová struktura pomáhá efektivněji dotazovat data, když spolu metriky souvisí. Namísto čtení více tabulek a jejich spojování, abyste získali všechny metriky dohromady, stačí přečíst jednu jedinou tabulku a všechna data jsou připravena ke zpracování a prezentaci.

Možná se ptáte – co je tady vlastně nového? Jak se to liší od běžné tabulky v MySQL nebo jiné relační databázi? Návrh tabulky je docela podobný, ale existují významné rozdíly v pracovní zátěži, která, když je datové úložiště navrženo tak, aby je využívalo, může výrazně zlepšit výkon.

Data časových řad se obvykle pouze připojují – je docela nepravděpodobné, že budete aktualizovat stará data. Obvykle nemažete konkrétní řádky, na druhou stranu můžete chtít nějakou agregaci dat v průběhu času. To, když se to vezme v úvahu při navrhování interních databází, bude mít významný rozdíl oproti „standardním“ relačním (a ne také relačním) databázím, které mají sloužit typu provozu Online Transaction Processing:nejdůležitější je schopnost konzistentně ukládat (jngest) velké množství dat, která časem přicházejí.

K ukládání dat časových řad je možné použít RDBMS, ale RDBMS pro to není optimalizován. Data a indexy generované na jeho zadní straně mohou být velmi velké a mohou se zpomalit na dotazy. Úložné stroje používané v RDBMS jsou navrženy pro ukládání různých typů dat. Obvykle jsou optimalizovány pro pracovní zátěž Online Transaction Processing, která zahrnuje časté úpravy a mazání dat. Relační databáze také obvykle postrádají specializované funkce a vlastnosti související se zpracováním dat časových řad. Zmínili jsme, že pravděpodobně chcete agregovat data, která jsou starší než určité časové období. Možná budete chtít také snadno spouštět některé statistické funkce na datech časových řad, abyste je vyhladili, určili a porovnali trendy, interpolovali data a mnoho dalšího. Například zde můžete najít některé funkce, které Prometheus zpřístupňuje uživatelům.

Příklady databází časových řad

Na trhu existuje více databází časových řad, takže není možné pokrýt všechny. Přesto bychom rádi uvedli několik příkladů databází časových řad, které možná znáte nebo možná i používáte (vědomě či nevědomě).

InfluxDB

InfluxDB byl vytvořen InfluxData. Je to open source databáze časových řad napsaná v Go. Datové úložiště poskytuje jazyk podobný SQL pro dotazování na data, což vývojářům usnadňuje integraci do jejich aplikací. InfluxDB funguje také jako součást komerční nabídky, která pokrývá celý zásobník navržený tak, aby poskytoval plnohodnotné a vysoce dostupné prostředí pro zpracování časových řad dat.

Prometheus

Prometheus je další open source projekt, který je také napsán v Go. Běžně se používá jako backend pro různé open source nástroje a projekty, například Percona Monitoring and Management. Prometheus je také zvolená databáze časových řad pro ClusterControl.

Prometheus lze nasadit z ClusterControl a používat jej k ukládání časových řad shromážděných na databázových serverech monitorovaných a spravovaných ClusterControl:

Prometheus je široce používán ve světě open source a lze jej celkem snadno integrovat do vašeho stávajícího prostředí pomocí více exportérů.

Nástroj RRD

Toto může být příklad databáze časových řad, kterou mnoho lidí používá, aniž by o tom věděli. RRDtool je velmi oblíbený open source projekt pro ukládání a vizualizaci časových řad dat. Pokud jste někdy používali Cacti, bylo to založeno na RRDtool. Pokud jste navrhli své vlastní řešení, je docela pravděpodobné, že jste také použili RRDtool jako backend pro ukládání dat. V dnešní době již není tak populární jako dříve, ale v letech 2000 - 2010 to byl nejběžnější způsob ukládání časových řad. Zábavný fakt – rané verze ClusterControl toho využívaly.

Časové měřítko

TimeScale je databáze časových řad vyvinutá nad PostgreSQL. Jedná se o rozšíření PostgreSQL, které se při poskytování přístupu k datům spoléhá na základní datové úložiště, což znamená, že přijímá všechna SQL, která můžete chtít použít. Jako rozšíření využívá všechny ostatní funkce a rozšíření PostgreSQL. Můžete kombinovat časové řady a další typy dat, například spojit časové řady a metadata, čímž obohatíte výstup. Můžete také provádět pokročilejší filtrování pomocí JOINů a tabulek bez časových řad. Využití podpory GIS v PostgreSQL TimeScale lze snadno použít při sledování geografických míst v průběhu času. Může také využít všechny možnosti škálování, které PostgreSQL nabízí, včetně replikace.

Časový proud

Amazon Web Services má také nabídku pro databáze časových řad. Timestream byl oznámen poměrně nedávno, v listopadu 2018. Do portfolia AWS přidává další datové úložiště, tentokrát pomáhá uživatelům zpracovávat data časových řad pocházející ze zdrojů, jako jsou zařízení internetu věcí nebo monitorované služby. Lze jej také použít k ukládání metrik odvozených z protokolů vytvořených více službami, což uživatelům umožňuje spouštět na ně analytické dotazy, což pomáhá porozumět vzorcům a podmínkám, za kterých služby fungují.

Timestream, stejně jako většina služeb AWS, poskytuje snadný způsob škálování, pokud by potřeba ukládání a analýzy dat časem narůstala.

Jak vidíte, na trhu je mnoho možností a není se čemu divit. Analýza dat časových řad je v poslední době stále více a více přitahována a stává se pro obchodní operace stále důležitější. Naštěstí vzhledem k velkému množství nabídek, jak open source, tak komerčních, je docela pravděpodobné, že najdete nástroj, který bude vyhovovat vašim potřebám.


  1. Jak správně vložit nový řádek do nvarchar

  2. Jak se připojit k serveru MySQL po instalaci XAMPP na Mac OS

  3. Vraťte řádky, které v SQLite obsahují pouze nealfanumerické znaky

  4. Oracle:Co dělá `(+)` v klauzuli WHERE?