Π“Π½Π΅Π², Ρ‚ΠΎΡ€Π³ ΠΈ дСпрСссия ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с InfluxDB

Π“Π½Π΅Π², Ρ‚ΠΎΡ€Π³ ΠΈ дСпрСссия ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с InfluxDB

Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π‘Π” Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… рядов (timeseries db, wiki) ΠΊΠ°ΠΊ основноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для сайта со статистикой, Ρ‚ΠΎ вмСсто Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ. Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ такая Π±Π°Π·Π°, ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° InfluxDB, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ, прСподносила Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ ΡΡŽΡ€ΠΏΡ€ΠΈΠ·Ρ‹.

Disclaimer: ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ относятся ΠΊ вСрсии InfluxDB 1.7.4.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ time series?

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² отслСТивании Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°Ρ… ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ статистики. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ β€” смотрим эмиссию ΠΈ сТиганиС стэйбл-ΠΊΠΎΠΈΠ½ΠΎΠ² (wiki). На основС этих Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ сводныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

ΠŸΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈΡˆΠ»Π° идСя: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… рядов InfluxDB ΠΊΠ°ΠΊ основноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π² модСль Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ряда ΠΎΠ½ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ.

Π•Ρ‰Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ выглядСли вСсьма ΡƒΠ΄ΠΎΠ±Π½ΠΎ β€” для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² с большим ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠΌ идСально подходят. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½ΡƒΠΆΠ΅Π½ Π³Ρ€Π°Ρ„ΠΈΠΊ Π·Π° Π³ΠΎΠ΄, Π° Π² Π±Π°Π·Π΅ Π»Π΅ΠΆΠΈΡ‚ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… с Ρ‚Π°ΠΉΠΌΡ„Ρ€Π΅ΠΉΠΌΠΎΠΌ Π² ΠΏΡΡ‚ΡŒ ΠΌΠΈΠ½ΡƒΡ‚. ВсС сто тысяч Ρ‚ΠΎΡ‡Π΅ΠΊ Π΅ΠΌΡƒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ бСссмыслСнно β€” ΠΊΡ€ΠΎΠΌΠ΅ Π΄ΠΎΠ»Π³ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΎΠ½ΠΈ ΠΈ Π½Π° экранС Π½Π΅ помСстятся. МоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ увСличСния Ρ‚Π°ΠΉΠΌΡ„Ρ€Π΅ΠΉΠΌΠ°, Π»ΠΈΠ±ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ встроСнными Π² Influx функциями Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ. Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ дням ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ 365 Ρ‚ΠΎΡ‡Π΅ΠΊ.

НСмного смущало Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Π±Π°Π·Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ с Ρ†Π΅Π»ΡŒΡŽ сбора ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ сСрвСров, iot-устройства, всС, с Ρ‡Π΅Π³ΠΎ Β«Π»ΡŒΡŽΡ‚ΡΡΒ» ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ Ρ‚ΠΎΡ‡Π΅ΠΊ Π²ΠΈΠ΄Π°: [<врСмя> β€” <Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ>]. Но Ссли Π±Π°Π·Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с большим ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ малСнький объСм Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹? Π‘ этой ΠΌΡ‹ΡΠ»ΡŒΡŽ взяли InfluxDB Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π§Ρ‚ΠΎ Π΅Ρ‰Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π² InfluxDB

ΠšΡ€ΠΎΠΌΠ΅ упомянутых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‰ΡŒ β€” continuous queries (doc). Π­Ρ‚ΠΎ встроСнный Π² Π‘Π” ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 24 часа Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС записи Π·Π° дСнь, ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ срСднСС ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π½ΠΎΠ²ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π±Π΅Π· написания собствСнных вСлосипСдов.

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ retention policies (doc) β€” настройка удалСния Π΄Π°Π½Π½Ρ‹Ρ… послС ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°. ПолСзно, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° CPU Π·Π° нСдСлю с измСрСниями Ρ€Π°Π· Π² сСкунду, Π° Π½Π° дистанции Π² ΠΏΠ°Ρ€Ρƒ мСсяцСв такая Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½Π°. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

  1. ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ continuous query для Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ;
  2. для ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ удалСния ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‚Π°Ρ€ΡˆΠ΅ Ρ‚ΠΎΠΉ самой Π½Π΅Π΄Π΅Π»ΠΈ.

И Influx Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ΅.

О Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π”Π°Π½Π½Ρ‹Ρ… хранится Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ: ΠΎΠΊΠΎΠ»ΠΎ 70 тысяч Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ Ρ‚ΠΎΡ‡Π΅ΠΊ с Ρ€Ρ‹Π½ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… записСй β€” Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 3000 Ρ‚ΠΎΡ‡Π΅ΠΊ Π² сутки. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΏΠΎ сайту, Π½ΠΎ Ρ‚Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ°Π»ΠΎ ΠΈ ΠΏΠΎ retention policy ΠΎΠ½ΠΈ хранятся Π½Π΅ большС мСсяца.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

