Redis vs Neo4j:ニーズに合ったベクターデータベースの選択
AIやデータドリブン・テクノロジーの進歩に伴い、アプリケーションに適切なベクター・データベースを選択することがますます重要になってきている。RedisとVearchは、この分野における2つの選択肢です。この記事では、プロジェクトのために十分な情報を得た上で決断するのに役立つ、これらのテクノロジーを比較します。
ベクターデータベースとは?
Redisと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のような軽量ベクトルデータベース。
- 小規模なベクトル検索が可能なベクトル検索アドオンを備えた従来のデータベース**。
Redisはインメモリデータベースであり、Neo4jはグラフデータベースである。どちらもアドオンとしてベクトル検索を持っている。この投稿では、両者のベクトル検索機能を比較する。 ;
Redis:概要とコア技術
Redisはもともとインメモリ・データ・ストレージとして知られていたが、現在はRedis Stackの一部であるRedis Vector Libraryを通じてベクトル検索機能を追加した。これにより、Redisはスピードとパフォーマンスを維持したまま、ベクトルの類似検索ができるようになりました。
Redisのベクトル検索は既存のインフラストラクチャの上に構築されており、高速なクエリ実行のためにインメモリ処理を使用している。Redisは近似最近傍検索にFLATとHNSW(Hierarchical Navigable Small World)アルゴリズムを使用し、高次元のベクトル空間での高速かつ正確な検索を可能にしています。
Redisのベクトル検索の主な強みの1つは、ベクトルの類似性検索と他の属性に関する従来のフィルタリングを組み合わせることができる点です。このハイブリッド検索により、開発者は意味的類似性と特定のメタデータ基準の両方を考慮した複雑なクエリを作成することができるため、多くのAI駆動型アプリケーションで汎用性があります。
Redis Vector Libraryは、開発者がRedisでベクトルデータを扱うためのシンプルなインターフェースを提供します。柔軟なスキーマ設計、カスタムベクタークエリ、セマンティックキャッシングやセッション管理などのLLM関連タスクの拡張機能などを備えている。これにより、AI/MLエンジニアやデータサイエンティストは、特にリアルタイムのデータ処理と検索のために、RedisをAIワークフローに統合することが容易になります。
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を活用したアプリケーションを構築することができる。グラフクエリとベクトル類似性検索を組み合わせることで、アプリケーションは完全一致ではなく、意味的な意味に基づいて関連データを見つけることができる。例えば、映画の推薦システムは、グラフ構造を使用して、推薦がユーザーの好みと同じジャンルまたは時代から来ることを保証しながら、類似した映画を見つけるためにプロット埋め込みベクトルを使用することができます。
主な違い
ベクトル検索のためにRedisとNeo4jのどちらかを選択する場合、違いを理解することがユースケースに適した決定をするのに役立ちます。ここでは、ベクトル検索にとって最も重要な要素について、これらのテクノロジーを比較してみましょう。
検索方法
Redisはベクトルの類似性検索にFLATとHNSW(Hierarchical Navigable Small World)アルゴリズムの両方を使用します。FLATは精度が重要な小規模なデータセットに適しており、HNSWは大規模なデータセット向けの高速な近似最近傍探索です。
Neo4jはベクトル検索にHNSWを使用し、コサインとユークリッド類似関数で4096次元までのベクトルをサポートします。Redisのデュアル・アプローチと比較すると制限されているように見えるかもしれませんが、Neo4jのHNSWはよく最適化されており、ほとんどのユースケースで機能します。
データハンドリング
Redisはベクトルをメモリ上に保存するため、読み込み操作が超高速です。ベクトル類似検索と属性フィルタリングを組み合わせたハイブリッドクエリをサポートしています。例えば、価格帯やカテゴリーでフィルタリングしながら、類似した商品画像を検索することができます。
Neo4jはグラフファーストのアプローチをとり、ベクトルをノードやリレーションシップのプロパティとして保存します。これは、エンティティ間の関係が重要な連結データにとって強力です。ベクトル類似性検索をグラフ・トラバーサル・クエリーと組み合わせることができるので、ソーシャル・ネットワークのユーザーが推薦する類似商品を見つけるような複雑な操作も可能です。
スケーラビリティとパフォーマンス
Redisのインメモリアーキテクチャは超高速ですが、すべてのデータをメモリに収めなければならないため、大規模なデータセットを扱う場合はコストがかかることがあります。RedisはRedis Clusterを通して水平スケーリングを提供するので、ベクターデータを複数のノードに分割することができます。
Neo4jは水平方向と垂直方向の両方のスケーリングを提供する。Neo4jのネイティブグラフアーキテクチャは、スケールの大きな連結データに最適化されています。Neo4jのベクトルインデックスは、メモリ使用量を削減するために量子化を使用します。
統合とエコシステム
Redisは一般的な機械学習フレームワークとうまく統合でき、複数のプログラミング言語用のクライアント・ライブラリを備えている。Redis Stackには、時系列データ、検索、JSONサポートのための追加モジュールがあります。
Neo4jは、Pythonのデータサイエンススタックのような一般的なデータサイエンスツールと強力に統合されている。Cypherクエリ言語はグラフ操作用に設計されているため、ベクトル検索とグラフ機能の両方を必要とするアプリケーションで威力を発揮する。
使いやすさ
Redisは基本的なベクトル検索操作の学習曲線がシンプルです。コマンドの構文は簡単で、Redis Stackのドキュメントにはベクトル検索の実装例があります。
Neo4jはCypherクエリ言語を学ぶ必要があり、最初は時間がかかる。しかし、Cypherの表現力は複雑なクエリをより読みやすくする:
コストの考慮
Redisはインメモリデータベースであるため、より多くのメモリを必要とする。しかし、スピードが重要なユースケースでは、Redisのパフォーマンス上の利点がこれらのコストを相殺するかもしれません。
Neo4jは、ストレージ・アーキテクチャと量子化機能により、必要なメモリ量が少ない。コミュニティ版とエンタープライズ版があり、エンタープライズ版には高度なセキュリティやクラスタリングなどの追加機能がある。
セキュリティ機能
どちらもセキュリティ機能を備えている。RedisにはACL、SSL/TLS暗号化、ロールベースのアクセス制御がある。Neo4j Enterpriseには、きめ細かいアクセス制御と高度な認証がある。
ベクトル検索にRedisを使う場合
レコメンデーション・エンジン、リアルタイムの不正検知、ライブのセマンティック検索機能など、即座の応答が必要なアプリケーションでは特に、リアルタイムのベクトル検索のパフォーマンスが最優先の場合、Redisを使用してください。データセットがメモリに収まり、属性フィルタリングを伴う高スループットのベクトル類似性検索を行う必要がある場合に最適です。電子商取引の商品推奨、コンテンツ・マッチング・システム、AIを搭載したチャットボットなど、即時応答が必要なアプリケーションに適しています。
ベクトル検索にNeo4jを使う場合
Neo4jは、エンティティ間の関係やベクトル類似性検索を理解し、利用する必要があるアプリケーションに適しています。ナレッジグラフ、ソーシャルネットワーク、複雑なレコメンデーションシステムなど、アイテム間の関係がベクトルの類似性と同じくらい重要なアプリケーションに最適です。グラフ・トラバーサルとベクトル検索の組み合わせは、創薬、ソーシャル・レコメンデーション・エンジン、不正検知システムなど、接続されたデータのパターンを分析する必要があるユースケースに適している。
結論
ベクトル検索のためにRedisとNeo4jのどちらを選ぶかは、パフォーマンス要件、データ構造、アプリケーションのニーズによって決まる。Redisはリアルタイムのベクトル検索操作において最も高速でシンプルであり、Neo4jはグラフ機能とベクトル検索機能の組み合わせである。ミリ秒のレスポンスタイムと単純なベクトル類似性検索が必要な場合はRedisを使い、ベクトル検索とデータモデルの複雑な関係分析を組み合わせる必要がある場合はNeo4jを使う。どちらもベクトル検索が可能であることを覚えておいてほしい。
この記事ではRedisと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: オープンソースベクターデータベースベンチマークツール](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)
読み続けて

Zilliz Cloud Enterprise Vector Search Powers High-Performance AI on AWS
Zilliz Cloud on AWS powers secure, scalable, ultra-fast vector search for enterprise AI apps, with BYOC, sub-10ms latency, and zero-DevOps simplicity.

Milvus WebUI: A Visual Management Tool for Your Vector Database
Explore Milvus WebUI to monitor, manage, and optimize your vector database with real-time insights, performance tracking, and system health monitoring.

Selecting the Right ETL Tools for Unstructured Data to Prepare for AI
Learn the right ETL tools for unstructured data to power AI. Explore key challenges, tool comparisons, and integrations with Milvus for vector search.
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.


