AI開発 比較

ローカルLLM RAG用ベクトルDB比較 2026年版:Qdrant / Milvus / Weaviate / Chroma / pgvector を埋め込み次元・速度・運用で選ぶ

ローカルRAG の中核となるベクトルDBは Qdrant / Milvus / Weaviate / Chroma / pgvector の5択。1万〜100万チャンクの埋め込み検索 latency、HNSW vs IVF、メモリ使用量、運用負荷、ハイブリッド検索、フィルタ性能で選ぶ判断軸を整理。LangChain / LlamaIndex から各DBへの最小コードと、用途別の選び方も実例で示します。

  • #ベクトルDB
  • #ローカルRAG
  • #Qdrant
  • #Milvus
  • #Weaviate
  • #Chroma
  • #pgvector
  • #HNSW
  • #埋め込みモデル
  • #LangChain
  • #LlamaIndex

本記事は Amazon.co.jp および各販売店のアフィリエイトリンクを含む場合があります。推奨は性能・コスパ・実機ベンチマーク基準で編集判断しており、提供記事は受け付けていません。詳細は プライバシーポリシー をご覧ください。

ローカルLLM RAG用ベクトルDB比較 2026:Qdrant / Milvus / Weaviate / Chroma / pgvector の使い分け

結論:個人〜小規模検証は Chroma で即起動、本番ローカルRAG は Qdrant、すでにPostgresを動かしているなら pgvector、ハイブリッド検索が必須なら Weaviate、1億ベクトル超の大規模なら Milvus。 どれも HNSW を実装し似たレシピで使えますが、運用コスト(Docker 1個か k8s か)、ハイブリッド検索の有無、既存スタックとの相性で選択が分かれます。本記事は5択の差を、100万チャンク級の RAG 用途を基準に整理します。

RAG のハードウェア側は「ローカルRAG構築向けPC構成ガイド 2026年版」と「24時間稼働 ローカル LLM サーバー構築ガイド 2026年版」で扱っていますが、「ソフト側のベクトルDBどれ選ぶか」は別問題で、必ずぶつかります。本記事はそこを埋めます。

5択の立ち位置を一枚で

DB一言で言語デプロイ主な対応indexハイブリッド検索主な用途
ChromaPython で即起動・最軽量PythonPython直 / DockerHNSW△(自前実装)個人検証・プロトタイプ
pgvectorPostgres 拡張・既存DBに同居CPostgreSQL 拡張HNSW / IVFFlat△(全文検索と組合せ)既存Postgres運用・中小規模本番
QdrantRust製・Docker1個で本格派RustDocker / バイナリHNSW + sparse◎(2024〜ネイティブ)本格RAG・100万〜1,000万級
Weaviateモジュール式・ハイブリッド最強GoDocker / k8sHNSW◎(BM25 内蔵)ハイブリッド前提・モジュール拡張
MilvusC++製・分散・超大規模C++Standalone / k8sHNSW / IVF / DiskANN1億ベクトル超・分散運用

「左ほど軽い」「右ほど大規模・本格」のグラデーションです。RAG の最初の1本は Chroma か pgvector で十分、規模が育って初めて Qdrant / Weaviate / Milvus を検討する、という順番が無駄が出ません。

Chroma:Python から即起動

import chromadb
client = chromadb.PersistentClient(path="./chroma_db")
col = client.get_or_create_collection("docs")
col.add(documents=["text1", "text2"], ids=["1", "2"])
hits = col.query(query_texts=["query"], n_results=3)
  • 強み:pip install chromadb の1行で導入、別プロセス不要、ファイル永続化、ノートブック検証からそのまま延長できる
  • 弱み:1,000万級では遅くなる、ハイブリッド検索は自前、運用ツール(管理UI・監視)が薄い
  • 適正規模:〜10万チャンク(快適)、〜100万(動くが他のDBが速い)、それ以上は別DB推奨

「RAG をまず動かしたい」最初の一本として最短。長期運用や複数アプリ共有では別DBへ移る前提で使うのが穏当です。

pgvector:既存PostgresにRAGを足す

