時系列データベース InfluxDBを使ってみた

この記事はmediba Advent Calendar 2022の12日目にエントリーされた記事です。

はじめに

株式会社medibaの@zuuundayoと申します。テクノロジー統合UNIT内のSREチームのメンバーです。 Advent Calendar向けの良いネタがあまり思いつかなかったので 個人で時系列データベースを触ったことを共有します(ちょっと今更感ありますが)。

時系列データベースとは

雑に説明すると時間と値の組み合わせデータ(時系列データ)を対象としたデータベースです。 リレーショナルデータベースなどもこのようなデータの取り扱いが可能ですが、 特化したデータベースが作られているのには理由があります。 IoT製品のセンサーから観測されたデータなどはリアルタイムに利用されたりするので絶え間なくデータが送り続けられて来たりします。 このような状態で取りこぼさずにデータを格納したり、時間や値を元にデータを素早く引っ張り出す機能にニーズがあるためです。

IoTが幅広く普及してきた近年では、Amazon Timestreamなどのマネージドな時系列データベースも登場したりしています。

なんで触ろうと考えたのか

個人でリアルタイムに投票するシステムを作ろうと考えました。 RDBを採用すると汎用的な用途ゆえ機能が多すぎてオーバースペックな気がするし、 シンプルな形でデータを簡単かつ高速に集計する仕組みが良かったので時系列データベースを採用してみることにしました。

InfluxDBとは

InfluxDB https://www.influxdata.com はオープンソースな時系列データベースです。 いろいろな方が性能や使い勝手を比較されていますが それらを参考にお手軽に利用できそうだなと判断して採用しました。

他の時系列データベースはRDBの拡張モジュールだったり、有料だったりしたので お手軽感のあるこちらを選んでます。

InfluxDBにはマネージド版のInfluxDB Cloudが存在しており、なおかつFreeプランが存在しているため 個人での利用に嬉しいメリットがあります。今回はマネージド版のFreeプランを使ってます。

セットアップ

  • InfluxDBのサイトからInfluxDB Cloudの会員登録を行います。登録すると管理コンソールにアクセスできます。
image
  • まず最初にBucketsメニューでBucketを作成します。BucketとはRDBのテーブルみたいなものでデータを放り込む場所になります。
  • Create Bucketボタンを押すとメニューが出てくるので名前とデータの有効期限を設定します。
  • Advanced ConfigurationではBucket Schema Typeを選べます。今回はImplicitを選びます。
  • Implicitを選ぶとSchemaが暗黙的となりSchemaが強制されません。
  • Explicitを選ぶとSchemaが強制されるので形式があっていないデータは格納できなくなります。
  • ただし、一度スキーマを設定するとあとからカラムを変更できず新規追加しかできないそうなのでご注意を。
image

利用方法(簡易的に試す方法)

結構親切に体験する方法を教えてくれるのであまり書くことないですが、注意事項等書いておきます。

  • バケットが作成できるとバケットの一覧から作成したバケットの欄のADD DATAボタンをクリックします。
  • クリックするとメニューパネルが出てくるのでClient Libraryをクリックします。CSV Uploadなどのボタンもあるのでからもデータをインポートできるようです。
image
  • Client Libraryをクリックすると様々な言語が出てくるのでお好きな言語をクリック。ここではPythonを選びます。
image
  • ページを移動すると親切にウィザード形式でセットアップ方法を指示してくれます。
  • まずはローカルにクライアントモジュールをインストールします。
  • pip3 install influxdb-client
  • 次にトークンを発行し環境変数に追加するよう指示されます。
  • ウィザードで自動的に発行されたトークンはすべての権限が付与されたものになるので非推奨であるそうです。実際に利用する際はAPI Tokensのメニューから特定のバケット等に権限を絞ったトークンを発行して利用しましょう。
  • クライアントの初期コードが出てくるので指示通り、Pythonのインタプリタにコードを入力する。
  • 続いて今回作成したバケットにデータを送信するコードが出てきます。今回作成したバケットを選択するとコードも自動的に修正してくれます。
  • ここでのコードは0から4までの値を1秒おきに送信するコードです。
  • 下の欄にデータが取得されたかを確認するボタンがあるので、確認してみてください。うまく行ってると"Connection Found!“と表示されます。
  • 次の画面では送信したデータをFlux Queryで確認する方法が表示されます。管理画面のData Explorer上でもクエリ叩けますがPython上で叩くコードも表示されます。
  • うまく行ってると下記のように時系列データが表示されます。Data Explorerで表示させると画像みたいな感じです。
image
image

利用してみての感想

Cloud版はマネージドなだけあってセットアップを簡単に行うこともできましたし、 APIのリファレンスなどのドキュメントも分かりやすい方なので使い勝手は良いです。 何よりシンプルな設定でサクッと時系列データをとりあえず保管して可視化するには便利なので皆さんも利用してみてはいかがでしょうか。 現在はそこまで大きなワークロードで活用しているわけではないのでデメリットは使っているうちに見えてくると思います。 ここには書いていませんがFlux Queryは監視ツールなどによくある時系列データに対する様々な集計関数があったりするので使ってみると面白いですよ。

終わりに

個人的な試行をAdvent Calenderにしてしまいましたが、決して会社の中で何もやっていないわけではないですという言い訳をしておきます(汗)。

微妙にネタかぶりしてしまったんです。はい。 今弊社のSREチームでは、絶賛メンバーを募集しております。 チームメンバーには業務だけでなくプライベートでも様々な活動されている方々もいらっしゃるので雰囲気を知りたい方はお気軽にお問い合わせください ( https://hrmos.co/pages/mediba/jobs/1100000001 )。 最近はフルリモート勤務での採用も開始してます!