LinuxMintでInfluxDBのネット情報を調べてPostgreSQLと比較しました

1.概要

時系列のdatabaseであるInfluxDBに関して少し調べてみました。時系列データの処理性能に優れたdatabaseとのことです。まず、ネット上の評価から調べてみることにしました。更に実機確認も行いました。その内容を記述します。

2.詳細

(1)ネット上の評価

参考資料によるとRDBがTableとRowとColumnを利用するのに対して、InfluxDBはmeasurementとpointとTimeとTagとFieldを利用します。少し複雑な感じです。pointに含まれる要素がTime以外は必須でない点が特徴のようです。

RDBはCRUD(Create,Read,Update,Delete)の操作ができますが、InfluxDBはCR(Create,Read)でUD(Update,Delete)は制限された機能しか利用できません。

RDBの操作はSQLですが、InfluxDBの操作はInfluxQLとFluxがあり、InfluxQLはSQLに似ています。私が調べた範囲ではInfluxDB v1はInfluxQL、InfluxDB v2はFluxを利用するのが基本のようです。

DockerHubのInfluxDBを調べるとv1系の方が利用されている気がします。v2系もリビジョンは上がっていますが、主流化になっていな気がします。v3はenterpriseと記述されているので有償かもしれません。拡張性のあるクラスタ構成は有償版でサポートされるとの記載もありました。

気になった点はInfluxDBには上限が設定されており、系列の総数がデフォルトで100万に制限されているようです。 この上限を増やすことはできますが、系列数がこの上限を超えるとのパフォーマンスが低下するとのことです。時系列データは秒単位で24時間処理すると3600*24=86400件、100万件に達するには1000000/86400=11.57日となり、余りにも短い気がします。

InfluxDBとPostgreSQLの性能評価の参考資料を参照した範囲では、InfluxDBが汎用的な処理に優れている気はしません。時系列データを活かした処理に利用すると性能を発揮する気がしました。

(2) influxDBとPostgreSQLのcsvからのinsert性能試験をしました

前回influxdbの概要をネットで調べたので、実際にpostgresqlと性能評価をしました。特に気になった点は100万件の壁があるか否かです。私が評価した範囲では最良の条件であるdate time以外のtag(2次キー)項目がない場合でもpostgresqlに及びません。また、100万件の壁はあるようですが、postgresqlとの性能差はもっと基本的な問題のような気がします。その内容を記述します。

試験環境はi3-7100, Memory 16GB, SSD 500GB, ubuntu-22.04です。
influxdb(v2),postgresql(v15)をdockerコンテナで動作して試験をしました。
データは下記5項目です。
データの例
date       unixtime   number  real      real   
2025-10-12,1762253561,2000000,0.0239312,0.956495
データ量は10,50,100,200万件のデータで処理をしました。
データのinsert試験のみ実施、方式はcsvからのimportです。

(a) influxdbでunixtimeだけがキーでtag項目なし
10万件     2秒
50万件     14秒
100万件    18秒
200万件    25秒

(b) influxdbとして一番厳しいnumber項目をtagに指定
10万件     6秒
50万件     25秒
100万件    50秒
200万件    120秒

(c) 比較としてpostgresqlでprimary keyをunixtime、numberをindexに指定
この条件は上記(2)と同じです。
10万件     0秒(1秒以下)
200万件    7秒

個人的な主観ですが、時間を積み重ねたVersion差が性能差になっている気がします。
insert性能では、influxdb v2ではpostgresql v15に歯が立ちません。

(3) influxDBの全件読込の性能試験をしました

前回、influxdbとpostgresqlのcsvからのinsert性能比較をしたので、今回はselectで全件を読む性能比較をしてみました。select * from tableの実行時間を比較すると良いと考えたのですが、influxdbで実行するのが案外難しい。その内容を記述します。

influxdb v2を利用しています。csvからのinsertはinfluxコマンドを利用しました。そこで同じようにinfluxコマンドを利用した登録データ全件の参照処理が案外難しい。登録したcsvと同じ出力を得ることが難しいとは思っていなかったのでショックでした。select count(*) from tableのようにデータ件数をカウントすることも難しい。GoogleAIに尋ねて色々試したのですが、Postgresqlと比較する良い手段が見つからなかったので、influx v1 shellを利用することにしました。(※ GoogleAIの参考回答例参照)

influxdb v2でinflux v1 shellを利用するとselect * from tableが利用できます。しかし、対話モードでしか動作しないために、shell化して実行時間計測に課題がありました。仕方なく、時間計測処理を別途作成して、手作業で起動停止をすることにしました。この辺もGoogleAIに尋ねたのですが、Docker Containerを利用していることで制限があり、解決できませんでした。

データは前回と同じ形式で新しく作成しました。
データ項目は下記5項目で、データ件数は200万件です。
データの例
date       unixtime   number  real      real   
2025-10-12,1762253561,2000000,0.0239312,0.956495

(a) influxdb Tagなし
Insert処理  35秒
Select処理  25秒

(b) influxdb Tagあり(条件は前回と同じ)
Insert処理  100秒
Select処理  34秒

実行したマシンは同じi3-7100環境です。処理時間に前回と差異があります。実行時のメモリ利用状態が影響しそうですが、複数回実行していません。今回は誤差と考えて傾向のみ見ます。結果から100万件の壁はinsertの時に影響が大きく出るようです。

(c) postgresql 2次キーあり 上記(2)と同一条件
Insert処理  7秒
Select処理  7秒

入力したデータから希望する出力結果を得られないのでは、databaseと言えない気もしますが、RDBでは超えられない規模の限界を超える手段を提供しているのだと思います。大量のデータ処理が必要な場所はあり、RDBで実現できないのであれば、他の手段を探すしかなく、そのために犠牲となる部分があっても仕方ない気もします。

Docker Containerを利用してPC1台で試験する範囲ではPostgreSQLの圧勝です。InfluxDBはクラスタ機能を利用して、列単位に実行マシンを分けることができるようですが、PostgreSQLにそのような機能は標準的手段では見当たりません。クラスタに分割しないと処理できないデータ規模に達するとinfluxdbの価値が発揮されるような気はします。

3.所見

次の世代の時系列データベースををネットで検索して調べました。良くわかっていませんが、新しいものなので何かと比較しながら実態を掴む必要があると考えて、PostgreSQLと比較してみました。個人的な感触ですが、単体PC上の性能ではPostgreSQLが上だと思います。

参考

[本ブログ内参照]
Ubuntu/LinuxMintのDocker環境でKey Value Databaseを調べました
ARM64のubuntu-arm64をKVMで動作にチャレンジ

コメント

過去30日間に良く読まれた記事

miniPCのBMAXでWindows11のsecure boot設定漏れでトラブル発生

LinuxMint/ubuntuにWine 11導入を試しました ( LinuxMint 21.3 / 22.3 ubuntu 22.04 / 26.04 Wine 11.0 / 11.6 / 11.8 / 11.13 )

Windows95/98のPCゲームをUbuntu/LinuxMintの最新PCで楽しむ方法 ( KVM / Wine / dosbox-x / midi )