CREATE EXTENSION vector;
CREATE TABLE docs (id bigserial, content text, emb vector(1536));
CREATE INDEX ON docs USING hnsw (emb vector_cosine_ops);
SELECT content FROM docs ORDER BY emb <=> '[0.1,0.2,...]' LIMIT 3;
  • 強み:既存Postgres の認証・バックアップ・接続プール・JOIN がそのまま使える、運用コストの追加がほぼゼロ、トランザクション内で埋め込み更新と関連レコード更新が一貫
  • 弱み:超大規模(数千万〜)では index ビルド時間とメモリが効く、ハイブリッド検索は ts_vector(全文)と組み合わせるが Weaviate ほど洗練されていない
  • HNSW vs IVFFlat:100万以下なら HNSW が定番(低レイテンシ高リコール)、5,000万超でメモリ・ビルド時間が痛くなるなら IVFFlat に逃げる
  • 適正規模:〜100万チャンク(快適)、〜1,000万(チューニング前提で実用)、それ以上は専用DB推奨

既存DBに「テーブル追加するだけでRAG が動く」価値が大きい。アプリ側がすでに Postgres を使っているなら、別ストアを増やさず pgvector に寄せるのが運用上一番安い選択です。

Qdrant:Rust製・本格RAGの本命

from qdrant_client import QdrantClient
from qdrant_client.models import VectorParams, Distance, PointStruct
c = QdrantClient(url="http://localhost:6333")
c.create_collection("docs", vectors_config=VectorParams(size=1536, distance=Distance.COSINE))
c.upsert("docs", points=[PointStruct(id=1, vector=[0.1]*1536, payload={"text":"..."})])
hits = c.search("docs", query_vector=[0.1]*1536, limit=3)
  • 強み:Rust 製で低レイテンシ・低メモリ、Docker 1個で起動、HNSW + sparse vector ネイティブサポート、ACORN アルゴリズムでフィルタ付きHNSW が高速
  • 弱み:Postgres のような既存運用基盤との統合は別物として扱う必要がある
  • 公開ベンチでの位置:1M〜10M ベクトル帯で P99 12ms 級と速度評価が高く、Weaviate / Milvus より単一ノードでは優位の報告が多い
  • 適正規模:〜10万(オーバースペック)、100万〜1,000万(本領発揮)、それ以上(複数ノードまたは Milvus 検討)

本気のローカル RAG を組むなら Qdrant が穏当。Docker 1個で動く軽さと、本格機能(sparse / hybrid / フィルタ)の両立が強み。

Weaviate:モジュール式・ハイブリッド検索の本命

import weaviate
c = weaviate.Client("http://localhost:8080")
c.batch.add_data_object({"text":"..."}, class_name="Doc")
res = c.query.get("Doc", ["text"]).with_hybrid(query="検索語", alpha=0.5).with_limit(3).do()
  • 強み:BM25(キーワード) + dense vector のハイブリッド検索を組み込みでサポート、alpha パラメータで配分を 0(キーワードのみ)〜1(ベクトルのみ)で調整、リランキング・ベクトル生成・分類などモジュール拡張が豊富
  • 弱み:Go ランタイム+モジュール構成で起動が他より重い、Qdrant ほどの単純速度は出ない場面がある
  • 適正規模:〜10万(オーバースペック)、100万〜1,000万(本領発揮)、それ以上(クラスタ構成)
  • 使いどき:ハイブリッド検索が必須(法務・医療文書など固有名詞検索が効く用途)、ベクトル化・リランクをDB内で完結したい

ハイブリッド検索を「自前で BM25 と dense を別々に取得→マージ」する手間が嫌いなら Weaviate が最短です。

Milvus:C++製・分散・超大規模向け

  • 強み:C++ 製で超大規模・分散運用に対応、HNSW / IVF / DiskANN(SSD 配置)など複数 index タイプ、1 億ベクトル超のシングルクラスタ運用実績、Zilliz Cloud という商用ホスト版あり
  • 弱み:standalone でも依存(etcd / minio など)が多く、Qdrant のような単一バイナリ感は無い、k8s 前提の運用知識が要る
  • 適正規模:100万(オーバースペック)、1,000万〜1 億(本領発揮)、1 億超(他に競合無し)
  • 使いどき:全社ドキュメント・大規模ナレッジ・多テナント検索など個人ユースを超える規模

