InfluxDB には Continuous Query と呼ばれる、クエリをあらかじめ仕込んでおくと、 逐次的にデータを Series (RDBMS でいう table のようなもの)に格納してくれる機能がある。

Norikra のように逐次的にクエリを実行することができるということだ。

そこで、クエリの機能的にはどちらのほうが優れているだろうか、と思い比較してみた。InfluxDB が十分な機能を持っているのであれば、データの永続化も見据えて、InfluxDB を利用するのも1手かな、と。

TL; DR

Norikra の勝ち

機能カタログ

カタログ表を書くだけ書いて、本文書は終わりとしたい。

サポートしている集計関数

NorikraInfluxDB補足
COUNToo
MINoo
MAXoo
AVGoo
MEANoo
MODExo
MEDIANxo
DISTINCToo
PERCENTILEooNorikra は UDFとして実装
HISTOGRAMxo
DERIVATIVExo
SUMoo
STDDEVxo
FIRSToo
LASToo
MAXBYox
MINBYox

※ Norikra は UDF をサポートしているので、足りない場合は自分で作れる

クエリの機能

NorikraInfluxDB補足
time batch windowoo一定時間おきに集計する機能はもちろん両方サポート
externally timed batch windowoxメッセージ中の time フィールドをみて集計
サブクエリox
JOINoo
MERGE クエリxotable を複数指定して結果をマージする InfluxDB の機能。
table 名に正規表現を指定可能
クエリグループoxクエリにグループ名をつけられる
プログラムコードoxNorikra のクエリには Java コードを書ける
ネストしたJSONoxJSONがネストしていた場合に、
parent.child のようにフィールドを指定できる
GROUP BYoo
HAVINGox
ORDER BYoInfluxDB には order がある
(補足追記: time フィールド専用のソート機能)
UDFox

結論

実の所、調べる前から感覚的にわかっていたのだが、Norikra の圧勝であった。 とはいえ、InfluxDB はストレージであり、Norikra はオンメモリエンジンであるのだから、InfluxDB の価値は決して損なわれるものではない。