InfluxDB менен иштөөдө ачуулануу, соодалашуу жана депрессия

InfluxDB менен иштөөдө ачуулануу, соодалашуу жана депрессия

Эгер сиз убакыт сериясынын маалымат базасын колдонсоңуз (убакыт сериясы db, Магазин) статистикасы бар сайттын негизги сактагычы катары, анда көйгөйдү чечүүнүн ордуна көп баш ооруну алып келиши мүмкүн. Мен ушундай маалымат базасын колдонгон долбоордун үстүндө иштеп жатам, кээде талкуулана турган InfluxDB, таптакыр күтүлбөгөн сюрприздерди тартуулады.

баш тартуу: Сандалган маселелер InfluxDB 1.7.4 версиясына тиешелүү.

Эмне үчүн убакыт сериясы?

Долбоор ар кандай блокчейндердеги транзакцияларды көзөмөлдөө жана статистиканы көрсөтүү. Тактап айтканда, биз туруктуу монеталарды чыгарууну жана күйүүнү карайбыз (Магазин). Бул транзакциялардын негизинде сиз графиктерди куруп, жыйынды таблицаларды көрсөтүшүңүз керек.

Транзакцияларды талдап жатканда, бир идея пайда болду: негизги сактагыч катары InfluxDB убакыт сериясынын маалымат базасын колдонуу. Бүтүмдөр убакыттын чекиттери болуп саналат жана алар убакыт сериясынын моделине туура келет.

Агрегация функциялары да абдан ыңгайлуу көрүндү - узак мөөнөттүү диаграммаларды иштетүү үчүн идеалдуу. Колдонуучуга бир жыл бою диаграмма керек, ал эми маалымат базасы беш мүнөттүк убакыт алкагы менен маалымат топтомун камтыйт. Ага жүз миң чекиттин баарын жөнөтүү маанисиз - узак иштетүүдөн тышкары, алар экранга да батпай калат. Убакытты көбөйтүү боюнча өзүңүздүн ишке ашырууңузду жазсаңыз болот же Influx'та орнотулган топтоо функцияларын колдонсоңуз болот. Алардын жардамы менен сиз маалыматтарды күн бою топтоп, керектүү 365 баллды жөнөтө аласыз.

Мындай маалымат базалары, адатта, метрикаларды чогултуу максатында колдонулат деп бир аз түшүнүксүз болду. Серверлердин, IOT түзүлүштөрүнүн мониторинги, алардын ичинен миллиондогон "агым" түрүндөгү пункттар: [<убакыт> - <метрикалык маани>]. Бирок маалымат базасы чоң маалымат агымы менен жакшы иштесе, анда эмне үчүн кичинекей көлөм көйгөйлөрдү жаратышы керек? Ушуну эске алып, биз InfluxDBди ишке алдык.

InfluxDBде дагы эмне ыңгайлуу

Белгиленген топтоо функцияларынан тышкары, дагы бир чоң нерсе бар - үзгүлтүксүз суроолор (док). Бул график боюнча маалыматтарды иштете ала турган маалымат базасына орнотулган пландаштыргыч. Мисалы, ар бир 24 саат сайын сиз өзүңүздүн велосипеддериңизди жазбай туруп, күн үчүн бардык рекорддорду топтоп, орточо эсепти эсептеп, башка таблицага бир жаңы пунктту жазсаңыз болот.

да бар сактоо саясаты (док) — белгилүү бир убакыттан кийин маалыматтарды өчүрүүнү орнотуу. Ал, мисалы, CPU жүгүн бир жума бою секундасына бир жолу өлчөө менен сактоо керек болгондо пайдалуу, бирок бир нече ай аралыкта мындай тактык талап кылынбайт. Мындай кырдаалда сиз муну жасай аласыз:

  1. башка таблицага маалыматтарды топтоо үчүн үзгүлтүксүз суроо түзүү;
  2. биринчи таблица үчүн, ошол эле жумадан эски көрсөткүчтөрдү жок кылуу саясатын аныктаңыз.

Жана Influx өз алдынча маалыматтардын көлөмүн азайтат жана керексиз нерселерди жок кылат.

Сакталган маалыматтар жөнүндө

Эмес, көп маалымат сакталган: 70 мын бүтүмдөр жана рыноктук маалымат менен дагы бир миллион пунктка. Жаңы жазууларды кошуу - күнүнө 3000 баллдан ашык эмес. Сайттын көрсөткүчтөрү да бар, бирок ал жерде маалымат аз жана сактоо саясатына ылайык, алар бир айдан ашык эмес сакталат.

көйгөйлөр

Кызматты иштеп чыгуу жана андан кийинки тестирлөө учурунда InfluxDB иштешинде барган сайын олуттуу көйгөйлөр пайда болду.

1. Маалыматтарды жок кылуу

транзакциялар менен бир катар маалыматтар бар:

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

жыйынтыгы:

InfluxDB менен иштөөдө ачуулануу, соодалашуу жана депрессия

Мен дайындарды жок кылуу үчүн буйрук жөнөтүп жатам:

DELETE FROM transactions WHERE symbol=’USDT’

Андан кийин мен буга чейин жок кылынган маалыматтарды алуу өтүнүчүн жасайм. Жана бош жооптун ордуна, Influx жок кылынышы керек болгон маалыматтардын бир бөлүгүн кайтарат.

Мен бүт таблицаны жок кылууга аракет кылып жатам:

DROP MEASUREMENT transactions

