Ibinu, idunadura ati ibanujẹ nigba ṣiṣẹ pẹlu InfluxDB

Ibinu, idunadura ati ibanujẹ nigba ṣiṣẹ pẹlu InfluxDB

Ti o ba lo data lẹsẹsẹ akoko kan (timeseries db, wiki) gẹgẹbi ibi ipamọ akọkọ fun aaye kan pẹlu awọn iṣiro, lẹhinna dipo ti iṣoro naa o le gba ọpọlọpọ awọn efori. Mo n ṣiṣẹ lori ise agbese kan ti o nlo iru a database, ati ki o ma InfluxDB, eyi ti yoo wa ni sísọ, gbekalẹ patapata airotẹlẹ awọn iyanilẹnu.

be: Awọn ọran ti a ṣe akojọ kan si ẹya InfluxDB 1.7.4.

Kí nìdí akoko jara?

Ise agbese na ni lati tọpa awọn iṣowo lori ọpọlọpọ awọn blockchains ati awọn iṣiro ifihan. Ni pataki, a wo itujade ati sisun ti awọn owó iduroṣinṣin (wiki). Da lori awọn iṣowo wọnyi, o nilo lati kọ awọn aworan ati ṣafihan awọn tabili akojọpọ.

Lakoko ti o n ṣe itupalẹ awọn iṣowo, imọran wa: lati lo aaye data jara akoko InfluxDB bi ibi ipamọ akọkọ. Awọn iṣowo jẹ awọn aaye ni akoko ati pe wọn baamu daradara sinu awoṣe jara akoko.

Awọn iṣẹ iṣakojọpọ tun wo irọrun pupọ - apẹrẹ fun awọn shatti sisẹ pẹlu akoko pipẹ. Olumulo nilo aworan apẹrẹ fun ọdun kan, ati pe ibi ipamọ data ni eto data kan pẹlu aaye akoko ti iṣẹju marun. Ko ṣe pataki lati firanṣẹ gbogbo awọn aami ọgọọgọrun ẹgbẹrun - yato si sisẹ pipẹ, wọn kii yoo baamu paapaa loju iboju. O le kọ imuse tirẹ ti jijẹ igba akoko, tabi lo awọn iṣẹ ikojọpọ ti a ṣe sinu Influx. Pẹlu iranlọwọ wọn, o le ṣe akojọpọ data ni ọjọ kan ati firanṣẹ awọn aaye 365 ti o nilo.

O jẹ airoju diẹ pe iru awọn data data ni a maa n lo fun idi ti gbigba awọn metiriki. Abojuto ti awọn olupin, awọn ẹrọ iot, ohun gbogbo lati eyiti awọn miliọnu awọn aaye “sisan”: [<akoko> - <metric value>]. Ṣugbọn ti ibi-ipamọ data ba ṣiṣẹ daradara pẹlu ṣiṣan data nla, lẹhinna kilode ti iwọn kekere kan yoo fa awọn iṣoro? Pẹlu eyi ni lokan, a mu InfluxDB lati ṣiṣẹ.

Kini ohun miiran rọrun ni InfluxDB

Yato si awọn iṣẹ akojọpọ ti a mẹnuba, ohun nla miiran wa - lemọlemọfún ibeere (doc). Eyi jẹ oluṣeto ti a ṣe sinu ibi ipamọ data ti o le ṣe ilana data lori iṣeto kan. Fun apẹẹrẹ, ni gbogbo wakati 24 o le ṣe akojọpọ gbogbo awọn igbasilẹ fun ọjọ naa, ṣe iṣiro apapọ ati ṣe igbasilẹ aaye tuntun kan ni tabili miiran laisi kikọ awọn kẹkẹ tirẹ.

O tun wa idaduro imulo (doc) - Ṣiṣeto piparẹ data lẹhin akoko kan. O wulo nigbati, fun apẹẹrẹ, o nilo lati tọju fifuye Sipiyu fun ọsẹ kan pẹlu awọn wiwọn lẹẹkan fun iṣẹju-aaya, ṣugbọn ni ijinna kan ti awọn oṣu meji iru išedede ko nilo. Ni iru ipo bẹẹ, o le ṣe eyi:

  1. ṣẹda ibeere ti o tẹsiwaju lati ṣajọpọ data sinu tabili miiran;
  2. fun tabili akọkọ, ṣalaye eto imulo fun piparẹ awọn metiriki ti o dagba ju ọsẹ kanna lọ.

