influxDBの全件読込の性能試験をしました
1.概要
前回、influxdbとpostgresqlのcsvからのinsert性能比較をしたので、今回はselectで全件を読む性能比較をしてみました。select * from tableの実行時間を比較すると良いと考えたのですが、influxdbで実行するのが案外難しい。その内容を記述します。
2.詳細
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
(1) influxdb Tagなし
Insert処理 35秒
Select処理 25秒
(2) influxdb Tagあり(条件は前回と同じ)
Insert処理 100秒
Select処理 34秒
実行したマシンは同じi3-7100環境です。処理時間に前回と差異があります。実行時のメモリ利用状態が影響しそうですが、複数回実行していません。今回は誤差と考えて傾向のみ見ます。結果から100万件の壁はinsertの時に影響が大きく出るようです。
(3) postgresql 2次キーあり 上記(2)と同一条件
Insert処理 7秒
Select処理 7秒
※ GoogleAIの参考回答例(参考なので熟知した方の意見ではありません)
質問:Influxdbにcsvをimport後、csvにexportすると結果csvが同じにならない。どの程度で発生するのか?
回答:InfluxDBにおいて、インポートしたCSVとエクスポートした結果が一致しない現象は、ほぼすべてのケースで発生します。これは不具合ではなく、InfluxDBがデータを「CSV形式」のまま保持せず、内部で「Line Protocol」という独自のデータ構造に変換して格納するためです。
3.所見
入力したデータから希望する出力結果を得られないのでは、databaseと言えない気もしますが、RDBでは超えられない規模の限界を超える手段を提供しているのだと思います。大量のデータ処理が必要な場所はあり、RDBで実現できないのであれば、他の手段を探すしかなく、そのために犠牲となる部分があっても仕方ない気もします。
Docker Containerを利用してPC1台で試験する範囲ではPostgreSQLの圧勝です。InfluxDBはクラスタ機能を利用して、列単位に実行マシンを分けることができるようですが、PostgreSQLにそのような機能は標準的手段では見当たりません。クラスタに分割しないと処理できないデータ規模に達するとinfluxdbの価値が発揮されるような気はします。
参考
InfluxDB
https://ubuntults.blog.fc2.com/blog-entry-233.html
influxDB (2)
https://ubuntults.blog.fc2.com/blog-entry-247.html
コメント
コメントを投稿