TiDB vs Neo4j AIアプリケーションに適したベクターデータベースの選択
ベクターデータベースとは?
TiDBと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のような軽量ベクトルデータベース。
- 小規模なベクトル検索が可能なベクトル検索アドオンを備えた従来のデータベース**。
TiDBは伝統的なデータベースであり、Neo4jはグラフ・データベースである。どちらもベクトル検索をアドオンとして備えている。この記事では、両者のベクトル検索機能を比較する。
TiDB: 概要とコアテクノロジー
PingCAP社によって開発されたTiDBは、オープンソースの分散型SQLデータベースであり、ハイブリッドトランザクションと分析処理(HTAP)機能を提供する。MySQLと互換性があるため、MySQLのエコシステムに慣れ親しんでいるチームにとっては導入が容易です。TiDBの分散SQLアーキテクチャは、SQLデータベースのリレーショナルモデルを維持しながら、NoSQLデータベースのような水平スケーラビリティを提供し、トランザクションと分析の両方のワークロードを処理するための高い柔軟性を実現しています。
TiDBの中核的な強みの1つはHTAPアーキテクチャであり、トランザクション(OLTP)と分析(OLAP)のワークロードを単一のデータベースで処理できるため、別々のシステムを用意する必要がありません。さらに、TiDBはMySQLと互換性があるため、アプリケーションコードを大幅に変更することなく、MySQLに依存している既存の環境に簡単に統合することができます。また、このデータベースは自動シャーディング機能を備えており、ノード間でデータを自動的に分散することで、強力な一貫性を維持しながら読み取りと書き込みのパフォーマンスを向上させます。
TiDBは外部ライブラリやプラグインとの統合によりベクトル検索をサポートし、ベクトル化されたデータの効率的な管理とクエリを可能にします。この機能とTiDBのHTAPアーキテクチャを組み合わせることで、トランザクションや分析ワークロードに加えてベクトル検索機能を必要とするビジネスにとって、TiDBは汎用性の高い選択肢となります。TiDBの分散アーキテクチャにより、必要な構成が整えば、大規模なベクタークエリを処理することができます。
TiDBにベクトル検索機能を組み込むには追加の設定が必要ですが、TiDBはSQLと互換性があるため、開発者はベクトル検索と従来のリレーショナルクエリを組み合わせることができます。この柔軟性により、TiDBはベクトル検索とリレーショナルデータベースの両方の機能を必要とする複雑なアプリケーションに適しており、多様なデータ管理ニーズに対する包括的なソリューションを提供します。
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を活用したアプリケーションを構築することができる。グラフクエリとベクトル類似性検索を組み合わせることで、アプリケーションは完全一致ではなく、意味的な意味に基づいて関連データを見つけることができる。例えば、映画の推薦システムは、グラフ構造を使用して、推薦がユーザーの好みと同じジャンルまたは時代から来ることを保証しながら、類似した映画を見つけるためにプロット埋め込みベクトルを使用することができます。
主な違い
検索方法
TiDB:TiDBはベクトル検索に外部ライブラリやプラグインを使用するため、ベクトル化されたデータを扱うためのサードパーティツールを統合している。そのため、ベクトル化されたデータを扱うためのサードパーティ製ツールを統合している。これにより、柔軟性は確保されているが、ベクトルクエリのパフォーマンスを最適化するために外部コンフィグに大きく依存している。TiDBはハイブリッド・トランザクションおよび分析処理(HTAP)ワークロードを実行できるため、ベクトル検索と従来のSQLベースの処理を組み合わせたアプリケーションに適している。
Neo4j:Neo4jはHNSW(Hierarchical Navigable Small World)グラフを使ったベクトル・インデックスをサポートしている。Neo4jは、コサインとユークリッド類似度メトリクスの組み込みサポートにより、効率的な近似k-最近傍(k-NN)検索を行うことができる。Neo4jのメソドロジはグラフ・アーキテクチャと緊密に統合されており、グラフ・トラバーサル操作とともにベクトルベースのクエリを扱うことができる。
データ
TiDB:分散型SQLデータベースであるTiDBは、MySQLとの互換性があり、構造化データの管理に優れている。ハイブリッドなワークロードをサポートし、外部ツールを使って非構造化データを統合することができるため、リレーショナルデータとベクトルデータのミックス管理が必要な環境に適している。しかし、この柔軟性にはベクター特有のタスクのための追加設定が必要だ。
Neo4j:Neo4jはグラフ・データ・モデリングが得意で、高度に接続された半構造化データの管理に理想的だ。ネイティブのベクトル検索機能は、関係性のトラバースやグラフ構造の処理における強みを補完する。レコメンデーションシステム、不正検知、ナレッジグラフなど、意味的な理解とエンティティ間のつながりを必要とするアプリケーションに適している。
スケーラビリティとパフォーマンス
TiDB:TiDBは分散アーキテクチャにより水平方向にスケーラブルです。自動シャーディングによりデータがノード間で均等に分散されるため、大規模なワークロードに適している。しかし、高性能なベクトル検索を行うには、外部ライブラリをチューニングし、TiDBのアーキテクチャと最適に統合する必要があるかもしれない。
Neo4j:Neo4jのベクトル検索性能は、類似ベクトル間のつながりを構造化することでクエリ時間を短縮するHNSWグラフによって最適化されている。量子化のような機能は、クエリの精度を維持しながらメモリを節約するのに役立つ。Neo4jはグラフのワークロードに対してうまくスケールしますが、非常に大きなベクトルデータセットの管理には慎重なリソース計画が必要かもしれません。
柔軟性とカスタマイズ
TiDB:SQL との互換性があり、既存の MySQL ベースのアプリケーションと統合できるため、柔軟性が高い。ベクタークエリーとリレーショナルクエリーを組み合わせることができるので、両方を必要とするアプリケーションに適している。しかし、カスタマイズは統合されたベクトルライブラリの機能に依存することが多い。
Neo4j:グラフベースのアプリケーションのために高度にカスタマイズ可能なNeo4jは、開発者がパフォーマンスと精度のバランスを取るためにベクトルインデキシングパラメータを調整することを可能にする。グラフクエリにベクトル検索を統合できるので、セマンティックな関係に依存するアプリケーションにはユニークな利点となる。
統合とエコシステム
TiDB:TiDBはMySQLのツールやエコシステムとうまく統合されているため、SQLベースのワークフローをすでに利用しているチームにとっては自然な選択だ。ベクター検索には外部プラグインが必要だが、MySQLの幅広いエコシステムと互換性があるため、採用しやすい。
Neo4j:Neo4jの統合機能は、グラフ中心のエコシステムに強く、AI/MLワークフローをよくサポートしている。グラフとベクトル操作を1つの環境で処理できるため、AIを活用したアプリケーションには大きなメリットとなる。
使いやすさ
TiDB:MySQLに慣れていれば、TiDBの学習曲線は低い。しかし、ベクトル検索を設定するには、使用する外部ライブラリを理解する必要があり、複雑さを増す可能性がある。
Neo4j:Neo4jのグラフ・クエリ言語(Cypher)は、SQLユーザーにとっては学習曲線が急だが、ネイティブのベクトル検索は使いやすく、TiDBに比べて外部設定が少なくて済む。
コスト
TiDB:コストは、分散ノードの数と、統合ベクター・ライブラリの追加ライセンスまたは運用コストに依存します。マネージド・サービスも利用可能だが、全体的なコストに上乗せされる。
Neo4j:Neo4jのコストは、グラフ・ワークロードの規模や必要な機能に依存する。ベクトル検索については、TiDBがサードパーティ製ツールに依存しているのに比べ、ネイティブ実装の方がオーバーヘッドが少ない。
セキュリティ
TiDB:SQLベースのセキュリティ機能、暗号化、アクセス制御、認証。ベクトル操作のセキュリティは、使用する外部ライブラリに依存する。
Neo4j:Neo4j**:グラフやベクトル・データの暗号化やきめ細かなアクセス制御などのセキュリティ機能を内蔵。ベクトル検索をコア・プラットフォームに統合しているため、セキュリティ管理が簡素化されている。
TiDBを使用する場合
TiDBは、トランザクションと分析ワークロードの両方で大規模な分散データ管理を必要とするアプリケーション向けです。HTAPは、外部との統合により、構造化データ、半構造化データ、非構造化データを管理することができます。ベクトル検索をSQLクエリと組み合わせたり、ベクトル演算を既存のMySQL互換環境に統合したりするユースケースであれば、TiDBは柔軟でスケーラブルなソリューションです。分散システム間での強力な一貫性とスケーラビリティが重要なシナリオに最適です。
Neo4jを使う場合
Neo4jは、グラフ・データモデルをベースとし、エンティティ間の関係を探索する高度な機能を必要とするアプリケーション向けである。グラフクエリと統合されたネイティブのベクトル検索は、レコメンデーションシステム、ナレッジグラフ、不正検知システムのようなAIを活用したアプリケーションの構築に最適です。意味理解を重視し、高度に接続されたデータセットのつながりを見つけるのであれば、ベクトルインデックスを持つNeo4jのグラフ中心のアプローチがユニークな利点となる。グラフ・トラバーサルと類似性検索を組み合わせることで、接続データの探索を優先するワークロードに効率的です。
要約
TiDBとNeo4jは異なるユースケースに対応し、それぞれが異なる分野で優れている。TiDBの強みは、ハイブリッドなトランザクション処理と分析処理、分散スケーラビリティ、MySQLとの互換性である。Neo4jのグラフベースのアーキテクチャとネイティブのベクトルインデックスは、関係性とセマンティックな洞察を優先するアプリケーションに最適だ。ベクトル検索を備えた堅牢な分散SQL機能が必要なのか、それともベクトル検索を接続されたデータワークフローに統合するグラフデータベースが必要なのか。データの種類、ワークロードパターン、パフォーマンス要件を評価して決定してください。
TiDBと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)
読み続けて

3 Easiest Ways to Use Claude Code on Your Mobile Phone
Run Claude Code from your phone with Remote Control, Happy Coder, or SSH + Tailscale. Comparison table, setup steps, and tools for typing, memory, and parallel tasks.

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.

Building RAG Pipelines for Real-Time Data with Cloudera and Milvus
explore how Cloudera can be integrated with Milvus to effectively implement some of the key functionalities of RAG pipelines.
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.


