LanceDBのアーキテクチャ
2025-09-15
LanceDB のソースコードを少しずつ読み始めていて,主なstructとtraitの関係をざっと図にしてみました。UMLのクラス図に雰囲気似せていますが,Rustにいわゆる「クラス」はないので,あくまで,関係をUMLっぽく可視化した図です。

図の,クラスのように見える箱は,structまたはtraitを表しています。点線の矢印は,あるstructが矢印の先のtraitをimplしていることを表しています。ひし形の矢印(所有)は,refence count (ARC) を介した所有関係を表しています。<<own>> とラベルがついているのは,reference countではない,通常の所有権を表しています。
なおこの図では,LanceDBのOSS版のみを対象としていて,LanceDB Cloudのクラスは含んでいません。
主要なstruct/trait
lancedb::connection::Connection: データベースへの接続を管理するstruct。一度接続すると,別のデータベースに接続を切り替えることはできないため,実質データベースと同じ。lancedb::database::Database: データベースを表すtrait。lancedb::database::listing::ListingDatabase:Databaseの,ファイルシステムライクなストレージ(ローカルファイルシステムやオブジェクトストレージ)をベースとした実装。ひとつのディレクトリに対応する。lancedb::table::Tableとlancedb::table::BaseTable: テーブルを表すstructとtrait。lancedb::table::NativeTable:BaseTableの,ファイルシステムライクなストレージをベースとした実装。ひとつのファイルに対応する。lancedb::embeddings::EmbeddingRegistryとlancedb::embeddings::MemoryRegistry: embeddingモデルのレジストリを表すtraitとその実装。lancedb::embeddings::EmbeddingFunction: embeddingモデルを表すtrait。各種embeddingモデルはこのtraitをimplする。lancedb::query::Queryとlancedb::query::VectorQuery: スカラークエリ及び全文検索クエリを表すstructと,ベクトル検索クエリを表すstruct。query周りは込み入っていて,インタフェースがあまり整理されていない印象。
関連プロジェクト
LanceDB自体は,以下のコア処理を行うライブラリのファサードとして機能します。 そのため,LanceDBのコードベース自体はそれほど大きくないですが,深く理解するにはこれらもまとめて理解する必要があり,先は長そう。
Lance
列指向データフォーマット/データベースエンジン。
Apache Arrow
列指向データフォーマットのメモリ表現と,それを操作するためのライブラリ群。Rustのバインディングは arrow-rs。
Apache DataFusion
Rustで実装されたSQLクエリエンジン。