ベクトルデータベースとベクトル検索は、その速度とスケーラビリティのために急速に人気を集めています。従来の機械学習モデルが繰り返しのトレーニングを必要とするのに対し、ベクトル検索はベクトルデータベース内でユークリッド距離やコサイン類似度などの基本的な類似性尺度を使用して迅速に実行することができます。これにより、ベクトル検索はMLベースのモデルに比べて高いスケーラビリティを持ち、コスト効率も高くなります。
ベクトルデータベースの利用がますます増える中、スループットやコストなどのさまざまな要素を考慮して、特定のニーズに基づいて最適なデータベースを選ぶことは自然なことです。ユーザーが情報を持った意思決定をするのを支援するために、私たちはさまざまなベクトルデータベースの詳細な比較を提供する一連の記事を開始します。前回のブログでは、MyScaleとPineconeの徹底比較 (opens new window)を行いました。今回は、MyScaleとZillizの詳細な比較について掘り下げていきます。
# MyScale
MyScaleは、AIアプリケーションとソリューションに特化したクラウドベースのデータベースであり、オープンソースの高スケーラビリティなClickHouseデータベースを活用しています。MyScaleの利点は次のとおりです。
- 構造化データとベクトル化データの分析処理を統一されたプラットフォームでサポートおよび管理します。
- ベクトル化データに対して優れたスピードで操作を実行するために、高度なOLAPデータベースアーキテクチャを利用します。
- MyScaleとの対話にはSQLのみが必要です。
# Zillizの紹介
Zillizは、オープンソースのMilvusプロジェクトをベースにした、高パフォーマンスな類似性検索と機械学習のための強力なクラウドネイティブベクトルデータベースです。Milvusがバックボーンとなり、Zillizはインフラストラクチャ管理のオーバーヘッドを抑えた完全に管理されたクラウドサービスを提供しています。
このブログでは、MyScaleとZillizのクラウドオファリングを比較し、どちらがあなたのニーズにより適しているかを理解するのに役立ちます。比較をホスティングから始めましょう。
# ホスティング
ホスティングは、データベースソリューションを選ぶ際に重要な要素であり、パフォーマンス、スケーラビリティ、管理に大きな影響を与えます。堅牢なホスティングオプションにより、データベースがさまざまな負荷を処理し、アクセス可能で、簡単にメンテナンスできるようになります。また、ホスティングオプションを理解することで、データベースを自分のリソースを使用してローカルに展開する必要があるか、クラウドホスティングサービスを選択する必要があるかを判断することができます。
ホスティングに関しては、MyScaleとZillizの両方がオープンソースのバージョン、クラウドベースのソリューション、およびローカルホストのソリューションを提供しています。クラウドホスティングでは、無料と有料のティアが提供されており、詳細はすぐに説明します。
ローカルホスティングの場合、Dockerイメージが一般的なオプションです。MyScaleのDockerイメージを次のように起動できます。
docker run --name MyScale --net=host myscale/MyScale:1.6
Zillizの場合、Dockerコンポーズを使用できます。
curl <https://github.com/milvus-io/milvus/releases/download/v2.0.2/milvus-standalone-docker-compose.yml> -o docker-compose.yml
docker-compose up -d
# コア機能
次に、2つのデータベースのコア機能の比較を始めます。
# クエリ言語とAPIサポート
ZillizとMyScaleの両方が、Python、Node.js、Goなどのさまざまなプログラミング言語をサポートしています。ZillizはさらにC++、.Net(一部)、RESTful、Rubyもサポートしています。
ただし、MyScaleの真の強みはSQLのサポートにあります。MyScaleでは従来のSQLクエリを使用でき、ベクトルデータベースや従来のデータベースの組み合わせにもシームレスに動作します。
TL;DR:
ZillizとMyScaleの両方がさまざまな言語でSDKを提供していますが、MyScaleは完全なSQLサポートを備えているという明確な利点があります。
# メタデータサポート
Zillizはメタデータフィルタリングで正規表現をサポートしています。また、最新バージョンではスカラー反転インデックスもサポートしています(Milvus 2.4ベース)。
MyScaleは、ClickHouseとの統合によるメタデータフィルタリングをサポートしており、堅牢なインデックス作成と並列処理の機能を提供しています。これにより、MyScaleは大規模なデータセットを扱う際に特に高パフォーマンスで正確なフィルタリング検索を実行することができます。さらに、メインのベクトル検索の前にデータセットを狭めるための事前フィルタリング戦略も採用されており、パフォーマンスと精度を向上させています。
TL;DR:
Zillizはメタデータフィルタリングで正規表現の利点がありますが、MyScaleのメタデータフィルタリングはClickHouseのスケーラビリティによりパフォーマンスが低下せず、特に大規模なデータセットに対しても優れたパフォーマンスを発揮します。
# サポートされるデータ型
MyScaleとZillizの両方が明らかにベクトルデータをサポートしています。Zillizの最新バージョンでは、スパースベクトルとバイナリベクトルもサポートしています。一方、MyScaleは完全なSQLサポートにより、すべてのSQLデータ型を処理できます。例えば、次のようなベクトル(body_vector
)とその他のデータ型(この場合はUInt64
とString
)を属性とするテーブルを作成できます。
CREATE TABLE default.wiki_abstract_mini(
`id` UInt64,
`body` String,
`title` String,
`url` String,
`body_vector` Array(Float32),
CONSTRAINT check_length CHECK length(body_vector) = 1024
)
ENGINE = MergeTree
ORDER BY id
SETTINGS index_granularity = 128;
TL;DR:
Zillizはスパースベクトルのサポートの利点がありますが、MyScaleは完全なSQLデータ型の利点があります。
# インデックス作成
MyScaleとZillizの両方がHNSW、IVF(およびその派生)、FLATなど、多くのインデックス作成アルゴリズムをサポートしています。Zillizは自動インデックスを提供しており、動的なキャッシングや動的な量子化などの機能を使用しています。自動インデックスは完全に新しいインデックス作成アルゴリズムではなく、これらのサポートされるインデックス作成アルゴリズムをバックグラウンドで使用しています。
MyScaleは、他のベクトルデータベースだけでなく、すべての主要なベクトルデータベースを上回る、階層的なツリークラスタリングとグラフベースの検索を組み合わせた**Multi-Scale Tree Graph(MSTG)**をサポートすることで、一歩進んでいます。MSTGは、リソース消費を削減しながらより高速な検索を提供することで、現代のアルゴリズムを上回ります。
# フィルタリングされたベクトル検索と全文検索
MyScaleは、**Multi-Scale Tree Graph(MSTG)**アルゴリズムとビットマスキング技術を使用して、フィルタリングされたベクトル検索を最適化しています。ClickHouseの高度なインデックス作成と並列処理の機能と組み合わせることで、MyScaleは大規模なデータセットを効率的に処理できます。事前フィルタリング戦略を利用することで、MyScaleはメインのベクトル検索の前にデータセットを絞り込み、最も関連性の高いデータのみを処理することができます。これにより、パフォーマンスと精度の両方が大幅に向上します。
一方、Zillizもビットマスクを活用して、大規模なデータセット全体に対して効果的にフィルタ条件を管理および適用します。このアプローチにより、Zillizはパフォーマンスにほとんど影響を与えずに複雑なフィルタリング操作を実行することができます。
両方のデータベースは、Tantivyのおかげで検索機能が豊富です。両方ともフルテキスト検索をサポートしており、他のベクトルデータベースではサポートされていない機能です。どちらもハイブリッド検索 (opens new window)をサポートしているため、両方の結果を組み合わせてより良い結果を提供します。上記の画像は、与えられたテーブルwiki_abstract_mini
に対するハイブリッド検索をかなりわかりやすく説明しています。
# マルチベクトル検索
**MyScaleとZillizの両方がマルチベクトル検索をサポートしています。**さらに、Zillizは複数のベクトルに格納されたエンティティを検索結果でグループ化し、まとめて結果を表示するグループ化検索も提供しています。同様に、MyScaleはSQLのGROUP BY
句を使用してグループ化検索をサポートしています。これにより、ユーザーは効率的に検索結果を集計およびグループ化し、MyScale内で大規模なデータセットを処理および分析しやすくすることができます。
# ジオ検索
ジオ検索は、地図やGISアプリケーションだけでなく、他の多くのアプリケーションにとっても非常に重要な機能です。FoodPandaや一部の食料品店など、シンプルなアプリケーションでも必要になる場合があります。Zillizは提供していませんが、MyScaleにはジオ空間関数 (opens new window)が数多く用意されています。例えば、この関数は地球上の2つの点(マニフォールドとして扱われる)間の距離を求めます。
greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)
# LLM APIの統合
MyScaleとZillizの両方が、OpenAI、LLamaIndex、LangChainなどの多くのLLM APIをサポートしています。両方ともCohereモデルとDSPyをサポートしており、自動プロンプティングに使用することができます。以下は、LangChainをMyScaleと統合するコードの例です。
from langchain_community.vectorstores import MyScale
docsearch = MyScale.from_documents(docs,embeddings)
output= docsearch.similarity_search("How LLMs operate?",3)
# 価格設定
最後に、すべてのソリューションは2つの最終的なパラメータで制約されます:価格と効率性。効率性については、すぐにベンチマークを行います。まず、経済的な比較を行います。
ZillizとMyScaleの両方が無料と有料のティアを提供しています。ここでは、両者の簡単な比較を提供します。
# 無料ティア
Zillizの無料ティアは、0.5Mの768次元ベクトルまでの2つのコレクションをサポートしています(GCPホスティングの場合;AzureとAWSは専用サーバーのみで利用可能です)。
一方、MyScaleは最大5百万の768次元ベクトルの無料ストレージを提供しており、これはコレクションの容量の10倍以上、または2つのコレクションの容量の5倍以上です。これはZillizの無料ティアよりもはるかに高いです(有料ティアの容量最適化に相当する1CUの容量最適化)ので、初期費用なしでより大規模なデータセットを管理する必要があるユーザーにとって、MyScaleはより魅力的なオプションです。
# 有料ティア
無料ティアは実験には適していますが、最終的には専用サーバーにソリューションを展開する必要があります。これにはお金が必要です。MyScaleまたはZillizの投資に対する価値は、ここで分析されます。
注意:
Zillizの物理ノードはComputing Uni(CU)と呼ばれ、MyScaleの物理ノードはPodと呼ばれます(以降はそれぞれこのように参照されます)。
ZillizとMyScaleの両方が2種類の有料ホスティングを提供しています。
- 容量最適化:Pod/CUごとにより大きなストレージを目指します。MyScaleは1つのPodあたり1000万ベクトルを提供し、Zillizは1つのCUあたり500万ベクトルを提供します。
- パフォーマンス最適化:パフォーマンスを優先するアプリケーション向けです(レイテンシを低くし、QPSを高くします)。ここでは、MyScaleは1つのPodあたり500万ベクトルを提供します。Zillizは1つのCUあたり150万ベクトルを提供します。
どちらを選ぶか迷っている場合は、容量最適化のホスティングを選択してください。
データ駆動の世界では、正確な数字を示すことが役立ちます。比較のために、ベクトルの次元を768とし、30日間の月を想定します。また、GCPホスティングを使用します(それ以外が明示されていない限り)。
# サーバーレスのZilliz
サーバーレスのZillizホスティング(仮想CUを使用)では、1か月の間にすべての設定で1Mの読み取り操作と1Mの書き込み操作を想定します。
ベクトル容量 | 時間当たりの料金 |
---|---|
100万 | 0.09$ |
--- | --- |
500万 | 0.21$ |
1000万 | 0.31$ |
2000万 | 0.47$ |
4000万 | 0.74$ |
8000万 | 1.15$ |
# 容量最適化
容量最適化のCUでは、Zillizは1つのCUあたり500万ベクトルを提供し、MyScaleは1つのPodあたり1000万ベクトルを提供します。この差は、MyScaleの時間当たりのコストがはるかに低くなるということを意味します。
ベクトル容量 | Zilliz($) | Computing Units(CUs) | MyScale($) | Pods |
---|---|---|---|---|
1000万 | 0.276 | 2 | 0.094 | 1 |
--- | --- | --- | --- | --- |
2000万 | 0.55 | 4 | 0.19 | 2 |
4000万 | 1.1 | 8 | 0.38 | 4 |
8000万 | 2.2 | 16 | 0.76 | 8 |
# パフォーマンス最適化
前述のように、MyScaleはパフォーマンス最適化の設定で1つのPodあたり500万ベクトルを提供しますが、これはZillizが提供する制限(1つのPodあたり150万ベクトル)の3倍以上です。しかし、それだけではありません。 Zillizは余分なCUを請求しています(明らかに理由がないようです)。たとえば、1000万ベクトルの場合、必要なCUの数は次のようになります。
1.510=6.67≈7
しかし、8つのCUが表示されます。同様に、2000万の場合、14を請求するべきですが、余分な数のCUを請求しています。最後に、40万の場合は正確な数のCUを請求しています(それでもMyScaleの対応するソリューションの時間当たりの料金を大幅に下回っています)。
ベクトル容量 | Zilliz | CUs | MyScale | Pods |
---|---|---|---|---|
500万 | 0.55 | 4 | 0.17 | 1 |
--- | --- | --- | --- | --- |
1000万 | 1.1 | 8(7であるべき) | 0.33 | 2 |
2000万 | 2.2 | 16(14であるべき) | 0.67 | 4 |
4000万 | 3.84 | 28 | 1.33 | 8 |
8000万 | 7.68 | 56 | 2.67 | 16 |
TL;DR:
費用対効果を考えると、MyScaleと競合するものはありません。MyScaleは、容量最適化とパフォーマンス最適化のティアにおいて、Zillizの対応するソリューションよりも時間当たりの料金が低いままで、容量も3倍以上提供します。
# ベンチマーク
いくつかの基本的な属性に基づいて、2つのデータベースをベンチマークすることは公平な比較となります。ベンチマークには、MyScale(MSTGを使用)とZillizの2つの異なる構成を使用します。ユーザーに公平な比較を提供するために、Zillizの最新バージョンを使用します。
- 2024-容量最適化(1 CU)
- 2024-パフォーマンス最適化(4 CUs)
# スループット
秒間のクエリ数は、ベクトルデータベースの基本的な指標です。明らかに、MyScale(濃いライムグリーン)は単一のComputing Unitを持つZillizを上回っています。複数のユニットを持つZilliz(オレンジ色)は、QPSの面ではMyScaleを上回ります。しかし、MyScaleは精度調整により、より高い精度に到達することができます。
TL;DR:
MyScaleは単一のComputing Unitを持つZillizを上回します。4つのユニットの場合、Zillizが上回りますが、MyScaleの方が精度が高いです。
# 平均クエリレイテンシ
平均クエリレイテンシは、データベースがクエリ結果を返すまでにかかる時間(低いほど良い)の平均です。MyScaleは単一のComputing UnitのZillizノードを快適に上回っています。高いCUの場合でも、MyScaleとZillizのクエリレイテンシは同じオーダーです。16スレッドの場合、Zillizの4CUノードはMyScaleよりも若干改善されています。
# P95レイテンシ
P95レイテンシでも同様の結果が得られます。スレッドが8を超えると、Zillizの4CUノードはMyScaleよりも優れた(速い)レイテンシを示しますが、単一のCUの場合、MyScaleはZillizをかなり上回ります。
# データ取り込み時間
このベンチマークは単一のスレッドに制限されているため、ここでは1つのプロットのみを表示します。データのアップロードとビルドにかかる時間に関しては、MyScale(ここではシーグリーン)がZillizを快適に上回っています。
# 月間コスト比較
単一のComputing Unitの場合、Zillizは月間コスト(100 QPSあたり)でMyScaleと比較可能ですが、4つのCUの設定はMyScaleよりもはるかに高価です。
TL;DR:
コスト効率を考えると、MyScaleは時間当たりのコストが最小限のQPSごとの月間コストを提供することで、最も効率的なコスト効率を提供します。
# 結論
予算に余裕がある場合、ZillizとMyScaleの両方には競合する機能があり、特定のユーザーのニーズに応じて選択することは困難です。
ただし、コスト効率の観点から見ると、MyScaleが際立っています。Zillizの最新リリースには、マルチベクトル検索やスパースベクトルのサポートなどの高度な機能が含まれていますが、これらの強化機能はまだベータ版であり、価格差を埋めるほどのものではありません。
MyScaleは、特に有料ティアでの優れた価値を提供しています。さらに、完全なSQLサポート、優れたMSTGインデックスアルゴリズム、より大規模な無料ティアなど、他の魅力的な利点も備えています。これらの要素により、パフォーマンスと予算の両方を重視するユーザーにとって、MyScaleはより魅力的なオプションとなります。