https://blog.mocobeta.dev/posts/feed.xml

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::Tablelancedb::table::BaseTable: テーブルを表すstructとtrait。
  • lancedb::table::NativeTable: BaseTableの,ファイルシステムライクなストレージをベースとした実装。ひとつのファイルに対応する。
  • lancedb::embeddings::EmbeddingRegistrylancedb::embeddings::MemoryRegistry: embeddingモデルのレジストリを表すtraitとその実装。
  • lancedb::embeddings::EmbeddingFunction: embeddingモデルを表すtrait。各種embeddingモデルはこのtraitをimplする。
  • lancedb::query::Querylancedb::query::VectorQuery: スカラークエリ及び全文検索クエリを表すstructと,ベクトル検索クエリを表すstruct。query周りは込み入っていて,インタフェースがあまり整理されていない印象。

関連プロジェクト

LanceDB自体は,以下のコア処理を行うライブラリのファサードとして機能します。 そのため,LanceDBのコードベース自体はそれほど大きくないですが,深く理解するにはこれらもまとめて理解する必要があり,先は長そう。

Lance

列指向データフォーマット/データベースエンジン。

Apache Arrow

列指向データフォーマットのメモリ表現と,それを操作するためのライブラリ群。Rustのバインディングは arrow-rs

Apache DataFusion

Rustで実装されたSQLクエリエンジン。