Roserei, Verhandlunge an Depressioun wann Dir mat InfluxDB schafft

Roserei, Verhandlunge an Depressioun wann Dir mat InfluxDB schafft

Wann Dir eng Zäitserie Datebank benotzt (Timeseries db, Wiki) als Haaptlagerung fir e Site mat Statistiken, da kënnt Dir amplaz de Problem ze léisen vill Kappwéi kréien. Ech schaffen un engem Projet deen esou eng Datebank benotzt, an heiansdo huet d'InfluxDB, déi diskutéiert gëtt, komplett onerwaart Iwwerraschungen presentéiert.

Verzichterklärung: Déi opgelëscht Themen gëllen fir InfluxDB Versioun 1.7.4.

Firwat Zäit Serie?

De Projet ass Transaktiounen op verschidde Blockchainen ze verfolgen an Statistiken ze weisen. Speziell kucke mir d'Emissioun an d'Verbrenne vu stabile Mënzen (Wiki). Baséierend op dës Transaktiounen, musst Dir Grafike bauen a Resumétabellen weisen.

Beim Analyse vun Transaktiounen koum eng Iddi: d'InfluxDB Zäitserie Datebank als Haaptlagerung ze benotzen. Transaktioune si Punkten an der Zäit a si passen gutt an den Zäitseriemodell.

D'Aggregatiounsfunktiounen hunn och ganz praktesch ausgesinn - ideal fir Charts mat enger laanger Period ze veraarbecht. De Benotzer brauch en Diagramm fir e Joer, an d'Datebank enthält en Datesaz mat engem Zäitframe vu fënnef Minutten. Et ass sënnlos him all honnertdausend Punkten ze schécken - ausser laanger Veraarbechtung passen se net emol um Bildschierm. Dir kënnt Är eege Implementatioun schreiwen fir den Zäitframe ze erhéijen, oder d'Aggregatiounsfunktiounen benotzen déi an Influx agebaut sinn. Mat hirer Hëllef kënnt Dir Donnéeën vum Dag gruppéieren an déi néideg 365 Punkten schécken.

Et war e bësse konfus datt esou Datenbanken normalerweis benotzt gi fir Metriken ze sammelen. Iwwerwaachung vu Serveren, iot Apparater, alles aus deem Millioune Punkte vun der Form "Flow": [<Zäit> - <metresche Wäert>]. Awer wann d'Datebank gutt mat engem groussen Datefloss funktionnéiert, firwat soll dann e klenge Volumen Problemer verursaachen? Mat dësem vergiessen hu mir InfluxDB op d'Aarbecht geholl.

Wat soss ass bequem an InfluxDB

Nieft de genannten Aggregatiounsfunktiounen gëtt et eng aner grouss Saach - kontinuéierlech Ufroen (Dokter). Dëst ass e Scheduler an d'Datebank gebaut, déi Daten op engem Zäitplang veraarbecht kann. Zum Beispill, all 24 Stonnen kënnt Dir all Rekorder fir den Dag gruppéieren, d'Moyenne berechnen an en neie Punkt an engem aneren Dësch notéieren ouni Är eege Vëloen ze schreiwen.

Et gëtt och Retentiounspolitik (Dokter) - d'Läschen vun Donnéeën no enger bestëmmter Period opsetzen. Et ass nëtzlech wann Dir zum Beispill d'CPU-Laascht fir eng Woch mat Miessunge eemol pro Sekonn späichere musst, awer iwwer eng Distanz vun e puer Méint ass sou Genauegkeet net néideg. An esou enger Situatioun kënnt Dir dëst maachen:

  1. eng kontinuéierlech Ufro erstellen fir Daten an eng aner Tabell ze aggregéieren;
  2. fir den éischten Dësch, definéiert eng Politik fir Metriken ze läschen déi méi al sinn wéi déi selwecht Woch.

An Influx wäert onofhängeg d'Gréisst vun den Donnéeën reduzéieren an onnéideg Saachen läschen.

Iwwer gespäichert Donnéeën

Net vill Daten ginn gespäichert: ongeféier 70 Tausend Transaktiounen an eng aner Millioun Punkte mat Maartinformatioun. Füügt nei Entréen - net méi wéi 3000 Punkten pro Dag. Et ginn och Metriken fir de Site, awer et gëtt wéineg Donnéeën do an no der Retentiounspolitik gi se net méi wéi ee Mount gespäichert.

Problem

Wärend der Entwécklung a spéider Tester vum Service sinn ëmmer méi kritesch Probleemer an der Operatioun vun InfluxDB entstanen.

1. Daten läschen

Et gëtt eng Serie vun Daten mat Transaktiounen:

SELECT time, amount, block, symbol FROM transactions WHERE symbol='USDT'

Resultat:

Roserei, Verhandlunge an Depressioun wann Dir mat InfluxDB schafft

Ech schécken e Kommando fir Daten ze läschen:

DELETE FROM transactions WHERE symbol=’USDT’

Als nächst maachen ech eng Demande fir déi scho geläscht Donnéeën ze kréien. An amplaz vun enger eidel Äntwert gëtt Influx en Deel vun den Donnéeën zréck, déi geläscht solle ginn.

Ech probéieren de ganzen Dësch ze läschen:

DROP MEASUREMENT transactions

Ech kontrolléieren d'Läschen vun der Tabell:

SHOW MEASUREMENTS

Ech gesinn den Dësch net an der Lëscht, awer eng nei Datefro gëtt nach ëmmer déiselwecht Transaktiounen zréck.