Ati Influx yoo ni ominira dinku iwọn data naa ati paarẹ awọn nkan ti ko wulo.

Nipa ti o ti fipamọ data

Ko data pupọ ti wa ni ipamọ: nipa awọn iṣowo 70 ẹgbẹrun ati awọn aaye miliọnu miiran pẹlu alaye ọja. Ṣafikun awọn titẹ sii tuntun - ko ju awọn aaye 3000 lọ fun ọjọ kan. Awọn metiriki tun wa fun aaye naa, ṣugbọn data kekere wa nibẹ ati, ni ibamu si eto imulo idaduro, wọn wa ni ipamọ fun ko ju oṣu kan lọ.

Isoro

Lakoko idagbasoke ati idanwo atẹle ti iṣẹ naa, awọn iṣoro to ṣe pataki pupọ ati siwaju sii dide ninu iṣẹ InfluxDB.

1. Npa data

Awọn onka data wa pẹlu awọn iṣowo:

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

Esi:

Ibinu, idunadura ati ibanujẹ nigba ṣiṣẹ pẹlu InfluxDB

Mo n fi aṣẹ ranṣẹ lati pa data rẹ:

DELETE FROM transactions WHERE symbol=’USDT’

Nigbamii Mo ṣe ibeere kan lati gba data ti paarẹ tẹlẹ. Ati dipo idahun ofo, Influx pada apakan ti data ti o yẹ ki o paarẹ.

Mo n gbiyanju lati pa gbogbo tabili naa:

DROP MEASUREMENT transactions

Mo ṣayẹwo piparẹ tabili naa:

SHOW MEASUREMENTS

Emi ko rii tabili ninu atokọ naa, ṣugbọn ibeere data tuntun tun da eto awọn iṣowo kanna pada.

Iṣoro naa ṣẹlẹ si mi ni ẹẹkan, nitori ọran piparẹ naa jẹ ọran ti o ya sọtọ. Ṣugbọn ihuwasi yii ti aaye data kedere ko ni ibamu si ilana ti iṣẹ “ti o tọ”. Nigbamii Mo rii pe o ṣii lori github Tiketi fere odun kan seyin lori koko yi.

Bi abajade, pipaarẹ ati lẹhinna mimu-pada sipo gbogbo data data ṣe iranlọwọ.

2. Lilefoofo ojuami awọn nọmba

Awọn iṣiro iṣiro nigba lilo awọn iṣẹ ti a ṣe sinu InfluxDB ni awọn aṣiṣe deede. Kii ṣe pe eyi jẹ ohunkohun dani, ṣugbọn ko dun.

Ninu ọran mi, data naa ni paati inawo ati pe Emi yoo fẹ lati ṣe ilana rẹ pẹlu iṣedede giga. Nitori eyi, a gbero lati fi awọn ibeere lemọlemọ silẹ.

3. Awọn ibeere ti o tẹsiwaju ko le ṣe deede si awọn agbegbe akoko oriṣiriṣi

Iṣẹ naa ni tabili pẹlu awọn iṣiro idunadura ojoojumọ. Fun ọjọ kọọkan, o nilo lati ṣe akojọpọ gbogbo awọn iṣowo fun ọjọ yẹn. Ṣugbọn ọjọ olumulo kọọkan yoo bẹrẹ ni akoko ti o yatọ, ati nitori naa ṣeto awọn iṣowo yoo yatọ. Nipa UTC bẹẹni 37 aba awọn iyipada fun eyiti o nilo lati ṣajọpọ data.

Ni InfluxDB, nigbati o ba ṣe akojọpọ nipasẹ akoko, o le tun pato iyipada kan, fun apẹẹrẹ fun akoko Moscow (UTC+3):

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