Π’ процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ тСстирования сСрвиса Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ всС Π±ΠΎΠ»Π΅Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ эксплуатации 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 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π°ΡŽΡ‚ ошибки точности. НС Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Π±Ρ‹Π»ΠΎ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ, Π½ΠΎ нСприятно.

Π’ ΠΌΠΎΠ΅ΠΌ случаС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΈΠ½Π°Π½ΡΠΎΠ²ΡƒΡŽ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ с высокой Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ. Из-Π·Π° этого Π² ΠΏΠ»Π°Π½Π°Ρ… ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ continuous queries.

3. Continuous queries нСльзя Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π·ΠΎΠ½Π°ΠΌ

На сСрвисС Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° с Π΄Π½Π΅Π²Π½ΠΎΠΉ статистикой ΠΏΠΎ транзакциям. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ дня Π½ΡƒΠΆΠ½ΠΎ ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π·Π° эти сутки. Но дСнь Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½ΠΎΠ΅ врСмя, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π½Π°Π±ΠΎΡ€ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Ρ€Π°Π·Π½Ρ‹ΠΉ. По UTC Π΅ΡΡ‚ΡŒ 37 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² сдвига, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Π’ InfluxDB ΠΏΡ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ сдвиг, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для московского Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (UTC+3):

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

Но Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ запроса Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ. По ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ сгруппированныС ΠΏΠΎ дням Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ Π°ΠΆ Π² 1677 Π³ΠΎΠ΄Ρƒ (InfluxDB ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ ΠΎΡ‚ этого Π³ΠΎΠ΄Π°):

Π“Π½Π΅Π², Ρ‚ΠΎΡ€Π³ ΠΈ дСпрСссия ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с InfluxDB

Для ΠΎΠ±Ρ…ΠΎΠ΄Π° этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ сСрвис Π½Π° UTC+0.

4. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΎΠ² со сравнСниями 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. Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ список Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π·Π° послСдниС сутки, ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько сотСн.

Π£Ρ‚ΠΎΡ‡Π½ΡŽ, Ρ‡Ρ‚ΠΎ Π² InfluxDB ΠΏΠΎ тэгам ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ автоматичСски строится индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ускоряСт запросы. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запросС symbol β€” это тэг.

Π― ΠΏΡ€ΠΎΠ²Π΅Π» стрСсс-тСст для этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° API. Для 25 RPS сСрвСр дСмонстрировал ΠΏΠΎΠ»Π½ΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΡˆΠ΅ΡΡ‚ΠΈ CPU:

Π“Π½Π΅Π², Ρ‚ΠΎΡ€Π³ ΠΈ дСпрСссия ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с InfluxDB

ΠŸΡ€ΠΈ этом процСсс NodeJs совсСм Π½Π΅ Π΄Π°Π²Π°Π» Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния Π΄Π΅Π³Ρ€Π°Π΄ΠΈΡ€ΠΎΠ²Π°Π»Π° ΡƒΠΆΠ΅ Π½Π° 7-10 RPS: Ссли ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Π·Π° 200 мс, Ρ‚ΠΎ 10 ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠΎ сСкундС. 25 RPS β€” Π³Ρ€Π°Π½ΠΈΡ†Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ страдала ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ 500 ошибки.

Π‘ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Influx Π² нашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ: Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Π³Π΄Π΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мноТСству ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² β€” ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ схоТиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ сСрвСр ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½.

Π’Ρ‹Π²ΠΎΠ΄

Π‘Π°ΠΌΡ‹ΠΉ Π³Π»Π°Π²Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° β€” нСльзя Π±Ρ€Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ Π±Π΅Π· достаточного Π°Π½Π°Π»ΠΈΠ·Π°. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ скрининг ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΎΠ² Π½Π° github ΠΌΠΎΠ³ Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Ρ€Π°Ρ‚ΡŒ InfluxDB Π² качСствС основного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ….

InfluxDB Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄ΠΎΠΉΡ‚ΠΈ ΠΏΠΎΠ΄ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π»Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, эта Π‘Π” Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ потрСбностям ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ косячит.

Π’ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π²Π΅Ρ€ΡΠΈΡŽ 2.0.0-beta, остаСтся Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ вСрсии Π±ΡƒΠ΄ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ. А я ΠΏΠΎΠΊΠ° ΠΏΠΎΠΉΠ΄Ρƒ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ TimescaleDB.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com