Dema ku bi InfluxDB re dixebitin hêrs, danûstandin û depresyonê

Dema ku bi InfluxDB re dixebitin hêrs, danûstandin û depresyonê

Ger hûn databasek rêzikên demê bikar bînin (demjimêr db, wiki) Ji bo malperek bi statîstîkan wekî depoya sereke, wê hingê li şûna ku hûn pirsgirêkê çareser bikin hûn dikarin gelek serêş bibin. Ez li ser projeyek dixebitim ku databasek wusa bikar tîne, û carinan InfluxDB, ku dê were nîqaş kirin, bi tevahî surprîzên nediyar pêşkêşî dike.

Disclaimer: Pirsgirêkên navnîşkirî ji bo InfluxDB guhertoya 1.7.4 derbas dibin.

Çima rêzikên demê?

Proje ew e ku danûstendinên li ser zincîreyên cihêreng bişopîne û statîstîkan nîşan bide. Bi taybetî, em li belavbûn û şewitandina pereyên stabîl dinêrin (wiki). Li ser bingeha van danûstendinan, hûn hewce ne ku grafîkan ava bikin û tabloyên kurt nîşan bidin.

Di dema analîzkirina danûstendinan de, ramanek derket holê: karanîna databasa rêza demjimêra InfluxDB wekî hilanîna sereke. Danûstandin xalên di demê de ne û ew baş di modela rêzikên demê de cih digirin.

Fonksiyonên berhevkirinê jî pir hêsan xuya dikirin - ji bo hilberandina nexşeyên bi demek dirêj ve îdeal. Bikarhêner ji bo salek nexşeyek pêdivî ye, û databas komek daneya bi çarçoveyek demjimêra pênc hûrdeman vedihewîne. Bêwate ye ku meriv wî hemî sed hezar xalan bişîne - ji xeynî pêvajoyek dirêj, ew ê li ser ekranê jî nebin. Hûn dikarin pêkanîna xwe ya zêdekirina demajoyê binivîsin, an jî fonksiyonên berhevkirinê yên ku di Influx de hatine çêkirin bikar bînin. Bi alîkariya wan, hûn dikarin bi roj daneyan kom bikin û 365 xalên pêwîst bişînin.

Piçek tevlihev bû ku databasên weha bi gelemperî ji bo berhevkirina metrîkan têne bikar anîn. Çavdêriya pêşkêşkeran, cîhazên iot, her tiştê ku ji wan bi mîlyonan xalên formê "herikin": [<dem> - <nirxa metrîkî>]. Lê heke databas bi herikîna daneya mezin re baş dixebite, wê hingê çima hêjmarek piçûk dibe sedema pirsgirêkan? Bi vê di hişê xwe de, me InfluxDB da xebatê.

Ya din di InfluxDB de çi hêsan e

Ji xeynî fonksiyonên berhevkirina navborî, tiştek din a girîng heye - pirsên berdewam (doc). Ev nexşerek e ku di nav databasê de hatî çêkirin ku dikare daneyan li ser nexşeyek pêvajoyê bike. Mînakî, her 24 demjimêran hûn dikarin hemî tomarên rojê kom bikin, navînî hesab bikin û xalek nû di tabloyek din de tomar bikin bêyî ku bisîkletên xwe binivîsin.

Her weha heye polîtîkayên parastinê (doc)-sazkirina jêbirina daneyan piştî demek diyarkirî. Ew bikêr e dema ku, bo nimûne, hûn hewce ne ku barkirina CPU-ê ji bo hefteyekê bi pîvandinê di saniyeyê de carekê hilînin, lê di navbera çend mehan de rastbûna wusa ne hewce ye. Di rewşeke weha de, hûn dikarin vê yekê bikin:

  1. pirsek domdar biafirîne da ku daneyan di tabloyek din de berhev bike;
  2. ji bo tabloya yekem, siyasetek ji bo jêbirina metrîkên ku ji heman hefteyê kevntir in diyar bikin.

Û Influx dê serbixwe mezinahiya daneyê kêm bike û tiştên nehewce jê bibe.

Li ser daneyên hilanîn

Pir dane nayê hilanîn: Nêzîkî 70 hezar danûstendin û mîlyonek din bi agahdariya bazarê. Zêdekirina navnîşên nû - ne ji 3000 xalên rojê zêdetir. Metrîkên malperê jî hene, lê li wir daneya hindik heye û, li gorî polîtîkaya ragirtinê, ew ji mehekê bêtir têne hilanîn.

Pirsgirêkên

Di dema pêşkeftin û ceribandina paşîn a karûbarê de, di xebata InfluxDB de bêtir û bêtir pirsgirêkên krîtîk derketin.

1. Deleting data

Rêzikek daneyên danûstandinan hene:

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

Encam:

Dema ku bi InfluxDB re dixebitin hêrs, danûstandin û depresyonê

Ez fermanek ji bo jêbirina daneyan dişînim:

DELETE FROM transactions WHERE symbol=’USDT’

Dûv re ez daxwazek dikim ku daneyên jixwe jêbirin werbigirim. Û li şûna bersivek vala, Influx beşek ji daneyên ku divê werin jêbirin vedigerîne.

Ez hewl didim ku tevahiya tabloyê jêbikim:

DROP MEASUREMENT transactions

Ez jêbirina tabloyê kontrol dikim:

SHOW MEASUREMENTS

Ez tabloyê di navnîşê de nabînim, lê pirsek daneya nû dîsa jî heman koma danûstandinan vedigerîne.

Pirsgirêk tenê carekê hat serê min, ji ber ku doza jêbirinê dozek veqetandî bû. Lê ev tevgera databasê eşkere di çarçoveya operasyona "rast" de cîh nagire. Dûv re min ew li ser github vekirî dît qert hema sal berê li ser vê mijarê.

Wekî encamek, jêbirin û dûv re vegerandina tevahiya databasê alîkarî kir.

2. Hejmarên xala herikîn

Hesabên matematîkê dema ku fonksiyonên çêkirî yên li InfluxDB bikar tînin xeletiyên rastbûnê hene. Ne ku ev tiştekî neasayî ye, lê ne xweş e.

Di doza min de, daneya xwedan pêkhateyek darayî ye û ez dixwazim wê bi rastbûna bilind pêvajo bikim. Ji ber vê yekê, em plan dikin ku dev ji lêpirsînên domdar berdin.

3. Pirsên domdar nikarin li deverên demjimêrên cihêreng werin adapte kirin

Karûbar tabloyek bi statîstîkên danûstendina rojane heye. Ji bo her rojê, hûn hewce ne ku hemî danûstandinên wê rojê kom bikin. Lê roja her bikarhêner dê di demek cûda de dest pê bike, û ji ber vê yekê komek danûstandinan dê cûda be. Ji hêla UTC ve erê 37 variant guheztinên ku hûn hewce ne ku daneyan berhev bikin.

Di InfluxDB de, dema ku ji hêla demê ve têne kom kirin, hûn dikarin veguheztinek din jî diyar bikin, mînakî ji bo dema Moskowê (UTC+3):

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

Lê encama pirsê dê xelet be. Ji ber hin sedeman, daneyên ku bi roj têne kom kirin dê heya 1677-an dest pê bikin (InfluxDB bi fermî ji vê salê ve demek dirêj piştgirî dike):

Dema ku bi InfluxDB re dixebitin hêrs, danûstandin û depresyonê

Ji bo ku em li dora vê pirsgirêkê bixebitin, me karûbar bi demkî veguherand UTC+0.

4. Performansa

Li ser Înternetê gelek pîvan hene ku InfluxDB û databasên din didin ber hev. Di nihêrîna pêşîn de, ew mîna materyalên kirrûbirrê xuya bûn, lê naha ez difikirim ku di wan de hin rastî heye.

Ez ê doza xwe ji te re bibêjim.

Karûbar rêbazek API-ê peyda dike ku statîstîkên roja paşîn vedigerîne. Dema ku hesaban pêk tîne, rêbaz bi pirsên jêrîn sê caran ji databasê dipirse:

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

Daxûyanî:

  1. Di daxwaza yekem de, em ji bo her coinek bi daneyên bazarê xalên paşîn digirin. Heşt xalên ji bo heşt zîv di doza min.
  2. Daxwaza duyemîn yek ji xalên herî nû digire.
  3. Ya sêyemîn navnîşek danûstandinên XNUMX demjimêrên paşîn daxwaz dike; dibe ku çend sed ji wan hebin.

Bihêle ez zelal bikim ku InfluxDB bixweber li ser bingeha tag û demê indexek çêdike, ku pirsan bileztir dike. Di daxwaza yekem de nîşan nîşanek e.

Min li ser vê rêbazê API-ê ceribandinek stresê meşandin. Ji bo 25 RPS, server bargiraniyek tevahî ya şeş CPU destnîşan kir:

Dema ku bi InfluxDB re dixebitin hêrs, danûstandin û depresyonê

Di heman demê de, pêvajoya NodeJs qet barek peyda nekir.

Leza darvekirinê jixwe 7-10 RPS kêm bûye: ger yek xerîdar di 200 ms de bersivek werbigire, wê hingê 10 xerîdar neçar bûn ku saniyeyekê bisekinin. 25 RPS sînorê ku tê de îstîqrar zirar dîtiye; 500 xeletî li xerîdaran hatin vegerandin.

Bi performansa wusa ne gengaz e ku meriv Influx di projeya me de bikar bîne. Digel vê yekê: di projeyek ku pêdivî ye ku çavdêrî ji gelek xerîdaran re were destnîşan kirin, dibe ku pirsgirêkên mîna xuya bibin û servera metrîkê dê zêde were barkirin.

encamê

Encama herî girîng a ji ezmûna hatî bidestxistin ev e ku hûn nekarin teknolojiyek nenas bêyî analîzek têr bixe nav projeyek. Vebijêrkek hêsan a pirsgirêkên vekirî yên li ser github dikare agahdarî peyda bike da ku ji hilbijartina InfluxDB wekî hilanîna daneya sereke dûr nekevin.

Diviyabû InfluxDB ji bo karên projeya min guncanek baş bûya, lê wekî pratîkê destnîşan kiriye, ev databas hewcedariyên xwe nabîne û gelek xeletî hene.

Jixwe hûn dikarin guhertoya 2.0.0-beta di depoya projeyê de bibînin; em tenê dikarin hêvî bikin ku guhertoya duyemîn dê çêtirkirinên girîng hebin. Di vê navberê de, ez ê herim belgeya TimescaleDB bixwînim.

Source: www.habr.com

Add a comment