De Problem ass mir nëmmen eng Kéier opgetrueden, well de Läschfall en isoléierte Fall war. Awer dëst Verhalen vun der Datebank passt kloer net an de Kader vun der "korrekter" Operatioun. Méi spéit hunn ech et op github fonnt Ticket bal engem Joer iwwer dëst Thema.

Als Resultat huet d'Läschen an duerno d'ganz Datebank gehollef.

2. Schwammen Punkt Zuelen

Mathematesch Berechnungen wann Dir agebaute Funktiounen an InfluxDB benotzt, hunn Genauegkeetsfehler. Net datt dëst eppes ongewéinlech ass, awer et ass désagréabel.

A mengem Fall hunn d'Donnéeën e finanzielle Bestanddeel an ech wéilt se mat héijer Genauegkeet veraarbechten. Dofir plange mir kontinuéierlech Ufroen opzeginn.

3. Kontinuéierlech Ufroen kënnen net op verschidden Zäitzonen ugepasst ginn

De Service huet en Dësch mat deeglechen Transaktiounsstatistiken. Fir all Dag musst Dir all Transaktioune fir deen Dag gruppéieren. Awer den Dag vun all Benotzer fänkt un enger anerer Zäit un, an dofir wäert d'Set vun Transaktiounen anescht sinn. Vun UTC jo 37 Varianten Verréckelung fir déi Dir musst Daten aggregéieren.

An InfluxDB, wann Dir no Zäit gruppéiere kënnt, kënnt Dir zousätzlech eng Verréckelung spezifizéieren, zum Beispill fir Moskau Zäit (UTC+3):

SELECT MEAN("supply") FROM transactions GROUP BY symbol, time(1d, 3h) fill(previous)

Awer d'Resultat vun der Ufro wäert falsch sinn. Aus e puer Grënn fänken d'Donnéeën, déi no Dag gruppéiert sinn, de ganze Wee zréck op 1677 (InfluxDB ënnerstëtzt offiziell eng Zäitspan vun dësem Joer):

Roserei, Verhandlunge an Depressioun wann Dir mat InfluxDB schafft

Fir dëst Problem ëmzegoen, hu mir de Service temporär op UTC+0 ëmgewandelt.

4. Leeschtung

Et gi vill Benchmarks um Internet déi InfluxDB an aner Datenbanken vergläichen. Op den éischte Bléck hunn se ausgesinn wéi Marketingmaterialien, awer elo mengen ech datt et eng Wahrheet an hinnen ass.

Ech soen Iech mäi Fall.

De Service bitt eng API Method déi Statistike fir de leschten Dag zréckginn. Wann Dir Berechnungen ausféiert, freet d'Method d'Datebank dräimol mat de folgenden Ufroen:

SELECT * FROM coins_info WHERE time <= NOW() GROUP BY symbol ORDER BY time DESC LIMIT 1

SELECT * FROM dominance_info ORDER BY time DESC LIMIT 1

SELECT * FROM transactions WHERE time >= NOW() - 24h ORDER BY time DESC

Erklärung:

  1. An der éischter Ufro kréien mir déi lescht Punkte fir all Mënz mat Maartdaten. Aacht Punkte fir aacht Mënzen a mengem Fall.
  2. Déi zweet Demande kritt ee vun den neiste Punkten.
  3. Déi drëtt freet eng Lëscht vun Transaktiounen fir déi lescht XNUMX Stonnen; et kënnen e puer honnert vun hinnen sinn.

Loosst mech klären datt InfluxDB automatesch en Index baut baséiert op Tags an Zäit, wat d'Ufroen beschleunegt. An der éischter Demande Symbol ass e tag.

Ech hunn e Stress Test op dëser API Method lafen. Fir 25 RPS huet de Server eng voll Laascht vu sechs CPUs demonstréiert:

Roserei, Verhandlunge an Depressioun wann Dir mat InfluxDB schafft

Zur selwechter Zäit huet den NodeJs Prozess guer keng Laascht geliwwert.

D'Ausféierungsgeschwindegkeet ass scho vu 7-10 RPS ofgebaut: wann ee Client eng Äntwert an 200 ms kritt hätt, da musse 10 Clienten eng Sekonn waarden. 25 RPS ass d'Limite bei där d'Stabilitéit gelidden huet; 500 Feeler goufen u Clienten zréckginn.

Mat esou Leeschtung ass et onméiglech Influx an eisem Projet ze benotzen. Ausserdeem: an engem Projet wou d'Iwwerwaachung fir vill Clienten demonstréiert muss ginn, kënnen ähnlech Probleemer optrieden an de Metrikserver gëtt iwwerlaascht.

Konklusioun

Déi wichtegst Conclusioun aus der Erfarung ass datt Dir eng onbekannt Technologie net ouni genuch Analyse an e Projet kënnt huelen. Eng einfach Screening vun oppenen Themen op Github kéint Informatioun ubidden fir ze vermeiden datt InfluxDB als Haaptdatengeschäft gewielt gëtt.

InfluxDB sollt gutt passen fir d'Aufgabe vu mengem Projet, awer wéi d'Praxis gewisen huet, entsprécht dës Datebank net de Besoinen an huet vill Bugs.

Dir kënnt scho Versioun 2.0.0-Beta am Projet Repository fannen; Mir kënnen nëmmen hoffen datt déi zweet Versioun bedeitend Verbesserunge wäert hunn. An der Tëschenzäit wäert ech d'TimescaleDB Dokumentatioun studéieren.

Source: will.com

Setzt e Commentaire