Rabja, negozjar u dipressjoni meta taħdem ma 'InfluxDB

Rabja, negozjar u dipressjoni meta taħdem ma 'InfluxDB

Jekk tuża database tas-serje tal-ħin (timeseries db, wiki) bħala l-ħażna ewlenija għal sit bi statistika, allura minflok issolvi l-problema tista 'tikseb ħafna uġigħ ta' ras. Qed naħdem fuq proġett li juża tali database, u kultant InfluxDB, li se jiġi diskuss, ippreżenta sorpriżi kompletament mhux mistennija.

Ċaħda ta 'responsabbiltà: Il-kwistjonijiet elenkati japplikaw għall-verżjoni InfluxDB 1.7.4.

Għaliex serje tal-ħin?

Il-proġett huwa li jsegwu t-tranżazzjonijiet fuq diversi blockchains u juri statistika. Speċifikament, inħarsu lejn l-emissjoni u l-ħruq ta 'muniti stabbli (wiki). Ibbażat fuq dawn it-tranżazzjonijiet, għandek bżonn tibni graffs u turi tabelli fil-qosor.

Waqt l-analiżi tat-tranżazzjonijiet, ħarġet idea: li tuża d-database tas-serje tal-ħin InfluxDB bħala l-ħażna ewlenija. It-tranżazzjonijiet huma punti fiż-żmien u jidħlu sew fil-mudell tas-serje taż-żmien.

Il-funzjonijiet ta 'aggregazzjoni dehru wkoll konvenjenti ħafna - ideali għall-ipproċessar ta' charts b'perjodu twil. L-utent jeħtieġ chart għal sena, u d-database fiha sett ta 'dejta b'qafas ta' żmien ta 'ħames minuti. Huwa inutli li tibgħatlu l-mitt elf tikka kollha - apparti l-ipproċessar twil, lanqas biss se jidħlu fuq l-iskrin. Tista 'tikteb l-implimentazzjoni tiegħek stess li żżid il-perjodu ta' żmien, jew tuża l-funzjonijiet ta 'aggregazzjoni mibnija f'Influx. Bl-għajnuna tagħhom, tista' tiġbor id-dejta kuljum u tibgħat il-punt 365 meħtieġ.

Kienet ftit konfuża li dawn id-databases normalment jintużaw għall-iskop tal-ġbir tal-metriċi. Monitoraġġ ta 'servers, apparat iot, dak kollu li minnu miljuni ta' punti tal-forma "fluss": [<ħin> - <valur metriku>]. Imma jekk id-database taħdem tajjeb bi fluss kbir ta 'data, allura għaliex volum żgħir għandu jikkawża problemi? B'dan f'moħħna, ħadna InfluxDB biex taħdem.

X'iktar huwa konvenjenti f'InfluxDB

Minbarra l-funzjonijiet ta 'aggregazzjoni msemmija, hemm ħaġa oħra kbira - mistoqsijiet kontinwi (doc). Dan huwa scheduler mibni fid-database li jista 'jipproċessa data fuq skeda. Pereżempju, kull 24 siegħa tista' tiġbor ir-rekords kollha tal-ġurnata, tikkalkula l-medja u tirreġistra punt ġdid f'tabella oħra mingħajr ma tikteb ir-roti tiegħek.

Għandhom ukoll politiki ta’ żamma (doc)—twaqqaf it-tħassir tad-dejta wara ċertu perjodu. Huwa utli meta, pereżempju, ikollok bżonn taħżen it-tagħbija tas-CPU għal ġimgħa b'kejl darba kull sekonda, iżda fuq distanza ta 'ftit xhur tali preċiżjoni mhix meħtieġa. F'sitwazzjoni bħal din, tista 'tagħmel dan:

  1. toħloq mistoqsija kontinwa biex taggrega data f'tabella oħra;
  2. għall-ewwel tabella, iddefinixxi politika għat-tħassir ta' metriċi li huma eqdem minn dik l-istess ġimgħa.

U Influx se jnaqqas b'mod indipendenti d-daqs tad-dejta u jħassar affarijiet mhux meħtieġa.

Dwar data maħżuna

Mhux ħafna dejta maħżuna: madwar 70 elf transazzjoni u miljun punt ieħor b'informazzjoni tas-suq. Żieda ta' entrati ġodda - mhux aktar minn 3000 punt kuljum. Hemm ukoll metriċi għas-sit, iżda hemm ftit dejta hemmhekk u, skont il-politika ta 'żamma, huma maħżuna għal mhux aktar minn xahar.

Problemi

Matul l-iżvilupp u l-ittestjar sussegwenti tas-servizz, inqalgħu aktar u aktar problemi kritiċi fl-operat ta 'InfluxDB.

1. Tħassir tad-data

Hemm serje ta' dejta bit-tranżazzjonijiet:

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

Riżultat:

Rabja, negozjar u dipressjoni meta taħdem ma 'InfluxDB

Qed nibgħat kmand biex tħassar id-dejta:

DELETE FROM transactions WHERE symbol=’USDT’

Sussegwentement nagħmel talba biex nirċievi d-dejta diġà mħassra. U minflok rispons vojt, Influx jirritorna parti mid-dejta li għandha titħassar.

Qed nipprova nħassar it-tabella kollha:

DROP MEASUREMENT transactions

Niċċekkja t-tħassir tat-tabella:

SHOW MEASUREMENTS

