RAG(Retrieval-Augmented Generation)システムの構築において、ベクトルデータベースの選択は性能とコストに大きく影響します。本記事では、主要な3つのベクトルデータベース「Pinecone」「Weaviate」「pgvector」を実践的な観点から比較し、用途別の選定基準を解説します。運用コスト、スケーラビリティ、開発工数を考慮した最適な選択肢を見つけましょう。

ベクトルデータベースとは

ベクトルデータベースは、高次元ベクトルデータの保存・検索に特化したデータベースシステムです。RAGシステムでは、文書をembeddingモデルでベクトル化し、クエリとの類似度検索を行うために使用されます。

RAGにおける役割

主要ベクトルデータベース比較

Pinecone

Pineconeは完全マネージドなクラウドベクトルデータベースサービスです。

特徴

料金体系

従量課金制で、ベクトル数とクエリ数に基づく課金。小規模であれば無料枠もあり。

// Pinecone接続例
import pinecone

pinecone.init(api_key="your-api-key", environment="us-west1-gcp")
index = pinecone.Index("example-index")

# ベクトル挿入
index.upsert(vectors=[("id1", [0.1, 0.2, 0.3, ...])])

# 検索
results = index.query(vector=[0.1, 0.2, 0.3, ...], top_k=10)

Weaviate

オープンソースのベクトルデータベースで、セルフホストまたはクラウド利用が可能です。

特徴

料金体系

セルフホストは無料、Weaviate Cloudは使用量ベースの料金。

// Weaviate接続例
import weaviate

client = weaviate.Client("http://localhost:8080")

# スキーマ定義
schema = {
    "classes": [{
        "class": "Document",
        "properties": [
            {"name": "content", "dataType": ["text"]},
            {"name": "title", "dataType": ["string"]}
        ]
    }]
}

# データ挿入
client.data_object.create({
    "content": "サンプルテキスト",
    "title": "文書1"
}, "Document")

pgvector

PostgreSQLの拡張機能として動作するベクトルデータベースソリューションです。

特徴

料金体系

PostgreSQLのホスティング費用のみ。最もコスト効率が良い。

-- pgvector使用例
CREATE EXTENSION vector;

CREATE TABLE documents (
    id serial PRIMARY KEY,
    content text,
    embedding vector(1536)
);

-- ベクトル挿入
INSERT INTO documents (content, embedding) 
VALUES ('サンプルテキスト', '[0.1,0.2,0.3,...]');

-- 類似度検索
SELECT content, embedding <-> '[0.1,0.2,0.3,...]' AS distance
FROM documents
ORDER BY distance
LIMIT 10;

性能・機能比較表

項目 Pinecone Weaviate pgvector
セットアップの簡単さ
運用コスト
スケーラビリティ
検索性能
メタデータ機能

用途別選定ガイド

Pineconeを選ぶべきケース

Weaviateを選ぶべきケース

pgvectorを選ぶべきケース

まとめ

ベクトルデータベースの選択は、プロジェクトの規模、予算、技術要件によって決まります。迅速な開発ならPinecone柔軟性重視ならWeaviateコスト重視ならpgvectorが適しています。実際の選定では、プロトタイプを構築して性能とコストを検証することをお勧めします。