Apache DataFusion とは
また SedonaDB の補足記事です。今回は、SedonaDB のクエリエンジン部分を担っている Apache DataFusion について紹介します。SedonaDB 自体の紹介については、以下をご参照ください。
Apache DataFusion とは
DataFusion は、Rust 製のクエリエンジンです。
「クエリエンジン」というのは、ユーザーが投げたクエリを解釈し、データに対する処理を行うシステムのことです。それってデータベースとどう違うの?、というのがまず浮かぶ疑問ですが、クエリエンジンはデータベースの構成要素のひとつです。データベースからストレージや権限管理などを取り去った部分、とも言えます。
要は、DataFusion は(単体で使うこともできますが、)「パーツ」として他のシステムに組み込むためのものです。実際、世の中には DataFusion を使ったデータベースやデータに関連するプロダクトがたくさん存在します。
Apache DataFusion を使っているプロダクト
Cloudflare R2 SQL
少し前に Cloudflare から発表された R2 SQL は、Cloudflare のオブジェクトストレージである R2 に対してサーバレスで SQL を実行できるサービスです。DataFusion は、このクエリを分散実行するワーカーの中で使われています。
InfluxDB
InfluxDB は、InfluxData 社が開発している時系列データベースです。OSS として公開されていると同時に、商用のクラウドサービスとしても運用されています。
InfluxDB は、元々 Go で書かれていたのを Rust で書き直した、という経緯があります。そのクエリエンジン部分を担っているのが DataFusion です。以下はその Rust 移行のアナウンスのブログ記事ですが、これが 2020 年のことで、それ以来 DataFusion の開発にもコミットし続けています。
Rerun
Rerun は、フィジカル AI 開発のためのデータ可視化プロダクトです。特にロボティクスやコンピュータービジョンといった分野で、複雑なマルチモーダル(多様な形式)データを効率的にデバッグし、分析するために設計されています。大量のデータに対して効率的にクエリするために DataFusion が使われています。
このプロダクト、私はぜんぜん門外漢なんですが、目の付け所が面白いので応援しています。ちなみに egui の開発者の人(emilkさん)が共同創業者の会社です。
Apache DataFusion Comet
Comet は、Apache Spark のアクセラレーターです。「アクセラレーター」というのが何なのかあまりよくわかっていないのですが、Spark クエリを解釈して実際にデータ処理を行う部分を肩代わりしてくれるもののようです。Comet は、Apple 社内で開発されて Apache プロジェクトに寄贈されたものです。
Apache DataFusion の強み
というところで、DataFusion はすでに商用サービスでも実績があるプロダクトなんだなあ、ということがなんとなく伝わったでしょうか。Apache Arrow とともに、Rust のデータエコシステムの中心的存在のひとつです。
そんな DataFusion の強みの一つは、開発者が Apache Arrow の開発とも近いところにいることです。前回の記事で少し触れた CRS のサポートは、同じ Apache Arrow を使っているプロダクト(DuckDB とか Polars とか)でもなかなか対応できていないのですが、DataFusion は少し前に対応に成功しました。これは、Apache Arrow 自体の仕様(メタデータの持ち方)と密接に関わるところですが、その仕様に詳しいエンジニアが多く関わっていることで実現できたのように思われます。
DuckDB のように一つのプロダクトとして尖っていくというかたちではなく、エコシステムの中で成長していっているのが DataFusion の面白い点だなあと感じています。
まとめ
信頼と安心の Apache DataFusion を使ってるので SedonaDB の期待が高まりますね。
Discussion