Ikiwa unatumia hifadhidata ya mfululizo wa wakati (timeseries db,
Onyo: Masuala yaliyoorodheshwa yanatumika kwa toleo la InfluxDB 1.7.4.
Kwa nini mfululizo wa saa?
Mradi ni kufuatilia shughuli kwenye blockchains mbalimbali na kuonyesha takwimu. Hasa, tunaangalia utoaji na uchomaji wa sarafu thabiti (
Wakati wa kuchanganua miamala, wazo lilikuja: kutumia hifadhidata ya mfululizo wa saa ya InfluxDB kama hifadhi kuu. Shughuli za malipo ni pointi kwa wakati na zinafaa katika muundo wa mfululizo wa saa.
Kazi za kujumlisha pia zilionekana kuwa rahisi sana - bora kwa usindikaji wa chati zilizo na muda mrefu. Mtumiaji anahitaji chati ya mwaka mmoja, na hifadhidata ina seti ya data iliyo na muda wa dakika tano. Haina maana kumtumia dots zote laki moja - kando na usindikaji mrefu, hazitatoshea kwenye skrini. Unaweza kuandika utekelezaji wako mwenyewe wa kuongeza muda, au utumie vipengele vya kukokotoa vilivyojumuishwa katika Utitiri. Kwa msaada wao, unaweza kupanga data kwa siku na kutuma pointi 365 zinazohitajika.
Ilikuwa ya kutatanisha kidogo kwamba hifadhidata kama hizo kawaida hutumiwa kwa madhumuni ya kukusanya vipimo. Ufuatiliaji wa seva, vifaa vya iot, kila kitu ambacho mamilioni ya pointi za fomu ya "mtiririko": [ - ]. Lakini ikiwa hifadhidata inafanya kazi vizuri na mtiririko mkubwa wa data, basi kwa nini kiasi kidogo kinapaswa kusababisha shida? Kwa kuzingatia hili, tulichukua InfluxDB kufanya kazi.
Nini kingine ni rahisi katika InfluxDB
Kando na kazi za kujumlisha zilizotajwa, kuna jambo lingine kubwa - maswali yanayoendelea (
Pia uwe sera za uhifadhi (
- tengeneza swala endelevu ili kujumlisha data kwenye jedwali lingine;
- kwa jedwali la kwanza, fafanua sera ya kufuta vipimo ambavyo ni vya zamani zaidi ya wiki hiyo hiyo.
Na Influx itapunguza kwa uhuru ukubwa wa data na kufuta mambo yasiyo ya lazima.
Kuhusu data iliyohifadhiwa
Hakuna data nyingi iliyohifadhiwa: kuhusu shughuli elfu 70 na pointi milioni nyingine na taarifa ya soko. Kuongeza maingizo mapya - si zaidi ya pointi 3000 kwa siku. Pia kuna vipimo vya tovuti, lakini kuna data kidogo huko na, kulingana na sera ya uhifadhi, huhifadhiwa kwa si zaidi ya mwezi.
Shida
Wakati wa ukuzaji na upimaji uliofuata wa huduma, shida zaidi na muhimu zaidi ziliibuka katika uendeshaji wa InfluxDB.
1. Kufuta data
Kuna mfululizo wa data na shughuli:
SELECT time, amount, block, symbol FROM transactions WHERE symbol='USDT'
Matokeo:
Ninatuma amri ya kufuta data:
DELETE FROM transactions WHERE symbol=βUSDTβ
Ifuatayo, ninatuma ombi la kupokea data iliyofutwa tayari. Na badala ya jibu tupu, Utitiri hurejesha sehemu ya data ambayo inapaswa kufutwa.
Ninajaribu kufuta meza nzima:
DROP MEASUREMENT transactions
Ninaangalia ufutaji wa jedwali:
SHOW MEASUREMENTS
Sioni jedwali kwenye orodha, lakini hoja mpya ya data bado inarudisha seti sawa ya shughuli.
Shida ilitokea kwangu mara moja tu, kwani kesi ya kufutwa ilikuwa kesi ya pekee. Lakini tabia hii ya hifadhidata kwa uwazi haifai katika mfumo wa uendeshaji "sahihi". Baadaye nilipata wazi kwenye github
Kama matokeo, kufuta na kurejesha hifadhidata nzima ilisaidia.
2. Nambari za uhakika zinazoelea
Hesabu za hesabu unapotumia vitendakazi vilivyojengewa ndani katika InfluxDB vina hitilafu za usahihi. Sio kwamba hii sio kawaida, lakini haifurahishi.
Kwa upande wangu, data ina sehemu ya kifedha na ningependa kuichakata kwa usahihi wa hali ya juu. Kwa sababu hii, tunapanga kuachana na maswali yanayoendelea.
3. Hoja zinazoendelea haziwezi kubadilishwa kwa saa za eneo tofauti
Huduma ina meza yenye takwimu za miamala ya kila siku. Kwa kila siku, unahitaji kupanga miamala yote ya siku hiyo. Lakini siku ya kila mtumiaji itaanza kwa wakati tofauti, na kwa hiyo seti ya shughuli itakuwa tofauti. Kwa UTC ndio
Katika InfluxDB, unapoweka kikundi kulingana na wakati, unaweza kutaja zaidi mabadiliko, kwa mfano kwa wakati wa Moscow (UTC+3):
SELECT MEAN("supply") FROM transactions GROUP BY symbol, time(1d, 3h) fill(previous)
Lakini matokeo ya swali yatakuwa sahihi. Kwa sababu fulani, data iliyopangwa kwa siku itaanza hadi 1677 (InfluxDB inasaidia rasmi muda kutoka mwaka huu):
Ili kutatua tatizo hili, tulibadilisha huduma kwa UTC+0 kwa muda.
4. Utendaji
Kuna alama nyingi kwenye Mtandao zinazolinganisha InfluxDB na hifadhidata zingine. Kwa mtazamo wa kwanza, zilionekana kama nyenzo za uuzaji, lakini sasa nadhani kuna ukweli ndani yao.
Nitakuambia kesi yangu.
Huduma hutoa mbinu ya API ambayo inarudisha takwimu za siku ya mwisho. Wakati wa kufanya mahesabu, njia huuliza hifadhidata mara tatu na maswali yafuatayo:
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
Ufafanuzi:
- Katika ombi la kwanza, tunapata pointi za mwisho kwa kila sarafu iliyo na data ya soko. Pointi nane kwa sarafu nane katika kesi yangu.
- Ombi la pili linapata mojawapo ya pointi mpya zaidi.
- Ya tatu inaomba orodha ya miamala kwa saa XNUMX zilizopita; kunaweza kuwa na mamia kadhaa kati yao.
Acha nifafanue kuwa InfluxDB huunda faharasa kiotomatiki kulingana na vitambulisho na wakati, ambayo huharakisha maswali. Katika ombi la kwanza ishara ni tagi.
Nimeendesha mtihani wa mafadhaiko kwenye njia hii ya API. Kwa RPS 25, seva ilionyesha mzigo kamili wa CPU sita:
Wakati huo huo, mchakato wa NodeJs haukutoa mzigo wowote.
Kasi ya utekelezaji tayari imepungua kwa 7-10 RPS: ikiwa mteja mmoja angeweza kupokea jibu katika 200 ms, basi wateja 10 walipaswa kusubiri pili. RPS 25 ni kikomo ambacho utulivu uliteseka; makosa 500 yalirudishwa kwa wateja.
Kwa utendaji kama huo haiwezekani kutumia Influx katika mradi wetu. Zaidi ya hayo: katika mradi ambapo ufuatiliaji unahitaji kuonyeshwa kwa wateja wengi, matatizo sawa yanaweza kuonekana na seva ya vipimo itapakiwa kupita kiasi.
Pato
Hitimisho muhimu zaidi kutokana na uzoefu uliopatikana ni kwamba huwezi kuchukua teknolojia isiyojulikana kwenye mradi bila uchambuzi wa kutosha. Uchunguzi rahisi wa maswala wazi kwenye github unaweza kutoa habari ili kuzuia kuchagua InfluxDB kama duka kuu la data.
InfluxDB inapaswa kuwa inafaa kwa kazi za mradi wangu, lakini kama mazoezi yameonyesha, hifadhidata hii haikidhi mahitaji na ina hitilafu nyingi.
Tayari unaweza kupata toleo la 2.0.0-beta kwenye hazina ya mradi; tunaweza tu kutumaini kwamba toleo la pili litakuwa na maboresho makubwa. Wakati huo huo, nitaenda kusoma nyaraka za TimescaleDB.
Chanzo: mapenzi.com