Ma narax it-tabella fil-lista, iżda mistoqsija ġdida tad-dejta għadha tirritorna l-istess sett ta 'tranżazzjonijiet.

Il-problema seħħet lili darba biss, peress li l-każ tat-tħassir kien każ iżolat. Iżda din l-imġieba tad-database b'mod ċar ma tidħolx fil-qafas ta 'operazzjoni "korretta". Aktar tard sibtha miftuħa fuq github biljett kważi sena ilu fuq dan is-suġġett.

Bħala riżultat, it-tħassir u mbagħad ir-restawr tad-database kollha għen.

2. Numri bil-punt li jvarja

Il-kalkoli tal-matematika meta jintużaw funzjonijiet integrati f'InfluxDB għandhom żbalji ta' preċiżjoni. Mhux li din hija xi ħaġa mhux tas-soltu, iżda hija spjaċevoli.

Fil-każ tiegħi, id-dejta għandha komponent finanzjarju u nixtieq nipproċessaha bi preċiżjoni għolja. Minħabba dan, qed nippjanaw li nabbandunaw mistoqsijiet kontinwi.

3. Mistoqsijiet kontinwi ma jistgħux jiġu adattati għal żoni tal-ħin differenti

Is-servizz għandu tabella bi statistika ta 'tranżazzjonijiet ta' kuljum. Għal kull jum, għandek bżonn tiġbor it-tranżazzjonijiet kollha għal dik il-ġurnata. Iżda l-ġurnata ta 'kull utent se tibda f'ħin differenti, u għalhekk is-sett ta' tranżazzjonijiet se jkun differenti. Sal-UTC iva 37-il varjant xiftijiet li għalihom għandek bżonn tiġbor id-dejta.

F'InfluxDB, meta tiġbor skont il-ħin, tista' wkoll tispeċifika bidla, pereżempju għall-ħin ta' Moska (UTC+3):

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

Iżda r-riżultat tal-mistoqsija se jkun żbaljat. Għal xi raġuni, id-dejta miġbura skond il-ġurnata se tibda lura sa 1677 (InfluxDB jappoġġja uffiċjalment medda ta' żmien minn din is-sena):

Rabja, negozjar u dipressjoni meta taħdem ma 'InfluxDB

Biex naħdmu għal din il-problema, qlibna temporanjament is-servizz għal UTC+0.

4. Prestazzjoni

Hemm ħafna punti ta' referenza fuq l-Internet li jqabblu InfluxDB u databases oħra. L-ewwel daqqa t'għajn, dehru qishom materjali tal-kummerċjalizzazzjoni, iżda issa naħseb li hemm xi verità fihom.

Jien ngħidlek il-każ tiegħi.

Is-servizz jipprovdi metodu API li jirritorna statistika għall-aħħar jum. Meta jwettaq il-kalkoli, il-metodu jistaqsi mad-database tliet darbiet bil-mistoqsijiet li ġejjin:

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

Spjegazzjoni:

  1. Fl-ewwel talba, aħna nġibu l-aħħar punti għal kull munita b'dejta tas-suq. Tmien punti għal tmien muniti fil-każ tiegħi.
  2. It-tieni talba tikseb wieħed mill-aktar punti ġodda.
  3. It-tielet wieħed jitlob lista ta 'tranżazzjonijiet għall-aħħar XNUMX siegħa; jista' jkun hemm diversi mijiet minnhom.

Ħa niċċara li InfluxDB awtomatikament jibni indiċi bbażat fuq tikketti u ħin, li jħaffef il-mistoqsijiet. Fl-ewwel talba simbolu hija tag.

Għamilt test tal-istress fuq dan il-metodu API. Għal 25 RPS, is-server wera tagħbija sħiħa ta 'sitt CPUs:

Rabja, negozjar u dipressjoni meta taħdem ma 'InfluxDB

Fl-istess ħin, il-proċess NodeJs ma pprovda l-ebda tagħbija.

Il-veloċità tal-eżekuzzjoni diġà ddegradat b'7-10 RPS: jekk klijent wieħed jista 'jirċievi tweġiba f'200 ms, allura 10 klijenti kellhom jistennew it-tieni. 25 RPS huwa l-limitu li fih batiet l-istabbiltà; 500 żball ġew ritornati lill-klijenti.

B'rendiment bħal dan huwa impossibbli li tuża Influx fil-proġett tagħna. Barra minn hekk: fi proġett fejn il-monitoraġġ jeħtieġ li jintwera lil ħafna klijenti, jistgħu jidhru problemi simili u s-server tal-metriċi jkun mgħobbi żżejjed.

Output

L-iktar konklużjoni importanti mill-esperjenza miksuba hija li ma tistax tieħu teknoloġija mhux magħrufa fi proġett mingħajr analiżi suffiċjenti. Skrinjar sempliċi ta 'kwistjonijiet miftuħa fuq github jista' jipprovdi informazzjoni biex tevita li tagħżel InfluxDB bħala l-maħżen tad-dejta prinċipali.

InfluxDB kellu jkun tajjeb għall-kompiti tal-proġett tiegħi, iżda kif wriet il-prattika, din id-database ma tissodisfax il-ħtiġijiet u għandha ħafna bugs.

Diġà tista' ssib il-verżjoni 2.0.0-beta fir-repożitorju tal-proġett; nistgħu biss nittamaw li t-tieni verżjoni jkollha titjib sinifikanti. Sadanittant, immur nistudja d-dokumentazzjoni TimescaleDB.

Sors: www.habr.com

Żid kumment