個人ユースで Milvus を選ぶ理由はほぼ無い。1 億ベクトルを超える、または分散運用が前提の規模で初めて検討する DB です。

100万チャンク時の比較レンジ

「1,536次元 × 100万ベクトル」(OpenAI text-embedding-3-small / BGE-M3 / Nomic Embed v2 などの主流次元)を基準に、公開ベンチ報告のレンジを整理します。

DBP95 latencyメモリ使用index ビルド時間必須リソース
Chroma30〜80ms6〜8GB5〜15分Python プロセス 1 個
pgvector (HNSW)10〜30ms8〜12GB10〜30分PostgreSQL 1 インスタンス
Qdrant5〜15ms5〜7GB5〜15分Docker 1 コンテナ
Weaviate10〜25ms7〜10GB8〜20分Docker / k8s
Milvus standalone8〜20ms10〜15GB8〜20分Docker compose 3〜4 コンテナ

数値はベンチサイト・ブログ報告のレンジで、HW(CPU / メモリ / ストレージ)と HNSW パラメータ(ef_construction / M 等)で大きく動きます。100万級なら全DBが「実用には十分」の帯で、選定はレイテンシより運用コスト・既存スタックとの相性で決めるべきです。

メモリ使用量は HNSW index 自体が「ベクトル次元 × 件数 × 4byte(float32) + グラフ構造のオーバーヘッド」で支配されます。1,536次元 × 100万 ≒ 6GB が素のベクトル分、index でさらに 1.5〜2 倍に膨らむ、と覚えておくと見積もりが早いです。

埋め込みモデルとの組み合わせ

2026年時点の主流埋め込みは次の通りです。次元数によってDB側のメモリ消費が直接変わるため、ペアで考える必要があります。

モデル次元100万件のメモリ目安特徴
OpenAI text-embedding-3-small1,5366GB商用API、コスト安
BGE-M31,0244GB多言語OSS、HuggingFace で定番
Nomic Embed v27683GB軽量OSS、CPU 推論可
Qwen3-Embedding-8B4,09616GBMTEB 70.58 首位級、要 GPU
mxbai-embed-large1,0244GB英語強い、定番

「Qwen3-Embedding-8B(4,096次元)で 100万件」は素のベクトルだけで 16GB、index 込みで 25GB 級になります。埋め込みの次元が大きいと DB 側のメモリも線形に増えるため、精度と運用コストのバランスで埋め込みを選んでください。

埋め込みモデル自体のローカル運用と VRAM 配分は「ローカルRAG構築向けPC構成ガイド 2026年版」で詳しく扱っています。

LangChain / LlamaIndex からの接続

各DB は LangChain / LlamaIndex の VectorStore 抽象に対応しています。差し替えコストは小さく、初期は Chroma で書いて Qdrant / pgvector に移行するのも容易です。

# LangChain + Qdrant の例
from langchain_qdrant import Qdrant
from langchain_community.embeddings import OllamaEmbeddings
emb = OllamaEmbeddings(model="nomic-embed-text")
vs = Qdrant.from_documents(docs, embedding=emb, url="http://localhost:6333", collection_name="docs")
hits = vs.similarity_search("query", k=3)

# LlamaIndex + pgvector の例
from llama_index.vector_stores.postgres import PGVectorStore
vs = PGVectorStore.from_params(host="localhost", port=5432, database="rag",
                                user="postgres", password="...", table_name="docs", embed_dim=1536)

LangChain / LlamaIndex の VectorStore 抽象を介して書いておけば、DB を入れ替えるコストは初期検証 → 本番移行の段階でほぼ吸収できる。最初のDB選定で迷ったら、まず Chroma か pgvector で動かして、規模が見えてきた段階で本格DB に移るのが現実解です。

埋め込みを Ollama / llama.cpp / LM Studio など各ランタイムから取り出す手段の比較は「ローカルLLM実行ツール比較 2026年版」を参照してください。

用途別の選び方

判断は「規模」「既存スタック」「ハイブリッド検索の必要性」の3軸で割り切るのが最短です。

