SingleStoreとNeo4jの比較 AIアプリケーションに適したベクターデータベースの選択
ベクターデータベースとは?
SingleStoreとNeo4jを比較する前に、まずベクターデータベースの概念を探ってみましょう;
ベクトルデータベース](https://zilliz.com/learn/what-is-vector-database)は、特に高次元のベクトルを格納し、クエリするように設計されています。ベクトルは非構造化データの数値表現です。これらのベクトルは、テキストの意味、画像の視覚的特徴、または製品の属性などの複雑な情報をエンコードします。効率的な類似検索を可能にすることで、ベクトルデータベースはAIアプリケーションにおいて極めて重要な役割を果たし、より高度なデータ分析と検索を可能にしている。
ベクトルデータベースの一般的なユースケースには、電子商取引の商品推奨、コンテンツ発見プラットフォーム、サイバーセキュリティにおける異常検知、医療画像分析、自然言語処理(NLP)タスクなどがある。また、AI幻覚のような問題を軽減するために、外部知識を提供することによって大規模言語モデル(LLM)の性能を向上させる技術であるRAG(Retrieval Augmented Generation) において重要な役割を果たす。
市場には、以下のような多くの種類のベクトル・データベースがある:
- Milvus](https://zilliz.com/what-is-milvus)、Zilliz Cloud(フルマネージドMilvus)など。
- Faiss](https://zilliz.com/learn/faiss)やAnnoyのようなベクトル検索ライブラリ。
- Chroma](https://zilliz.com/blog/milvus-vs-chroma)やMilvus Liteのような軽量ベクトルデータベース。
- 小規模なベクトル検索が可能なベクトル検索アドオンを備えた従来のデータベース**。
SingleStoreは分散型のリレーショナルSQLデータベース管理システムであり、Neo4jはグラフデータベースである。どちらもベクトル検索をアドオンとして持っている。この記事では、両者のベクトル検索機能を比較する。
SingleStore:概要とコアテクノロジー
SingleStoreは、データベース自体にベクター検索機能を持たせることで、技術スタックに個別のベクターデータベースを必要としません。ベクターは通常のデータベーステーブルに格納され、標準的なSQLクエリで検索することができます。例えば、価格帯でフィルタリングしながら類似の商品画像を検索したり、特定の部門に結果を限定しながらドキュメントの埋め込みを検索したりすることができます。システムは、ベクトルインデックスにFLAT、IVF_FLAT、IVF_PQ、IVF_PQFS、HNSW_FLAT、HNSW_PQを、類似性マッチングにドット積とユークリッド距離を使用したセマンティック検索の両方をサポートしている。これは、推薦システム、画像認識、AIチャットボットなど、類似性マッチングが高速なアプリケーションに超便利である。
SingleStoreの中核は、パフォーマンスとスケールのために構築されている。データベースは複数のノードにデータを分散させるので、大規模なベクトルデータ操作に対応できます。データが大きくなっても、ノードを追加すれば問題ありません。クエリプロセッサーはベクトル検索とSQLオペレーションを組み合わせることができるので、複数のクエリを別々に実行する必要がありません。ベクターのみのデータベースとは異なり、SingleStoreはこれらの機能を完全なデータベースの一部として提供するため、複数のシステムを管理したり、複雑なデータ転送に対応したりすることなく、AI機能を構築することができます。
SingleStoreのベクトルインデックスには2つのオプションがあります。1つ目は厳密なk-最近傍(kNN)検索で、クエリベクトルに最も近いk個の近傍集合を正確に見つけます。しかし、非常に大きなデータセットや高い同時実行性の場合、SingleStoreはベクトルインデックスを使用した近似最近傍(ANN)検索もサポートします。ANN検索は、厳密なkNN検索よりもはるかに高速にk近傍を見つけることができます。速度と精度はトレードオフの関係にあり、ANNは高速ですが、正確なk個の最近傍セットを返すとは限りません。インタラクティブな応答時間が必要で、絶対的な精度を必要としない数十億のベクトルを扱うアプリケーションには、ANN検索が適しています。
SingleStoreにおけるベクトルインデックスの技術的実装には特別な要件があります。これらのインデックスはカラムストアテーブルにのみ作成可能で、ベクトルデータを格納する単一のカラムに作成する必要があります。システムは現在Vector Type(dimensions[, F32])フォーマットをサポートしており、F32は唯一サポートされている要素タイプです。この構造化されたアプローチにより、SingleStoreは大規模な言語モデルからのベクトルを使用した意味検索、焦点を絞ったテキスト生成のためのRAG(retrieval-augmented generation)、ベクトル埋め込みに基づく画像マッチングなどのアプリケーションに最適です。これらを従来のデータベース機能と組み合わせることで、SingleStoreは開発者がパフォーマンスとスケールを維持しながら、SQL構文を使用して複雑な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を活用したアプリケーションを構築することができる。グラフクエリとベクトル類似性検索を組み合わせることで、アプリケーションは完全一致ではなく、意味的な意味に基づいて関連データを見つけることができる。例えば、映画の推薦システムは、グラフ構造を使用して、推薦がユーザーの好みと同じジャンルまたは時代から来ることを保証しながら、類似した映画を見つけるためにプロット埋め込みベクトルを使用することができます。
主な違い
検索方法
SingleStore:高精度の厳密k-最近傍(kNN)と大規模データセットでの高速化のための近似最近傍(ANN)。ANN法はHNSWやIVFのようなベクトルインデキシングアルゴリズムを使用します。SingleStoreはこれらをSQLベースのデータベースに格納し、構造化データと共にベクトルを検索することができます。
Neo4j:高速なANN検索にHNSWグラフを使用。この方法は、グラフベースの接続を使用してベクトル空間をナビゲートします。Neo4jのベクトル・インデックスは、グラフ・モデルと緊密に結合しているので、グラフ接続されたデータ内を意味的に検索できる。
**主な違いSingleStoreはハイブリッドクエリ(ベクトル+リレーショナルSQL)に適しており、Neo4jは関係が重要なセマンティック検索(ベクトル+エンティティ)に適している。
データ
SingleStore:構造化、半構造化、非構造化。ベクターはカラムストア・テーブルに格納されるため、ベクター操作と同時に高性能な分析クエリーを実行できる。
Neo4j:主にグラフデータ用。ベクトルはノードやリレーションシップのプロパティとして格納されるため、意味的類似性とグラフベースのコンテキストの両方を必要とするアプリケーションに最適。
**主な違いSingleStoreは、混合データ型に対してより柔軟であり、Neo4jはグラフ・ファーストである。
スケーラビリティとパフォーマンス
SingleStore:分散スケーラビリティのために設計されています。データの増加に伴い、ノードを追加することは一貫したパフォーマンスを意味します。ベクトル検索は分散クエリーエンジンと統合されているため、大規模なベクトル検索を同時に実行できます。
Neo4j:Neo4j**:グラフ・ワークロードの拡張性は高いが、グラフ・トラバーサル・オーバーヘッドのため、非常に大きなデータセットでは苦戦を強いられることがある。そのベクトル検索では、パフォーマンスと精度のバランスを取るためにHNSWパラメータを最適化する必要がある。
**主な違いSingleStoreは巨大なデータセットに対してリニアにスケーラブルだが、Neo4jはグラフを多用するアプリケーションに適している。
柔軟性とカスタマイズ
SingleStore:ベクトル検索と SQL クエリーを組み合わせることができる。複数のベクトルインデクシングアルゴリズムをサポートし、ユーザーがインデクシングとクエリパラメータを調整できる。
Neo4j:ベクトル・インデックスのカスタマイズ・オプション(量子化、最大接続数などのグラフ・パラメーターの微調整)。リレーションシップ・ベクトルインデックスは、複雑なグラフのユースケースのための柔軟性をもう1つ追加します。
**主な違いどちらもカスタマイズ可能だが、SingleStoreはSQLベース、Neo4jはグラフドリブン。
統合とエコシステム
SingleStore:統一されたプラットフォームなので、追加システムは不要。SQL経由で最新のデータパイプラインやAI/MLツールとうまく統合し、一般的なエンベッディングモデルをサポートします。
Neo4j:Cypherクエリ言語のようなグラフに特化したツールとうまく統合し、埋め込みモデルをサポートする。グラフを多用するエコシステムに適合する。
**主な違いSingleStoreはワンストップのデータベースとして統合を簡素化し、Neo4jはグラフ中心のエコシステムを補完する。
ユーザビリティ
SingleStore:SQL ネイティブのインターフェイスなので、リレーショナル・データベースに精通した開発者が使用できます。セットアップとメンテナンスはデータベースのプロにとって簡単。
Neo4j:グラフ・データベースの概念とCypherクエリ言語の知識が必要で、初心者にとっては学習曲線が急になるかもしれない。
**主な違いNeo4jは、グラフの知識を必要とする。
コスト
**シングルストア1つのシステムで複数の機能(リレーショナル検索とベクトル検索)を利用できるため、別々のデータベースを管理する必要がない場合がある。マネージドサービスにより、コスト管理が簡素化できる。
Neo4j:価格はワークロードの規模やマネージド・サービスなどの機能によって異なる。グラフを多用するワークロードの場合、その特化した機能はコストを正当化するかもしれない。
**主な違いSingleStoreは統合されており、Neo4jはニッチなグラフのユースケースのためにコストがかかるかもしれない。
セキュリティ
SingleStore:暗号化、認証、ロールベースのアクセス制御、GDPRコンプライアンス。
Neo4j:暗号化通信、ロールベースのパーミッション、監査。
**主な違い同じ、組織による
SingleStoreを選択する場合
SingleStoreを選択するのは、大規模な分散データがあり、ベクトル検索をリレーショナルデータベースに緊密に統合する必要がある場合です。類似商品を価格やカテゴリでフィルタリングするeコマースアプリのように、ベクトル類似度と構造化データを組み合わせたハイブリッドクエリに最適です。さらに、SingleStoreは水平方向に拡張でき、正確な最近傍検索と近似的な最近傍検索の両方を実行できるため、レコメンデーションエンジン、AIチャットボット、膨大なデータセットに対するセマンティック検索のような並行性の高いワークロードに最適です。
Neo4jを選ぶとき
Neo4jは、意味的・文脈的関係を持つグラフベースのデータを使用する場合に適している。そのベクトル検索は、ソーシャルネットワーク分析、詐欺検出、またはグラフ構造と埋め込みベースの類似性の両方を使用する推薦システムのような、グラフ・トラバーサルと類似性クエリを組み合わせたアプリケーションに最適です。もしあなたのアプリケーションが、同じジャンルや時代の映画を見つけるような、エンティティの関係から深くつながったデータや洞察を必要とするなら、Neo4jのネイティブグラフデータベースが最適です。
要約
SingleStoreとNeo4jはどちらも素晴らしいツールであり、それぞれ異なるユースケースのためのものである。SingleStoreは、ベクトル検索をリレーショナルデータと統合し、ビッグデータ用に拡張する。Neo4jは、セマンティックベクトル検索をグラフ分析と組み合わせ、関係ベースの洞察を得る。データ、クエリ、パフォーマンス要件に適したツールを選択しましょう。構造化データにわたるハイブリッドクエリや、コンテキストに基づいたグラフベースのレコメンデーションなど、ユースケースに合わせて選択することで、最良の結果を得ることができます。
これを読めばSingleStoreと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)
読み続けて

A Developer's Guide to Exploring Milvus 2.6 Features on Zilliz Cloud
Milvus 2.6 marks a shift from “vector search + glue code” to a more advanced retrieval engine, and it is now Generally Available (GA) on Zilliz Cloud (a managed Milvus service).

Smarter Autoscaling in Zilliz Cloud: Always Optimized for Every Workload
With the latest upgrade, Zilliz Cloud introduces smarter autoscaling—a fully automated, more streamlined, elastic resource management system.

Announcing VDBBench 1.0: Open-Source VectorDB Benchmarking with Your Real-World Production Workloads
Discover VDBBench 1.0, an open-source tool for benchmarking vector databases with real-world production data, streaming ingestion, and concurrent workloads.
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.


