Kòlè, negosyasyon ak depresyon lè w ap travay ak InfluxDB

Kòlè, negosyasyon ak depresyon lè w ap travay ak InfluxDB

Si w itilize yon baz done seri tan (timeseries db, wiki) kòm depo prensipal la pou yon sit ak estatistik, Lè sa a, olye pou yo rezoud pwoblèm nan ou ka jwenn yon anpil nan tèt fè mal. Mwen ap travay sou yon pwojè ki sèvi ak yon baz done, epi pafwa InfluxDB, ki pral diskite, prezante sipriz konplètman inatandi.

Avètisman: Pwoblèm ki nan lis yo aplike nan InfluxDB vèsyon 1.7.4.

Poukisa seri tan?

Pwojè a se swiv tranzaksyon sou divès kalite blòk epi montre estatistik. Espesyalman, nou gade nan emisyon an ak boule nan pyès monnen ki estab (wiki). Dapre tranzaksyon sa yo, ou bezwen bati graf epi montre tablo rezime.

Pandan y ap analize tranzaksyon yo, yon lide te vini: yo sèvi ak baz done seri tan InfluxDB kòm depo prensipal la. Tranzaksyon yo se pwen nan tan epi yo anfòm byen nan modèl seri tan an.

Fonksyon agrégation yo te sanble tou trè pratik - ideyal pou trete tablo ak yon peryòd tan. Itilizatè a bezwen yon tablo pou yon ane, ak baz done a gen yon seri done ak yon ankadreman tan nan senk minit. Li initil voye l 'tout san mil pwen - apa de pwosesis long, yo pa pral menm anfòm sou ekran an. Ou ka ekri pwòp aplikasyon ou pou ogmante delè a, oswa itilize fonksyon agrégasyon ki te bati nan Influx. Avèk èd yo, ou ka gwoup done pa jou epi voye 365 pwen yo mande yo.

Li te yon ti kras konfizyon ke baz done sa yo anjeneral yo itilize nan bi pou yo kolekte mezi. Siveyans nan sèvè, aparèy iot, tout bagay ki soti nan ki dè milyon de pwen nan fòm nan "koule": [<tan> - <valè metrik>]. Men, si baz done a travay byen ak yon gwo koule done, Lè sa a, poukisa yon ti volim ta dwe lakòz pwoblèm? Avèk sa a nan tèt ou, nou te pran InfluxDB nan travay.

Ki lòt bagay ki pratik nan InfluxDB

Apa de fonksyon agrégasyon mansyone yo, gen yon lòt gwo bagay - demann kontinyèl (doc). Это встроенный в БД планировщик, который может обрабатывать данные по расписанию. Например, можно каждые 24 часа группировать все записи за день, считать среднее и записывать одну новую точку в другую таблицу без написания собственных велосипедов.

Genyen tou politik retansyon (doc) - mete kanpe efase done apre yon sèten peryòd. Li itil lè, pou egzanp, ou bezwen estoke chaj CPU a pou yon semèn ak mezi yon fwa pou chak segonn, men sou yon distans yon koup de mwa presizyon sa yo pa nesesè. Nan yon sitiyasyon konsa, ou ka fè sa:

  1. kreye yon rechèch kontinyèl pou rasanble done nan yon lòt tab;
  2. pou premye tablo a, defini yon politik pou efase mezi ki pi gran pase menm semèn sa a.

Ak Influx pral poukont redwi gwosè done yo epi efase bagay ki pa nesesè yo.

Konsènan done ki estoke

Pa gen anpil done ki estoke: apeprè 70 mil tranzaksyon ak yon lòt milyon pwen ak enfòmasyon sou mache. Ajoute nouvo antre - pa plis pase 3000 pwen pou chak jou. Genyen tou mezi pou sit la, men gen ti done la epi, dapre politik la retansyon, yo estoke pou pa plis pase yon mwa.

Pwoblèm

Pandan devlopman ak tès ki vin apre nan sèvis la, pi plis ak plis pwoblèm kritik te parèt nan operasyon an nan InfluxDB.

1. Efase done

Gen yon seri done ak tranzaksyon yo:

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

Rezilta:

Kòlè, negosyasyon ak depresyon lè w ap travay ak InfluxDB

Mwen voye yon lòd pou efase done:

DELETE FROM transactions WHERE symbol=’USDT’

Apre sa, mwen fè yon demann pou resevwa done yo deja efase. Ak olye pou yo yon repons vid, Influx retounen yon pati nan done yo ki ta dwe efase.

Mwen ap eseye efase tout tab la:

DROP MEASUREMENT transactions

Mwen tcheke efase tab la:

SHOW MEASUREMENTS

Mwen pa wè tablo a nan lis la, men yon nouvo rechèch done toujou retounen menm seri tranzaksyon yo.