Мен таблицанын жок кылынышын текшерем:

SHOW MEASUREMENTS

Тизмеде мен таблицаны көргөн жокмун, бирок жаңы маалымат сурамы дагы эле транзакциялардын ошол эле топтомун кайтарат.

Көйгөй менде бир гана жолу болгон, анткени өчүрүү иши өзүнчө бир окуя болгон. Бирок маалымат базасынын бул жүрүм-туруму "туура" операциянын алкагында так туура келбейт. Кийинчерээк мен аны githubда ачык таптым билет дээрлик бир жыл мурун бул тема боюнча.

Натыйжада, бардык маалымат базасын жок кылуу, андан кийин калыбына келтирүү жардам берди.

2. Калкыма чекиттүү сандар

InfluxDBде орнотулган функцияларды колдонууда математикалык эсептөөлөр тактык каталары бар. Бул адаттан тыш нерсе эмес, бирок бул жагымсыз.

Менин учурда, маалыматтар каржылык компонентке ээ жана мен аны жогорку тактык менен иштетгим келет. Ушундан улам биз үзгүлтүксүз сурамдардан баш тартууну пландап жатабыз.

3. Үзгүлтүксүз сурамдарды ар кандай убакыт алкактарына ылайыкташтыруу мүмкүн эмес

Кызматта күнүмдүк транзакция статистикасы бар таблица бар. Ар бир күн үчүн сиз ошол күн үчүн бардык транзакцияларды топтошуңуз керек. Бирок ар бир колдонуучунун күнү башка убакта башталат, демек, транзакциялардын топтому ар башка болот. UTC боюнча ооба 37 параметрлери маалыматтарды топтошуңуз керек болгон жылыштар.

InfluxDBде, убакыт боюнча топтоштурууда, кошумча жылышты белгилей аласыз, мисалы, Москва убактысы боюнча (UTC+3):

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

Бирок суроонун натыйжасы туура эмес болуп калат. Кандайдыр бир себептерден улам, күн боюнча топтоштурулган маалыматтар 1677-жылга чейин башталат (InfluxDB расмий түрдө быйылкы убакыт аралыгын колдойт):

InfluxDB менен иштөөдө ачуулануу, соодалашуу жана депрессия

Бул көйгөйдү чечүү үчүн биз кызматты убактылуу UTC+0го котордук.

4. Performance

Интернетте InfluxDB жана башка маалымат базаларын салыштырган көптөгөн көрсөткүчтөр бар. Бир караганда алар маркетингдик материалдардай көрүндү, бирок азыр аларда кандайдыр бир чындык бар деп ойлойм.

Мен сага өзүмдүн ишимди айтып берейин.

Кызмат акыркы күндөгү статистиканы кайтарган API ыкмасын камсыз кылат. Эсептөөлөрдү жүргүзүүдө, метод маалымат базасын үч жолу төмөнкү суроолор менен сурайт:

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

түшүндүрмөсү:

  1. Биринчи суроо-талапта, биз рыноктук маалыматтар менен ар бир монета үчүн акыркы упайларды алабыз. Менин учурда сегиз тыйынга сегиз упай.
  2. Экинчи суроо эң жаңы упайлардын бирин алат.
  3. Үчүнчүсү акыркы XNUMX саат ичиндеги транзакциялардын тизмесин сурайт; алардын бир нече жүздүгү болушу мүмкүн.

InfluxDB автоматтык түрдө теги жана убакыттын негизинде индексти түзөрүн түшүндүрүп берейин, бул суроону тездетет. Биринчи өтүнүчтө белги тег болуп саналат.

Мен бул API ыкмасы боюнча стресс-тест өткөрдүм. 25 RPS үчүн сервер алты CPUнын толук жүгүн көрсөттү:

InfluxDB менен иштөөдө ачуулануу, соодалашуу жана депрессия

Ошол эле учурда, NodeJs процесси эч кандай жүктү камсыз кылган эмес.

Аткаруу ылдамдыгы буга чейин 7-10 RPS төмөндөгөн: эгерде бир кардар 200 мс ичинде жооп ала алса, анда 10 кардар бир секунд күтүшү керек болчу. 25 RPS - бул туруктуулук жабыр тарткан чек; 500 ката кардарларга кайтарылды.

Мындай аткаруу менен биздин долбоордо Influx колдонуу мүмкүн эмес. Андан тышкары: көптөгөн кардарларга мониторингди көрсөтүү керек болгон долбоордо окшош көйгөйлөр пайда болушу мүмкүн жана метрика сервери ашыкча жүктөлөт.

жыйынтыктоо

Топтолгон тажрыйбанын эң маанилүү тыянагы – белгисиз технологияны жетиштүү анализсиз долбоорго ала албайсыз. Githubдагы ачык маселелерди жөнөкөй эле карап чыгуу InfluxDBди негизги маалымат сактагыч катары тандабоо үчүн маалымат бере алат.

InfluxDB менин долбоорумдун тапшырмаларына ылайыктуу болушу керек болчу, бирок практика көрсөткөндөй, бул маалымат базасы муктаждыктарга жооп бербейт жана көптөгөн мүчүлүштүктөргө ээ.

Долбоордун репозиторийинен 2.0.0-бета версиясын таба аласыз, биз экинчи версияда олуттуу жакшырууларга ээ болот деп үмүттөнөбүз. Ошол эле учурда мен TimescaleDB документтерин изилдеп чыгам.

Source: www.habr.com

Комментарий кошуу