pgvector vs Neo4j: ニーズに合ったベクターデータベースの選択
pgvectorとNeo4jは、この分野における2つの選択肢です。この記事では、あなたのプロジェクトで十分な情報に基づいた決定を下すのに役立つように、これらのテクノロジーを比較します。
ベクターデータベースとは?
pgvectorとNeo4jを比較する前に、まずベクターデータベースの概念について説明します。
ベクトルデータベース](https://zilliz.com/learn/what-is-vector-database)は、特に高次元のベクトルを格納し、クエリするように設計されています。ベクトルは非構造化データの数値表現です。これらのベクトルは、テキストの意味、画像の視覚的特徴、または製品の属性などの複雑な情報をエンコードします。効率的な類似検索を可能にすることで、ベクトルデータベースはAIアプリケーションにおいて極めて重要な役割を果たし、より高度なデータ分析と検索を可能にしている。
ベクトルデータベースの一般的なユースケースには、電子商取引の商品推奨、コンテンツ発見プラットフォーム、サイバーセキュリティにおける異常検知、医療画像分析、自然言語処理(NLP)タスクなどがある。また、AI幻覚のような問題を軽減するために、外部知識を提供することによって大規模言語モデル(LLMs)の性能を向上させる技術であるRAG(Retrieval Augmented Generation) において重要な役割を果たす。
市場には、以下のような多くの種類のベクトル・データベースがある:
- Milvus](https://zilliz.com/what-is-milvus)、Zilliz Cloud(フルマネージドMilvus)、Weaviateなど。
- Faiss](https://zilliz.com/learn/faiss)やAnnoyのようなベクトル検索ライブラリ。
- Chroma](https://zilliz.com/blog/milvus-vs-chroma)やMilvus Liteのような軽量ベクトルデータベース。
- 小規模なベクトル検索が可能なベクトル検索アドオンを備えた従来のデータベース**。
pgvectorは伝統的なデータベースであり、Neo4jはグラフデータベースである。どちらもアドオンとしてベクトル検索を持っている。この投稿では、両者のベクトル検索機能を比較する。 ;
pgvector:概要とコア技術
pgvectorはPostgreSQLの拡張で、ベクトル操作のサポートを追加します。これにより、ユーザはPostgreSQLデータベース内に直接ベクトルの埋め込みを保存し、問い合わせることができます。
pgvectorの主な機能は以下の通りです:
- 厳密および近似最近傍探索のサポート
- PostgreSQLのインデックス機構との統合
- 加算や減算のようなベクトル演算の実行機能
- 様々な距離メトリクス(ユークリッド、余弦、内積)のサポート。
pgvectorはデフォルトで正確な最近傍探索を採用しており、完全な再現を保証しますが、大規模なデータセットでは遅くなる可能性があります。性能を最適化するために、pgvectorは近似最近傍探索のインデックスを作成するオプションを提供しています。このアプローチは、多くの実世界のアプリケーションにおいて、しばしば価値のあるトレードオフです。
注意すべき点は、近似インデックスを追加するとクエリの結果が変わる可能性があるということです。これは、実際に返される結果に影響を与えない一般的なデータベースインデックスとは異なります。pgvectorでサポートされる2種類の近似インデックスがあります:
1.HNSW (Hierarchical Navigable Small World):pgvectorバージョン0.5.0で導入されたHNSWは、その高い性能と結果の品質で知られています。HNSWは多層グラフ構造を構築し、検索時の高速な走査を可能にします。 2.IVFFlat (Inverted File Flat):ベクトル空間をクラスタに分割する手法。検索時には、まず最も関連性の高いクラスターを特定し、そのクラスター内で厳密な検索を行う。これにより、大規模なデータセットの検索を大幅に高速化することができる。
これらのインデックス・タイプの選択は、データセット・サイズ、要求されるクエリ速度、精度の許容可能なトレードオフなどの要素を考慮し、特定のユースケースに依存する。HNSWは一般的にパフォーマンスが高いが、より多くのメモリを使用する可能性がある。
プロジェクトでpgvectorを実装する際には、両方のインデックスタイプとそのパラメータを試して、特定のニーズに最適な構成を見つけるようにしてください。この微調整のプロセスは、ベクトル検索操作の性能と精度に影響を与えます。
pgvectorの使い方を知りたいですか?チュートリアル](https://zilliz.com/blog/getting-started-pgvector-guide-developers-exploring-vector-databases)をご覧ください!
Neo4J: 基礎編
Neo4jのベクトル検索により、開発者はグラフ全体で類似データを検索するためのベクトルインデックスを作成することができます。これらのインデックスは、ベクトル埋め込み(テキスト、画像、音声のようなデータの意味をとらえた数値表現)を含むノード・プロパティで動作します。システムは4096次元までのベクトルと、コサインおよびユークリッド類似性関数をサポートしている。
この実装では、HNSW(Hierarchical Navigable Small World)グラフを使用して、高速な近似k-最近傍検索を行う。ベクトル・インデックスに問い合わせを行う際、検索したい近傍ノードの数を指定すると、システムは類似度スコア順にマッチするノードを返す。これらのスコアは0~1で、高いほど類似度が高い。HNSWアプローチは、類似ベクトル間のつながりを保持し、システムがベクトル空間の異なる部分に素早くジャンプできるようにすることでうまく機能します。
ベクトル・インデックスの作成と使用は、クエリ言語を通して行います。CREATE VECTOR INDEX コマンドでインデックスを作成し、ベクトルの次元や類似関数などのパラメータを指定することができます。システムは設定された次元のベクトルだけがインデックスされることを確認します。これらのインデックスのクエリはdb.index.vector.queryNodesプロシージャで行われ、インデックス名、結果数、クエリベクトルを入力として受け取ります。
Neo4jのベクトルインデックスには、ベクトル表現を圧縮することでメモリ使用量を削減する量子化のようなパフォーマンス最適化があります。ノードあたりの最大接続数(M)や、挿入時に追跡される最近傍の数(ef_construction)などのパラメータで、インデックスの動作を調整できます。これらのパラメータによって精度と性能のバランスをとることができるが、ほとんどのユースケースではデフォルトのままで十分である。また、システムはバージョン5.18から関係ベクトルインデックスをサポートしているので、関係プロパティで類似データを検索することができる。
これにより、開発者はAIを活用したアプリケーションを構築することができる。グラフクエリとベクトル類似性検索を組み合わせることで、アプリケーションは完全一致ではなく、意味的な意味に基づいて関連データを見つけることができる。例えば、映画の推薦システムは、グラフ構造を使用して、推薦がユーザーの好みと同じジャンルまたは時代から来ることを保証しながら、類似した映画を見つけるためにプロット埋め込みベクトルを使用することができます。
主な違い
検索方法
pgvectorはPostgreSQL内で直接ベクトル演算を使用し、厳密検索と近似最近傍(ANN)検索の両方をサポートします。オプションがあります:
- 正確な検索: 完全な再現性、小規模なデータセットや精度を最優先する場合に適しています。
- 近似検索:HNSWとIVFFlatインデックスタイプでクエリ時間を短縮し、精度と速度のトレードオフを実現します。
Neo4jはHNSWグラフを使用し、グラフデータベースコンテキスト内での近似k-最近傍検索を行う。これは、グラフ構造を使用して、エンティティ(ノードなど)間の関係が重要なアプリケーションの検索を最適化します。
どちらもコサイン類似度やユークリッド距離のような距離メトリクスをサポートしているが、Neo4jのグラフ関係は、グラフ+ベクトルのハイブリッド検索シナリオに複雑なレイヤーを追加する。
データの取り扱い
- pgvectorは、構造化データや半構造化データがPostgreSQLでネイティブに扱われる環境に適しています。ベクトルをリレーショナルデータと一緒に同じデータベースに格納することができるので、生活が楽になります。
- Neo4jはグラフデータに最適化されているので、データが当然ネットワーク(ソーシャルネットワークやレコメンデーションシステムなど)である場合に適している。Neo4jは、グラフクエリとベクトル検索を組み合わせることで、グラフコンテキスト内でセマンティックなデータ検索を行うことができる。
構造化された表形式のデータの中に検索を埋め込むのであれば、pgvectorの方がより自然に感じられるかもしれない。グラフ接続されたデータに対しては、Neo4jが優位である。
スケーラビリティとパフォーマンス
pgvectorはPostgreSQLのスケーラビリティ機構を使用していますが、非常に大きなデータセットに対しては外部からのシャーディングやパーティショニングが必要になるかもしれません。パフォーマンスチューニングには、インデックスタイプとPostgreSQLの設定を試すことが含まれます。
Neo4jは、ネイティブな分散グラフ・ストレージとクエリ実行をサポートしている。HNSWベースのベクトル検索はスケーラビリティのために最適化されており、ベクトルの量子化により、性能を維持しながらメモリ使用量を削減することができる。
ワークロードのスケールが大きい場合、あるいは分散アーキテクチャの恩恵を受ける場合、Neo4jの方が、特にグラフ中心のデータでは、成長にうまく対処できるかもしれません。
柔軟性とカスタマイズ
pgvectorはPostgreSQLのインデックス作成と問い合わせ機構との直接統合を提供し、カスタムベクトル操作(例えば加算や減算)を可能にします。インデックス戦略を深く制御する必要があるアプリケーションに適しています。
Neo4jは、クエリ言語(Cypher)によるカスタマイズを提供し、ノードとリレーションシップの両方でベクトル検索をサポートする。しかし、Cypherはグラフデータベースに慣れていない開発者にとっては学習曲線が必要かもしれない。
伝統的なデータモデルではpgvectorがより自然に感じられるが、グラフファーストアーキテクチャではNeo4jが輝く。
統合とエコシステム
- pgvectorはPostgreSQLのエコシステムにうまく適合し、ORMや分析プラットフォームとの統合をサポートします。
- Neo4jはグラフベースのツールやフレームワークとうまく統合できる。そのエコシステムには、Pythonのような言語、Neo4j Bloomのようなツール、AI/MLワークフロー用のコネクタが含まれる。
選択は、あなたのスタックがリレーショナル・データ・ツールとグラフ・データ・ツールのどちらを中心に展開しているかによる。
使いやすさ
pgvectorはPostgreSQLユーザにとって使いやすく、既存のワークフローへの変更は最小限です。既にリレーショナルデータベースに慣れ親しんでいるチームにとっては簡単です。
Neo4jは、グラフデータベースの経験のないチームにとっては、学習曲線が急である。しかし、Neo4jのドキュメントとコミュニティ・リソースは豊富で、開発者がスピードアップするのに役立ちます。
シンプルさを優先するなら、pgvectorの方が始めやすい。
コスト
- pgvectorはオープンソースであり、PostgreSQLのオープンソースモデルの恩恵を受けています。コストは導入するインフラに大きく依存します。
- Neo4jはより複雑なコスト構造を持ち、特にエンタープライズやクラウドマネージドで提供される。その高度な機能は、グラフを多用するユースケースのためのコストを正当化するかもしれない。
予算が制約である場合、Neo4jの機能が必須でない限り、pgvectorの方が費用対効果が高いです。
セキュリティ
どちらのシステムにも強固なセキュリティ・オプションがあるが、実装は異なる:
- pgvectorは、ロールベースのアクセス制御、SSL、データ暗号化など、PostgreSQLの成熟したセキュリティ機能を継承しています。
- Neo4jは、グラフデータに対するロールベースのアクセス、ベクトルインデックスに対するきめ細かなアクセス制御と暗号化のような高度なセキュリティ機能を持っています。
グラフデータに対してきめ細かなセキュリティが必要なのか、PostgreSQLのセキュリティモデルに依存するのかによって選択が変わります。
pgvector を使用する場合
pgvectorは、既にPostgreSQLを使用しているチームや、ベクトル埋め込みが新しい要件である構造化データや半構造化データを扱っているチーム向けです。pgvectorは厳密検索と近似検索の両方をサポートしていますが、PostgreSQLと緊密に結合しているため、小規模なデータセットや、アプリケーション全体が単一のデータベース内で実行できるシナリオに最適です。
Neo4jを使う場合
Neo4jは、ソーシャル・ネットワーク、レコメンデーション・システム、ナレッジ・グラフなど、データが複雑な場合に適しています。グラフクエリとベクトル検索を組み合わせる機能は、特定のグラフ制約内で意味的に類似したアイテムを見つけるようなハイブリッドなユースケースを解き放ちます。大規模な分散グラフ・データを持っていたり、グラフ・トラバーサルやベクトル操作のための高度な最適化が必要な場合は、Neo4jが最適です。
結論
pgvectorは、構造化データおよび半構造化データのためのシンプルさとPostgreSQLとのシームレスな統合のために優れています。pgvectorはシンプルなリレーショナルデータベースのシナリオに適しており、Neo4jはグラフ中心のアプリケーションに適しています。データの種類、ワークロードの複雑さ、スケーリングの必要性を評価し、どのツールがあなたのゴールに合うかを見てください。
pgvectorとNeo4jの概要を知るにはこれを読んでほしいが、これらを評価するには、ユースケースに基づいて評価する必要がある。それに役立つツールの1つが、ベクターデータベースの比較のためのオープンソースのベンチマークツールであるVectorDBBenchです。最終的には、独自のデータセットとクエリパターンで徹底的なベンチマークを行うことが、分散データベースシステムにおけるベクトル検索に対する、強力だが異なるこれら2つのアプローチのどちらを選択するかの鍵となるだろう。
オープンソースのVectorDBBenchを使ってベクトルデータベースを評価・比較する
VectorDBBenchは、高性能なデータ保存・検索システム、特にベクトルデータベースを必要とするユーザーのためのオープンソースのベンチマークツールです。このツールにより、ユーザはMilvusやZilliz Cloud(マネージドMilvus)のような異なるベクトルデータベースシステムを独自のデータセットを使ってテストし比較し、自分のユースケースに合うものを見つけることができます。VectorDBBenchを使えば、ユーザーはマーケティング上の主張や伝聞ではなく、実際のベクターデータベースのパフォーマンスに基づいて決定を下すことができます。
VectorDBBenchはPythonで書かれており、MITオープンソースライセンスの下でライセンスされています。VectorDBBenchは、その機能と性能の改善に取り組む開発者のコミュニティによって活発にメンテナンスされています。
VectorDBBenchをGitHubリポジトリ**からダウンロードして、我々のベンチマーク結果を再現したり、あなた自身のデータセットでパフォーマンス結果を得てください。
VectorDBBench Leaderboard](https://zilliz.com/vector-database-benchmark-tool?database=ZillizCloud%2CMilvus%2CElasticCloud%2CPgVector%2CPinecone%2CQdrantCloud%2CWeaviateCloud&dataset=medium&filter=none%2Clow%2Chigh&tab=1)で、主流のベクトルデータベースのパフォーマンスを簡単に見てみましょう。
ベクターデータベースの評価については、以下のブログをお読みください。
- ベンチマーク・ベクター・データベースのパフォーマンス:テクニックと洞察](https://zilliz.com/learn/benchmark-vector-database-performance-techniques-and-insights)
- VectorDBBench: Open-Source Vector Database Benchmark Tool](https://zilliz.com/learn/open-source-vector-database-benchmarking-your-way)
- ベクターデータベースを他のデータベースと比較する](https://zilliz.com/comparison)
VectorDB、GenAI、MLに関するその他のリソース
- ジェネレーティブAIリソースハブ|Zilliz](https://zilliz.com/learn/generative-ai)
- あなたのGenAIアプリのためのトップパフォーマンスAIモデル|Zilliz](https://zilliz.com/ai-models)
- RAGとは](https://zilliz.com/learn/Retrieval-Augmented-Generation)
- 大規模言語モデル(LLM)を学ぶ](https://zilliz.com/learn/ChatGPT-Vector-Database-Prompt-as-code)
- ベクトルデータベース101](https://zilliz.com/learn/what-is-vector-database)
- 自然言語処理(NLP)](https://zilliz.com/learn/introduction-to-natural-language-processing-tokens-ngrams-bag-of-words-models)
読み続けて

How to Build an Enterprise-Ready RAG Pipeline on AWS with Bedrock, Zilliz Cloud, and LangChain
Build production-ready enterprise RAG with AWS Bedrock, Nova models, Zilliz Cloud, and LangChain. Complete tutorial with deployable code.

Legal Document Analysis: Harnessing Zilliz Cloud's Semantic Search and RAG for Legal Insights
Zilliz Cloud transforms legal document analysis with AI-driven Semantic Search and Retrieval-Augmented Generation (RAG). By combining keyword and vector search, it enables faster, more accurate contract analysis, case law research, and regulatory tracking.

OpenAI o1: What Developers Need to Know
In this article, we will talk about the o1 series from a developer's perspective, exploring how these models can be implemented for sophisticated use cases.
The Definitive Guide to Choosing a Vector Database
Overwhelmed by all the options? Learn key features to look for & how to evaluate with your own data. Choose with confidence.