Supersonicは列指向データベース用のクエリエンジンライブラリで、データ転送プリミティブ型を提供する。Googleによれば、このライブラリは“キャッシュを上手く使うアルゴリズム、SIMD、ベクトル化処理を利用して、高度にパイプライン化されたCPUを活用する”ために“超高速”で動作する。特徴は、
- キャッシュの利用
- SIMD(Single Instruction Multiple Data)の利用
- カスタムのデータ構造
- 障害のハンドリング
- 標準的な列指向処理のサポート
- 特殊な式
Supersonicは多くの操作をサポートする。操作はテーブル全体に適用される。また、操作木を構成することもできる。
- 集約: SUM、MIN、MAX、COUNT、CONCAT、FIRST、LAST
- 計算 – 式を操作に変換する
- フィルタ – 行をフィルタする
- 生成 – 一定数のゼロ列の行を生成する
- 制限 – 前の操作の結果の行数を制限する
- 並べ替え – 前の操作の結果を並び替える
操作とは違い、式は行レベルに適用して列の値の計算を実行できる。また、式木を構成することも出来る。次のような式がある。
- 終端 – ConstInt32、ConstBool、ConstDataType、RandInt32などのプリミティブな型を持つノード
- 演算 – Plus、Minus、Multiplyなど
- 比較演算 – Equal、Less、Greater、IsOdd
- 日付/時間 – Now、Day、Month、Year、Hour、Minute、Second、AddDaysなど
- 論理演算 – And、Or、AndNot、Xor、Not
- 制御フロー – If、IsNull、IfNull、Case
- 数値計算 – Exp、Sin、Cos、Abs、Round、Floor、Trunk、Sqrt、Powerなど
- 文字列 – ToString、Concat、Length、Trimなど
SupersonicはC++で書かれており、組み込みのデータストレージフォーマットを持っていないが、“ぜひ作成したい”と考えている。現時点ではデータはメモリ上に保持される。
Supersonic Query EngineのライセンスはApache License 2.0。Google Codeからダウンロード可能。ソースには操作と式の使い方を示したたくさんの例が含まれている。
画像はSupersonicチームが作成した投稿したもので、操作木のベンチマーク結果を表している。100万行を含むひとつのテーブルを処理した場合は、表示に60マイクロ秒で167億/秒、フィルタに1.03ミリ秒で100行/秒、次の計算処理が25マイクロ秒で4120万行/秒、他のフィルタと結合処理をして、全体でかかった時間が22.1ミリ秒だ。