噂には聞くベクトルデータベース。なかなか使う機会がないのですが、なにやらとてもよさそうなのでちょっと調べたり試したりしてみました。
なおおためしのコードは Milvus
を使いましたが、 ほとんどClineに書いてもらいました^^
わかったこと
- ベクトルデータベースは「ベクトルで管理しているデータの検索を容易にする」ことを主な目的として使用するもの
- ベクトル検索できる主なメリットは(ベクトル化の基準による)近傍検索。つまり(ベクトル化の基準による)似たデータ探し
- ということは、大量のデータの、ベクトル化した値を、永続的に保持して活用したい場合に使用するとよさそう
- ベクトル化をデータベース側がやってくれるわけではない。格納データのベクトル化はアプリケーション側で行う
- 似たデータを探すのが得意、といえばOpenSearchだが、それとの差別化は?→OpenSearchにもベクトル検索機能はある(らしい)が、ベクトル検索だけを使うならベクトルデータベースのほうが早い(らしい)
- ベクトルデータベースで一番有名なのは
Milvus
のようだが、データベースの特性に応じて得意分野がありそう。
製品比較
製品名 | OSS | ホスティング形態 | 特徴 |
---|---|---|---|
Milvus | Yes | 自前ホスティング / マネージド(Zilliz Cloud) | 分散型で水平スケーリングが可能。IVF、PQ、HNSWなど複数のインデックスタイプをサポートし、非構造化データに最適。 |
Qdrant | Yes | 自前ホスティング / SaaS(Qdrant Cloud) | Rust製の高速な類似度検索エンジン。Docker対応で迅速な展開が可能。 |
Weaviate | Yes | 自前ホスティング / マネージド(Weaviate Cloud) | グラフベースのアプローチとGraphQLインターフェースを採用。メタデータ統合が容易で柔軟なデータ管理が可能。 |
Pinecone | No | マネージドサービスのみ | 完全管理型サービス。インフラ管理の負担がなく、シンプルなAPI統合と高いスケーラビリティを実現。 |
ChromaDB | Yes | 自前ホスティング | LangChainやLlamaIndexとの統合が容易。シンプルなAPIにより迅速なプロトタイピングや小~中規模プロジェクト向け。 |
※この内容の調査と表化はChatGPTにやってもらいました。Dockerで使えるのは Qdrant
だけであるかのような記述になっていますが、オープンソースのものはすべてDocker上で動かそうと思えば動かせると思います。なおサンプルコードでは Milvus
をDocker上で動かしています。
参考サイト
- https://myscale.com/blog/milvus-vs-opensearch-performance-analysis-2024/
- https://zilliz.com/jp/comparison/milvus-vs-opensearch
- https://zilliz.com/jp/vector-database-benchmark-tool
所感
- 現時点ではベクトル検索をやるなら「ベクトルデータベース」を名乗るものに1日の長がありそうです。ただなんでもできるというのは強いので、今後OpenSearchがベクトル検索機能を強化していった場合はどうなるかわからないですね。実際に使うタイミングでその時の状況を改めて調べるのがよさそうです