Ṣugbọn abajade ibeere yoo jẹ aṣiṣe. Fun idi kan, data akojọpọ nipasẹ ọjọ yoo bẹrẹ ni gbogbo ọna pada si 1677 (InfluxDB ṣe atilẹyin ni ifowosi akoko akoko lati ọdun yii):

Ibinu, idunadura ati ibanujẹ nigba ṣiṣẹ pẹlu InfluxDB

Lati ṣiṣẹ ni ayika iṣoro yii, a yipada iṣẹ fun igba diẹ si UTC+0.

4. išẹ

Ọpọlọpọ awọn aṣepari lori Intanẹẹti ti o ṣe afiwe InfluxDB ati awọn apoti isura data miiran. Ni wiwo akọkọ, wọn dabi awọn ohun elo titaja, ṣugbọn nisisiyi Mo ro pe otitọ kan wa ninu wọn.

Emi yoo sọ ọran mi fun ọ.

Iṣẹ naa n pese ọna API ti o da awọn iṣiro pada fun ọjọ ikẹhin. Nigbati o ba n ṣe awọn iṣiro, ọna naa beere aaye data ni igba mẹta pẹlu awọn ibeere wọnyi:

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

Alaye:

  1. Ni ibere akọkọ, a gba awọn aaye to kẹhin fun owo kọọkan pẹlu data ọja. Awọn ojuami mẹjọ fun awọn owó mẹjọ ninu ọran mi.
  2. Ibeere keji gba ọkan ninu awọn aaye tuntun julọ.
  3. Ẹkẹta beere atokọ ti awọn iṣowo fun awọn wakati XNUMX to kọja; o le jẹ ọpọlọpọ awọn ọgọọgọrun ninu wọn.

Jẹ ki n ṣalaye pe InfluxDB ṣe agbero atọka laifọwọyi da lori awọn afi ati akoko, eyiti o mu awọn ibeere pọ si. Ni ibere akọkọ aami jẹ tag.

Mo ti ṣiṣe idanwo wahala lori ọna API yii. Fun 25 RPS, olupin ṣe afihan fifuye kikun ti awọn Sipiyu mẹfa:

Ibinu, idunadura ati ibanujẹ nigba ṣiṣẹ pẹlu InfluxDB

Ni akoko kanna, ilana NodeJs ko pese eyikeyi fifuye rara.

Iyara ipaniyan ti bajẹ tẹlẹ nipasẹ 7-10 RPS: ti alabara kan ba le gba esi ni 200 ms, lẹhinna awọn alabara 10 ni lati duro fun iṣẹju-aaya kan. 25 RPS ni opin eyiti iduroṣinṣin jiya; awọn aṣiṣe 500 ni a pada si awọn alabara.

Pẹlu iru iṣẹ bẹ ko ṣee ṣe lati lo Influx ninu iṣẹ akanṣe wa. Pẹlupẹlu: ninu iṣẹ akanṣe nibiti ibojuwo nilo lati ṣafihan si ọpọlọpọ awọn alabara, awọn iṣoro ti o jọra le han ati pe olupin metiriki yoo jẹ apọju.

ipari

Ipari pataki julọ lati iriri ti o gba ni pe o ko le gba imọ-ẹrọ aimọ sinu iṣẹ akanṣe kan laisi itupalẹ to. Ṣiṣayẹwo irọrun ti awọn ọran ṣiṣi lori github le pese alaye lati yago fun yiyan InfluxDB bi ile itaja data akọkọ.

InfluxDB yẹ ki o jẹ ibamu ti o dara fun awọn iṣẹ ṣiṣe ti iṣẹ akanṣe mi, ṣugbọn bi iṣe ti fihan, data data yii ko pade awọn iwulo ati pe o ni awọn idun pupọ.

O le ti rii ẹya 2.0.0-beta tẹlẹ ninu ibi ipamọ iṣẹ akanṣe; a le nireti pe ẹya keji yoo ni awọn ilọsiwaju pataki. Lakoko, Emi yoo lọ iwadi iwe TimescaleDB.

orisun: www.habr.com

Fi ọrọìwòye kun