GitHub概要
lancedb/lancedb
Developer-friendly, embedded retrieval engine for multimodal AI. Search More; Manage Less.
スター7,182
ウォッチ36
フォーク559
作成日:2023年2月28日
言語:Python
ライセンス:Apache License 2.0
トピックス
approximate-nearest-neighbor-searchimage-searchnearest-neighbor-searchrecommender-systemsearch-enginesemantic-searchsimilarity-searchvector-database
スター履歴
データ取得日時: 2025/7/30 03:04
LanceDBとは
LanceDBは、「Search More; Manage Less」の哲学を掲げる開発者フレンドリーなマルチモーダル検索エンジンです。AIアプリケーション向けに設計されたオープンソースのベクトルデータベースで、大規模なマルチモーダルデータでの埋め込み管理、クエリ、検索を提供します。組み込み版とサーバーレス版の両方を提供し、さまざまな規模とアーキテクチャに対応します。
主な特徴
柔軟なデプロイメント
- 組み込みモード(OSS): インプロセスで動作し、低遅延アクセスとセルフホスト簡素化を実現
- サーバーレスクラウド: ストレージとコンピュートを分離したSaaSソリューション(最大100倍のコスト削減)
- サーバーなし・管理なし: 運用の手間を最小限に抑制
マルチモーダル対応
- 実際のデータ保存: 埋め込みとメタデータだけでなく、画像、動画、テキスト、音声ファイルなども保存
- Lance形式: 自動データバージョニングと高速検索・フィルタリングを提供
- 統合管理: 複数の種類のデータを一元管理し、複雑なデータパイプラインを簡素化
高性能アーキテクチャ
- Rust製コア: Lance列指向データ形式上に構築され、パフォーマンスMLワークロードと高速ランダムアクセスに最適化
- ゼロコピーアクセス: Apache Arrow統合により共有メモリでの真のゼロコピーアクセス
- SIMD・GPU加速: 最新のハードウェア機能を活用した高速化
包括的検索機能
- ベクトル類似検索: 数十億ベクトルをミリ秒で検索する最先端インデックス
- フルテキスト検索: テキストベースの検索機能
- ハイブリッド検索: ベクトルとテキストを組み合わせた検索
- SQLクエリ: DataFusionによるSQL インターフェース
最新機能(2025年)
- LanceDBクラウド: 2025年6月1日にローンチされたサーバーレスクラウドサービス
- 自動データバージョニング: 追加インフラなしでデータバージョン管理
- GPU支援: ベクトルインデックス構築のためのGPUサポート(Python SDK)
メリット・デメリット
メリット
- パフォーマンスMLワークロード向けに最適化された設計
- マルチモーダルデータの統合管理
- 組み込みからクラウドまで柔軟なデプロイメント
- Apache Arrowエコシステムとの緊密な統合
- ランダムアクセスでParquetの1000倍高速
- 自動データバージョニング機能
デメリット
- 比較的新しいプロジェクトで実績が少ない
- 学習リソースが他のベクトルDBより限定的
- エンタープライズ機能は有償版が必要な場合がある
主要リンク
インストール方法
Python
pip install lancedb
JavaScript/TypeScript
npm install @lancedb/lancedb
Rust
[dependencies]
lancedb = "0.11.0"
使用例
基本的な使用方法(Python)
import lancedb
import numpy as np
# データベース接続
uri = "./sample-lancedb"
db = lancedb.connect(uri)
# データ準備
data = [
{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},
{"vector": [5.9, 26.5], "item": "bar", "price": 20.0}
]
# テーブル作成とデータ挿入
table = db.create_table("my_table", data=data)
# ベクトル検索
result = table.search([100, 100]).limit(2).to_pandas()
print(result)
マルチモーダルデータの例
import lancedb
from PIL import Image
import requests
from io import BytesIO
# データベース接続
db = lancedb.connect("./multimodal-db")
# 画像データを含むテーブル作成
data = [
{
"image_url": "https://example.com/image1.jpg",
"description": "美しい風景写真",
"vector": [0.1, 0.2, 0.3, 0.4] # 埋め込みベクトル
},
{
"image_url": "https://example.com/image2.jpg",
"description": "都市の夜景",
"vector": [0.5, 0.6, 0.7, 0.8]
}
]
table = db.create_table("images", data=data)
# 類似画像検索
query_vector = [0.15, 0.25, 0.35, 0.45]
results = table.search(query_vector).limit(5).to_pandas()
print(results)
フルテキスト検索との組み合わせ
import lancedb
db = lancedb.connect("./hybrid-search-db")
# フルテキストインデックス付きテーブル作成
data = [
{
"text": "機械学習とAIの基礎",
"content": "この記事では機械学習の基本概念について説明します",
"vector": [1.0, 2.0, 3.0]
},
{
"text": "深層学習の応用",
"content": "深層学習を実世界の問題に適用する方法を解説",
"vector": [4.0, 5.0, 6.0]
}
]
table = db.create_table("articles", data=data)
table.create_fts_index("content") # フルテキストインデックス作成
# ハイブリッド検索(ベクトル + フルテキスト)
results = (
table.search([1.5, 2.5, 3.5])
.where("content MATCH '機械学習'")
.limit(10)
.to_pandas()
)
print(results)
JavaScript/TypeScript の例
import * as lancedb from '@lancedb/lancedb';
async function main() {
// データベース接続
const uri = './sample-lancedb';
const db = await lancedb.connect(uri);
// データ準備
const data = [
{ vector: [3.1, 4.1], item: 'foo', price: 10.0 },
{ vector: [5.9, 26.5], item: 'bar', price: 20.0 }
];
// テーブル作成
const table = await db.createTable('my_table', data);
// 検索実行
const results = await table.search([100, 100]).limit(2).toArray();
console.log(results);
}
main().catch(console.error);
統合とエコシステム
Apache Arrowエコシステム
- Pandas: DataFrameとの直接統合
- Polars: 高性能データフレーム操作
- DuckDB: 高速分析クエリ
- Pydantic: データ検証とシリアライゼーション
AIフレームワーク統合
- LangChain: RAGアプリケーション構築
- LlamaIndex: 文書検索とQAシステム
- Haystack: NLP パイプライン
クラウドストレージ
- AWS S3
- Google Cloud Storage
- Azure Blob Storage
- ローカルファイルシステム
まとめ
LanceDBは、マルチモーダルAIアプリケーション向けに設計された次世代のベクトルデータベースです。Lance列指向形式による高性能、マルチモーダルデータの統合管理、柔軟なデプロイメント選択肢により、現代のAI開発における複雑な要求に対応します。組み込みからサーバーレスクラウドまで、さまざまな規模とアーキテクチャに適応できる柔軟性が最大の強みです。