個人検証・ノートブック作業

  • Chroma 一択
  • pip install で1分で動く、ファイル永続化でノートブックを閉じてもデータが残る
  • 1万〜10万チャンクの個人ナレッジには十分

すでに PostgreSQL を運用中

  • pgvector 一択
  • 既存の認証・バックアップ・接続プールがそのまま使える
  • 100万〜1,000万チャンクまでは HNSW で十分実用

本格ローカル RAG(小規模法人・100万〜1,000万チャンク)

  • Qdrant
  • Rust製の速度、Docker 1個の運用簡便さ、フィルタ付きHNSW が速い
  • Postgres を使っていない・ハイブリッド検索が必須でない、なら穏当

ハイブリッド検索が必須(法務・医療・固有名詞検索)

  • Weaviate
  • BM25 + dense のフュージョンを alpha 1 つで調整、モジュール拡張で機能追加が早い

1 億ベクトル超・分散運用

  • Milvus
  • 個人ユースを超えた規模でのみ検討、k8s 前提の知識が必要

まとめ:規模と既存スタックで決まる

  • Chroma:個人検証・プロトタイプの最初の一本
  • pgvector:既存Postgres運用中なら追加コストほぼゼロで RAG が乗る
  • Qdrant:本格ローカル RAG・100万〜1,000万級の本命、Docker 1 個運用
  • Weaviate:ハイブリッド検索(BM25+dense)が必須の用途で最強
  • Milvus:1 億ベクトル超・分散運用に振り切った超大規模向け

ベクトルDB は「どれが最速か」より「自分の運用と既存スタックに何が合うか」で決まる領域です。100万チャンク級ならどれも実用十分の速度が出ます。最初は Chroma か pgvector で動かして、規模・要件が見えてから Qdrant / Weaviate / Milvus に移るのが、無駄が出ないルートです。


あなたに合うPCを診断する

用途や予算をもう少し細かく入力すると、3つの候補構成を提案します。

診断スタート

関連記事

よくある質問

個人のRAG検証ではどのベクトルDBから始めるべきですか?
Chroma です。pip install chromadb の1行で導入でき、別プロセスもDocker も不要で Python から直接 import して使えます。ファイルベースで永続化できるためノートブック検証から本番の入口まで切れ目なく使え、1万〜10万チャンク規模なら速度の不満も出にくい構成です。検証が進んで100万級・本番運用・複数アプリ共有といった条件が増えた段階で Qdrant や pgvector へ移行するのが定石です。
すでに PostgreSQL を運用しているなら pgvector でいい?
強く推奨できます。pgvector は PostgreSQL の拡張なので、既存の認証・バックアップ・監視・接続プールがそのまま使え、運用コストの増加がほぼゼロです。HNSW インデックスは2023年に追加され、100万ベクトル級なら専用DBに匹敵する速度が出ます。デメリットは「PostgreSQL の機能上限を超える分散・並列クエリ最適化」が無い点で、超大規模(数千万〜億)になると Milvus などへ移る判断が必要になります。
Qdrant と Milvus はどう違う?
Qdrant は Rust 製・単一バイナリ + Docker 1個で動く軽量本格派、Milvus は C++ 製・分散クラスタ前提の超大規模向けです。100万〜1,000万ベクトル規模なら Qdrant の単一ノードで P99 12ms 級が出て、運用も Docker 1個で済むためコスパが良い帯。Milvus は1億ベクトル超や複数ノード分散が前提の規模で本領を発揮しますが、k8s 運用の前提知識が要ります。個人〜小規模法人なら Qdrant、本気の大規模検索なら Milvus、という線引きが自然です。
ハイブリッド検索(BM25 + ベクトル)に強いのはどれ?
Weaviate と Qdrant です。Weaviate はモジュール式のアーキテクチャで BM25 + dense vector のハイブリッド検索をネイティブに組み込んでおり、検索のリランキングも内蔵されています。Qdrant も2024年以降のバージョンで sparse vector(BM25 相当)をネイティブサポートし、dense と組み合わせたフュージョンクエリが書けます。Chroma / pgvector はキーワード検索を別途用意する必要があり、ハイブリッドが必須の用途では Weaviate か Qdrant が穏当です。