Pwoblèm nan te rive m 'sèlman yon fwa, depi ka efase a te yon ka izole. Men, konpòtman sa a nan baz done a klèman pa anfòm nan kad operasyon "kòrèk". Apre mwen jwenn li louvri sou github tikè prèske yon ane de sa sou sijè sa a.

Kòm yon rezilta, efase ak Lè sa a restore baz done a tout antye te ede.

2. Nimewo k ap flote

Kalkil matematik lè w ap itilize fonksyon entegre nan InfluxDB gen erè presizyon. Se pa ke sa a se yon bagay etranj, men li se dezagreyab.

Nan ka mwen an, done yo gen yon eleman finansye e mwen ta renmen trete li ak presizyon segondè. Poutèt sa, nou planifye abandone demann kontinyèl.

3. Rekèt kontinyèl pa ka adapte ak diferan zòn tan

Sèvis la gen yon tab ak estatistik tranzaksyon chak jou. Pou chak jou, ou bezwen gwoupe tout tranzaksyon yo pou jou sa a. Men, jou chak itilizatè a ap kòmanse nan yon moman diferan, ak Se poutèt sa seri tranzaksyon yo pral diferan. Pa UTC wi 37 variantes orè pou ki ou bezwen total done.

Nan InfluxDB, lè gwoupman pa tan, ou ka anplis presize yon chanjman, pou egzanp pou tan Moskou (UTC + 3):

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

Men, rezilta rechèch la pral kòrèk. Pou kèk rezon, done gwoupe pa jou yo pral kòmanse tout wout la tounen nan 1677 (InfluxDB ofisyèlman sipòte yon span tan soti nan ane sa a):

Kòlè, negosyasyon ak depresyon lè w ap travay ak InfluxDB

Pou rezoud pwoblèm sa a, nou chanje tanporèman sèvis la nan UTC+0.

4. Pèfòmans

Gen anpil referans sou entènèt la ki konpare InfluxDB ak lòt baz done. Nan premye gade, yo te sanble ak materyèl maketing, men kounye a mwen panse ke gen kèk verite nan yo.

Mwen pral di w ka mwen an.

Sèvis la bay yon metòd API ki retounen estatistik pou dènye jou a. Lè w ap fè kalkil, metòd la mande baz done a twa fwa ak demann sa yo:

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

Eksplikasyon:

  1. Nan premye demann lan, nou jwenn dènye pwen yo pou chak pyès monnen ak done mache. Uit pwen pou uit pyès monnen nan ka mwen an.
  2. Dezyèm demann lan jwenn youn nan pwen yo dernye.
  3. Twazyèm lan mande yon lis tranzaksyon pou dènye XNUMX èdtan yo; kapab genyen plizyè santèn nan yo.

Kite m 'klarifye ke InfluxDB otomatikman bati yon endèks ki baze sou tag ak tan, ki akselere demann yo. Nan premye demann lan senbòl se yon tag.

Mwen te fè yon tès estrès sou metòd API sa a. Pou 25 RPS, sèvè a demontre yon chaj plen nan sis CPU:

Kòlè, negosyasyon ak depresyon lè w ap travay ak InfluxDB

An menm tan an, pwosesis NodeJs la pa t bay okenn chaj ditou.

Vitès ekzekisyon an te deja degrade pa 7-10 RPS: si yon kliyan te kapab resevwa yon repons nan 200 ms, Lè sa a, 10 kliyan te oblije rete tann yon dezyèm fwa. 25 RPS se limit nan ki estabilite soufri; 500 erè yo te retounen nan kliyan yo.

Avèk pèfòmans sa yo li enposib pou itilize Influx nan pwojè nou an. Anplis: nan yon pwojè kote siveyans bezwen yo dwe demontre bay anpil kliyan, pwoblèm menm jan an ka parèt ak sèvè mezi a pral twò chaje.

Sòti

Konklizyon ki pi enpòtan nan eksperyans ou genyen an se ke ou pa ka pran yon teknoloji enkoni nan yon pwojè san analiz ase. Yon senp tès depistaj pwoblèm ouvè sou github ta ka bay enfòmasyon pou evite chwazi InfluxDB kòm magazen done prensipal la.

InfluxDB ta dwe yon bon anfòm pou travay yo nan pwojè mwen an, men jan pratik te montre, baz done sa a pa satisfè bezwen yo epi li gen yon anpil nan pinèz.

Ou ka deja jwenn vèsyon 2.0.0-beta nan depo pwojè a; nou ka sèlman espere ke dezyèm vèsyon an pral gen amelyorasyon enpòtan. Antretan, mwen pral etidye dokiman TimescaleDB la.

Sous: www.habr.com

Add nouvo kòmantè