【比較】ベクトルDBとグラフDBの違い¶
概要¶
「ベクトルDB」と「グラフDB」は、どちらも特定用途に特化した非リレーショナルデータベースですが、解こうとしている問題がまったく別物です。混同して「どちらかに寄せれば両方できる」と考えると設計を誤ります。
ベクトルDBは、テキストや画像などを埋め込み(embedding)モデルでベクトル化し、そのベクトル群を索引して近似最近傍探索(ANN)による類似度検索を行うためのストアです。HNSW や IVF などの索引で「意味的に近いもの」を高速に探し、セマンティック検索・RAG・レコメンド・類似画像検索などに使われます。グラフDBは、データをノード(実体)とリレーションシップ(エッジ=つながり)として保持し、Cypher や Gremlin といったクエリ言語で関係をたどる(トラバーサルする)ためのストアです。ソーシャルグラフ・推薦・不正検知など「つながったデータ」の探索に強みがあります。
なお、本記事は「ベクトルDB と グラフDB」という2種類のデータベースの設計思想を比べるものです。AWS Bedrock の「構造化データストア(Text-to-SQL)とベクトルストア(RAG)」という機能上の役割分担とは論点が異なるため、その文脈は構造化データストアとベクトルストアについてを参照してください。
詳細比較¶
| 比較軸 | ベクトルDB (Vector DB) | グラフDB (Graph DB) |
|---|---|---|
| データモデル | 高次元ベクトル(埋め込み)+メタデータ | ノード・リレーションシップ・プロパティ |
| 主な操作 | 近似最近傍探索(ANN)による類似度検索 | 関係のトラバーサル(経路・隣接探索) |
| 索引方式 | HNSW / IVF / PQ / LSH 等の ANN 索引 | 関係をデータと共にネイティブ格納し走査を最適化 |
| クエリ言語 | API/SQL 拡張(例: pgvector の距離演算子) | Cypher / Gremlin など |
| 距離・指標 | L2・コサイン・内積などの距離尺度 | ホップ数・経路・パターンマッチ |
| 代表用途 | セマンティック検索・RAG・レコメンド・類似検索 | ソーシャル/推薦/不正検知/経路最適化 |
| 解く問題 | 「これに“意味的に似た”ものは?」 | 「これと“どうつながっている”か?」 |
補足:両者は排他ではなく、RAG の根拠取得(ベクトル)と知識のつながり(グラフ)を組み合わせる構成(GraphRAG 的アプローチ)もあり得る。あくまで「役割が違う」ことが要点。
よくある誤解¶
- 誤解1:「ベクトルDBとグラフDBは似たもので、どちらか一方で代替できる」 — 違います。ベクトルDBは「意味的類似度(ANN 検索)」、グラフDBは「実体間の関係のトラバーサル」を解く道具で、解く問題が別です。一方をもう一方の上位互換とみなすのは誤りで、相互に置き換えられません。
- 誤解2:「ベクトル検索=完全一致で必ず正解を返す検索」 — 違います。多くのベクトルDBは近似最近傍(ANN)であり、速度のために厳密性を一部譲ります(HNSW/IVF など)。「最も近い候補群を高速に返す」ものであり、SQL の等価検索のような厳密一致とは性質が異なります。
- 誤解3:「グラフDBはリレーショナルDBの JOIN を別名にしただけ」 — 違います。グラフDBは関係をデータと共にネイティブに格納し、関係の走査を最適化します。多数ホップの関係探索で RDB の JOIN 連鎖より有利になりやすい点が設計上の違いで、単なる呼び換えではありません。
- 誤解4:「ベクトルDBは専用製品でしか実現できない」 — 必ずしもそうではありません。例えば PostgreSQL 拡張の pgvector は HNSW/IVFFlat 索引と距離演算子で類似度検索を提供します。「専用 DB か拡張か」は要件次第で、選択肢は専用製品に限られません。
実務での選び分け¶
「どちらが新しいか」ではなく「解きたい問いの種類」で選びます。
- “意味的に似た文書/画像を探す”、RAG の根拠取得、レコメンドの類似度 → ベクトルDB(または pgvector 等の拡張)。
- “誰と誰がどうつながっているか”、多段の関係探索、不正検知・推薦の関係グラフ → グラフDB(Cypher/Gremlin)。
- 既存 RDBMS 資産を活かしつつ小規模に類似検索を足したい → pgvector のような拡張から検討。
- 「似ているか」と「つながっているか」の両方が要る → 併用(ベクトル検索+グラフ走査)。一方に無理に寄せない。
- 判断軸:①問いが「類似」か「関係」か ②近似許容か厳密関係探索か ③既存スタックとの親和性 ④運用するインデックス/クエリ言語の習熟。
ひとことまとめ¶
ベクトルDB=埋め込みの ANN 類似度検索(意味的に“似た”もの/RAG・レコメンド)、グラフDB=ノードとエッジの関係トラバーサル(“つながり”の探索)。解く問題が別で相互に代替不可。「似ているか」か「つながっているか」で選び、必要なら併用します。
出典・参考¶
- Pinecone「What is a Vector Database?」(ベクトル埋め込みを索引・格納し近似最近傍(ANN)で類似度検索。HNSW/PQ/LSH/Random Projection などの索引。セマンティック検索・RAG・レコメンド・類似画像検索に利用): https://www.pinecone.io/learn/vector-database/
- pgvector 公式リポジトリ(PostgreSQL 拡張。HNSW/IVFFlat 索引による厳密/近似最近傍探索、L2・内積・コサインなどの距離指標をサポート): https://github.com/pgvector/pgvector
- Neo4j 公式ドキュメント「What is a graph database?」(データをノード・リレーションシップ・プロパティとして格納。関係をデータと共にネイティブ格納し走査を最適化。Cypher で関係をパターンマッチ/トラバーサル): https://neo4j.com/docs/getting-started/graph-database/
- Apache TinkerPop 公式「Graph Query Language - Gremlin」(プロパティグラフ上の複雑なトラバーサルを表現する関数型データフロー言語。TinkerPop 対応グラフシステムで Gremlin トラバーサルを実行可能): https://tinkerpop.apache.org/gremlin.html