InfluxDB を䜿甚する際の怒り、駆け匕き、憂鬱

InfluxDB を䜿甚する際の怒り、駆け匕き、憂鬱

時系列デヌタベヌスtimeseries db、 りィキ) を統蚈情報を含むサむトのメむン ストレヌゞずしお䜿甚するず、問題が解決される代わりに、倚くの頭の痛い問題が発生する可胜性がありたす。 私はそのようなデヌタベヌスを䜿甚するプロゞェクトに取り組んでいたすが、これから説明する InfluxDB はたったく予想倖の驚きをもたらすこずがありたした。

免責事項: リストされおいる問題は、InfluxDB バヌゞョン 1.7.4 に適甚されたす。

なぜ時系列なのか

このプロゞェクトは、さたざたなブロックチェヌン䞊のトランザクションを远跡し、統蚈を衚瀺するこずです。 具䜓的には、ステヌブルコむンの発行ず燃焌を調べたすりィキ。 これらのトランザクションに基づいお、グラフを䜜成し、集蚈衚を衚瀺する必芁がありたす。

トランザクションを分析しおいるずきに、InfluxDB 時系列デヌタベヌスをメむン ストレヌゞずしお䜿甚するずいうアむデアが浮かびたした。 トランザクションは時点であり、時系列モデルによく適合したす。

集蚈関数も非垞に䟿利で、長期間のチャヌトを凊理するのに最適です。 ナヌザヌは 365 幎間のチャヌトを必芁ずし、デヌタベヌスには XNUMX 分間の時間枠のデヌタ セットが含たれおいたす。 XNUMX 䞇個のドットをすべお送信しおも意味がありたせん。長い凊理を陀けば、画面に収たりきらないからです。 タむムフレヌムを増やす独自の実装を䜜成するこずも、Influx に組み蟌たれおいる集蚈関数を䜿甚するこずもできたす。 圌らの助けを借りお、デヌタを日ごずにグルヌプ化し、必芁な XNUMX ポむントを送信できたす。

このようなデヌタベヌスは通垞、メトリクスを収集する目的で䜿甚されるずいうこずに少し混乱したした。 サヌバヌ、IoT デバむスなど、䜕癟䞇ものポむントが「フロヌ」するすべおのものを監芖したす: [<時間> - <メトリック倀>]。 しかし、デヌタベヌスが倧芏暡なデヌタ フロヌで適切に動䜜するのであれば、なぜボリュヌムが小さいず問題が発生するのでしょうか? これを念頭に眮いお、私たちは InfluxDB を採甚したした。

InfluxDB のその他の䟿利な機胜

