ストーリー
田
田中VPoE
Embeddingでテキストをベクトルに変換できるようになった。次はそのベクトルをどこに格納し、どう検索するかだ
あなた
ベクトルDBですね。Pinecone、Weaviate、Chroma…色々ありますが、どう選べばいいんですか?
あ
田
田中VPoE
いい質問だ。ベクトルDBの選定はRAGシステムの性能とコストに直結する。マネージドかセルフホストか、スケーラビリティ、フィルタリング機能、コスト構造…いくつかの軸で比較していこう
あなた
NetShop社の場合は何がベストでしょうか?
あ
田
田中VPoE
まず選択肢を整理してから、うちの要件に照らし合わせて判断する。エンジニアの仕事は「とりあえず人気のもの」ではなく「要件に合ったもの」を選ぶことだ
ベクトルDBとは
役割
ベクトルDB(Vector Database)は、高次元ベクトルデータの格納と類似度検索に特化したデータベースです。
ベクトルDBの基本操作:
[Upsert(格納)]
ドキュメント + Embedding + メタデータ → ベクトルDB
[Query(検索)]
クエリのEmbedding → ベクトルDB → Top-K件の類似ドキュメント
[Filter(絞り込み)]
メタデータ条件 + ベクトル類似度 → フィルタ済み結果
近似最近傍探索(ANN)
ベクトルDBは近似最近傍探索(Approximate Nearest Neighbor)アルゴリズムを使用して高速検索を実現します。
| アルゴリズム | 概要 | 特徴 |
|---|
| HNSW | 階層的ナビゲーション可能小世界グラフ | 高精度・高速。メモリ使用量大 |
| IVF | 転置ファイルインデックス | メモリ効率良好。大規模データ向け |
| PQ | プロダクト量子化 | メモリ使用量を大幅削減。精度とのトレードオフ |
| ScaNN | Google開発のANNアルゴリズム | 高速・高精度のバランス |
主要ベクトルDBの比較
マネージド型
| DB | 提供形態 | 特徴 | 適するケース |
|---|
| Pinecone | フルマネージド | シンプルなAPI、高い可用性、サーバレス | 運用負荷を最小化したい場合 |
| Weaviate Cloud | マネージド | ハイブリッド検索、GraphQL API | 柔軟な検索機能が必要な場合 |
| Qdrant Cloud | マネージド | 高速フィルタリング、Rust製 | 高パフォーマンスが必要な場合 |
| Zilliz Cloud | マネージド(Milvusベース) | 大規模データ対応、GPU対応 | 大規模ベクトルデータの場合 |
セルフホスト型
| DB | 提供形態 | 特徴 | 適するケース |
|---|
| Chroma | OSS(Python) | 軽量、開発者フレンドリー | プロトタイプ、小規模プロジェクト |
| Weaviate | OSS(Go) | ハイブリッド検索、モジュール式 | 中〜大規模の本番システム |
| Qdrant | OSS(Rust) | 高パフォーマンス、ReST API | パフォーマンス重視の本番システム |
| Milvus | OSS(Go/C++) | 分散アーキテクチャ、大規模対応 | 数十億ベクトル規模 |
| pgvector | PostgreSQL拡張 | 既存PostgreSQLに追加可能 | 既存DB基盤の活用 |
総合比較
| 観点 | Pinecone | Weaviate | Qdrant | Chroma | pgvector |
|---|
| 運用負荷 | 極低 | 低〜中 | 低〜中 | 低 | 低 |
| スケーラビリティ | 高 | 高 | 高 | 低 | 中 |
| ハイブリッド検索 | 対応 | 強い | 対応 | 限定的 | 要追加実装 |
| メタデータフィルタ | 対応 | 強い | 強い | 対応 | SQL対応 |
| コスト | 従量課金 | 中 | 中 | 無料(OSS) | 無料(OSS) |
| 学習コスト | 低 | 中 | 中 | 低 | 低 |
| 本番実績 | 多い | 多い | 増加中 | 少ない | 増加中 |
選定基準
判断フロー
ベクトルDB選定フロー:
開発フェーズは?
├── PoC/プロトタイプ
│ └── Chroma(最速で開始可能)
└── 本番/商用
├── 運用負荷を最小化したい?
│ ├── Yes → Pinecone(フルマネージド)
│ └── No → 既存PostgreSQLを活用したい?
│ ├── Yes → pgvector
│ └── No → 規模は?
│ ├── 中規模(〜1000万ベクトル) → Qdrant or Weaviate
│ └── 大規模(1000万超) → Milvus or Pinecone
NetShop社への適用
| 要件 | 内容 | 推奨 |
|---|
| ドキュメント数 | 約10万件(技術文書、議事録、FAQ) | 中規模 |
| 更新頻度 | 日次〜週次 | 差分更新が必要 |
| 検索要件 | ハイブリッド検索 + メタデータフィルタ | Weaviate or Qdrant |
| 運用チーム | インフラチーム3名 | セルフホスト可能 |
| 既存基盤 | PostgreSQL利用中 | pgvectorも選択肢 |
| 予算 | 年間300万円以内 | OSS + クラウドインフラ |
「うちの規模ならQdrantかWeaviateのセルフホストが現実的だ。pgvectorも検討に値するが、ハイブリッド検索やフィルタリングの実装を自前でやる覚悟が要る」 — 田中VPoE
ベクトルDBのデータモデル
基本構成
ベクトルDBのレコード構成:
{
"id": "doc-001",
"vector": [0.023, -0.156, 0.892, ...], // Embeddingベクトル
"metadata": { // メタデータ(フィルタ用)
"source": "技術文書",
"department": "開発部",
"created_at": "2025-12-01",
"author": "佐藤",
"tags": ["RAG", "ベクトルDB"]
},
"content": "RAGシステムの構築手順..." // 元テキスト
}
インデックス設計のポイント
| 設計要素 | 考慮事項 |
|---|
| コレクション分割 | ドメイン別(技術文書/議事録/FAQ)に分割するか単一か |
| メタデータスキーマ | フィルタリングに使うフィールドを事前設計 |
| ベクトル次元数 | Embeddingモデルに合わせて設定 |
| 距離メトリクス | コサイン類似度が一般的 |
| インデックスパラメータ | HNSW: ef_construction, M値の調整 |
まとめ
| ポイント | 内容 |
|---|
| ベクトルDBの役割 | 高次元ベクトルの格納と高速な類似度検索 |
| ANNアルゴリズム | HNSW、IVF、PQ等で近似的に高速検索 |
| 主要な選択肢 | Pinecone(マネージド)、Weaviate/Qdrant(OSS)、pgvector(PG拡張) |
| 選定基準 | 規模、運用負荷、検索要件、既存基盤、コストで判断 |
チェックリスト
次のステップへ
次は「演習:RAGアーキテクチャを設計しよう」です。ここまで学んだ知識を使って、NetShop社の要件に合ったRAGアーキテクチャを設計してみましょう。
推定読了時間: 30分