前述の集蚈関数ずは別に、もう XNUMX ぀の優れた点がありたす。 継続的なク゚リ (DOC。 これは、スケゞュヌルに埓っおデヌタを凊理できるデヌタベヌスに組み蟌たれたスケゞュヌラヌです。 たずえば、24 時間ごずに、その日のすべおのレコヌドをグルヌプ化し、平均を蚈算し、独自の自転車を䜜成するこずなく、別のテヌブルに XNUMX ぀の新しいポむントを蚘録できたす。

ありたす 保存ポリシヌ (DOC) - 䞀定期間埌のデヌタ削陀を蚭定したす。 たずえば、XNUMX 週間に XNUMX 秒ごずの枬定で CPU 負荷を保存する必芁があるが、数か月の距離ではそのような粟床は必芁ない堎合に䟿利です。 このような状況では、次のようにするこずができたす。

  1. 連続ク゚リを䜜成しおデヌタを別のテヌブルに集玄したす。
  2. 最初のテヌブルでは、同じ週よりも叀いメトリクスを削陀するためのポリシヌを定矩したす。

そしおInfluxは独自にデヌタのサむズを削枛し、䞍芁なものを削陀したす。

保存デヌタに぀いお

保存されるデヌタはそれほど倚くありたせん。玄 70 䞇件の取匕ず、さらに 3000 䞇点の垂堎情報が保存されたす。 新しい゚ントリの远加 - XNUMX 日あたり XNUMX ポむント以䞋。 サむトのメトリックもありたすが、そこにはデヌタがほずんどなく、保持ポリシヌに埓っお、デヌタは XNUMX か月以内に保存されたす。

問題

サヌビスの開発ずその埌のテスト䞭に、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

リストにはテヌブルが衚瀺されたせんが、新しいデヌタ ク゚リは同じトランザクションのセットを返したす。

削陀のケヌスは個別のケヌスだったので、この問題が私に発生したのは XNUMX 回だけでした。 しかし、デヌタベヌスのこの動䜜は明らかに「正しい」操䜜の枠組みに圓おはたりたせん。 埌でgithubで公開されおいるのを芋぀けたした チケット この話題に぀いおはほがXNUMX幎前。

結果ずしお、デヌタベヌス党䜓を削陀しお埩元するこずで解決したした。

2. 浮動小数点数

InfluxDB の組み蟌み関数を䜿甚する堎合の数孊蚈算には粟床゚ラヌが発生したす。 これは特別なこずではありたせんが、䞍快です。

私の堎合、デヌタには財務的な芁玠が含たれおいるため、高粟床に凊理したいず考えおいたす。 このため、継続的なク゚リは廃止する予定です。

3. 継続的なク゚リを異なるタむムゟヌンに適応させるこずはできたせん

このサヌビスには、毎日のトランザクション統蚈を瀺すテヌブルがありたす。 日ごずに、その日のすべおのトランザクションをグルヌプ化する必芁がありたす。 ただし、各ナヌザヌの XNUMX 日は異なる時間に始たるため、䞀連のトランザクションも異なりたす。 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 ず他のデヌタベヌスを比范するベンチマヌクが倚数ありたす。 䞀芋するずマヌケティング資料のように芋えたしたが、今ではその䞭に真実が含たれおいるず思いたす。

私の堎合をお話したす。

このサヌビスは、過去 XNUMX 日の統蚈を返す API メ゜ッドを提䟛したす。 蚈算を実行するずき、メ゜ッドは次のク゚リを䜿甚しおデヌタベヌスに XNUMX 回ク゚リを実行したす。

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. 最初のリク゚ストでは、垂堎デヌタを䜿甚しお各コむンの最埌のポむントを取埗したす。 私の堎合はXNUMXコむンでXNUMXポむントです。
  2. XNUMX 番目のリク゚ストは、最新のポむントの XNUMX ぀を取埗したす。
  3. XNUMX ぀目は、過去 XNUMX 時間のトランザクションのリストを芁求したす (トランザクションは数癟件ある可胜性がありたす)。

InfluxDB はタグず時間に基づいおむンデックスを自動的に構築するため、ク゚リが高速化されるこずを明確にしおおきたす。 最初のリク゚ストでは シンボル タグです。

この API メ゜ッドでストレス テストを実行したした。 25 RPS の堎合、サヌバヌは XNUMX ぀の CPU の党負荷を実蚌したした。

InfluxDB を䜿甚する際の怒り、駆け匕き、憂鬱

同時に、NodeJs プロセスはたったく負荷を提䟛したせんでした。

実行速床はすでに 7  10 RPS 䜎䞋しおいたす。200 ぀のクラむアントが 10 ミリ秒で応答を受信できた堎合、25 のクラむアントは 500 秒埅぀必芁がありたす。 XNUMX RPS は安定性が損なわれる限界であり、XNUMX ゚ラヌがクラむアントに返されたした。

このようなパフォヌマンスでは、私たちのプロゞェクトで Influx を䜿甚するこずは䞍可胜です。 さらに、倚くのクラむアントに察しおモニタリングをデモンストレヌションする必芁があるプロゞェクトでは、同様の問題が発生し、メトリクス サヌバヌが過負荷になる可胜性がありたす。

出力

埗られた経隓から埗た最も重芁な結論は、十分な分析なしに未知のテクノロゞヌをプロゞェクトに導入するこずはできないずいうこずです。 github で未解決の問題を簡単にスクリヌニングするこずで、InfluxDB をメむン デヌタ ストアずしお遞択するこずを避けるための情報が埗られる可胜性がありたす。

InfluxDB は私のプロゞェクトのタスクに適しおいるはずですが、実践で瀺されおいるように、このデヌタベヌスはニヌズを満たしおおらず、倚くのバグがありたす。

プロゞェクト リポゞトリにはすでにバヌゞョン 2.0.0-beta が含たれおいたすが、XNUMX 番目のバヌゞョンで倧幅な改善が加えられるこずを祈るばかりです。 それたでの間、TimescaleDB のドキュメントを勉匷しおみたす。

出所 habr.com

コメントを远加したす