ベクトルデータベースは急速に普及しており、その応用範囲は広範です。これらのデータベースは非常に高速です(数十億のエントリをわずかな時間で検索できます)、リソースの使用量も少なくて済みます(GPUは必要ありません)。それにもかかわらず、これらのデータベースはパフォーマンスが優れており、公衆衛生、金融、生体認証などの分野で使用されるほど信頼性があります。
さまざまなベクトルデータベースが利用可能であり、その中でもMyScaleは特別な存在です。MyScaleはSQLベースのベクトルデータベースです。ベクトルデータベースのユーザーであるか、初めて利用するかに関わらず、これらのデータベースの選択は価格、スケーラビリティ、特定の機能の利用可能性、ベンチマークなど、さまざまな要素に依存するため、選択するのは難しいかもしれません。ユーザーがよりよい選択をするために、私たちはこのシリーズの記事でさまざまなベクトルデータベースを比較しています (opens new window)。この記事では、MyScaleとWeaviateを比較します。
# MyScaleの簡単な紹介
MyScale (opens new window)は、AI駆動のソリューション向けに設計されたオープンソースのクラウドベースのデータベースです。ClickHouseとTantivyをベースに構築され、SQL、ベクトルデータベース、フルテキスト検索機能を1つのプラットフォームに組み合わせています。MyScaleは複雑なクエリを含むフルSQLをサポートしており、大規模なデータ管理において信頼性とスケーラビリティを兼ね備えています。
AIアプリケーションに最適化されたMyScaleは、構造化データとベクトル化データを効率的に処理し、堅牢な分析処理を可能にします。CilckHouseから継承したOLAPアーキテクチャにより、MyScaleはミリ秒単位で数十億のベクトルを検索することができる高速なパフォーマンスを実現しています。さらに、MyScaleはSQLのみを必要とする高いアクセシビリティを持ち、既存のシステムに簡単に統合できます。

# Weaviateとは
Weaviateは、Goで書かれたオープンソース (opens new window)のベクトルデータベースであり、オブジェクトとベクトルの両方を管理するために設計されています。機械学習とAIアプリケーションに最適化されており、特に高速なベクトル検索が必要なタスクに優れたパフォーマンスを発揮します。Weaviateは無料とペイアズユーゴーの2つの提供形態を提供しており、さまざまなプロジェクトにアクセスしやすくなっています。
このデータベースは、ミリ秒単位で数百万のデータポイントの最近傍探索を実行する高速性を備えています。この高速性は、セマンティック検索、推薦システム、分類などのタスクにおいて強力な選択肢となります。Weaviateは人気のある機械学習モデルとも簡単に統合でき、テキストや画像などのさまざまなメディアタイプをサポートし、スケーラビリティとクラウドネイティブの機能を提供します。
さて、ホスティングから比較を始めましょう。
# ホスティング
WeaviateやMyScaleなどのベクトルデータベースをホスティングする際には、デプロイメント環境を慎重に考慮することが重要です。これらのデータベースはローカルマシンでセルフホストすることもできますが、スケーラビリティと使いやすさの観点から、クラウドネイティブのホスティングがより好まれます。AWSやGoogle Cloud、Kubernetesなどのクラウドプラットフォームは、ワークロードに基づいて柔軟なスケーリングオプションを提供しています。
# Docker/オンプレミス
MyScaleとWeaviateはどちらもオープンソースなので、Dockerを使用してローカルで実行することができます。これは小規模なアプリケーションやプライバシーベースのアプリケーション、実験目的で何かを試す場合に非常に便利です。MyScaleをローカルで実行するには、次のコマンドを使用します。
docker run --name MyScale --net=host myscale/MyScale:1.6
Weaviateの場合、次のDockerコンポーズを使用します。
docker run -p 8080:8080 -p 50051:50051 cr.weaviate.io/semitechnologies/weaviate:1.27.0
# クラウドベースのホスティング
これらのDockerベースのソリューションが利用可能であるにもかかわらず、クラウドベースのサービスを利用するユーザーが多い理由はいくつかあります。
- より良いリソース
- 最適化されたアルゴリズム
- スケーラビリティ
WeaviateとMyScaleの両方は、無料および有料のクラウドソリューションを提供しており、有料サービスの2つのオプションは次のとおりです。
- 容量最適化(デフォルト、安価)
- パフォーマンス最適化(パフォーマンス向上、高価)
# コア機能
それでは、2つのデータベースのコア機能を比較してみましょう。
# クエリ言語とAPIサポート
- 両方のデータベースは、Python、Node.JS、Goなどのさまざまな言語のクライアントをサポートしています。
- 両方のデータベースはGraphQLとRESTのAPIをサポートしています。
Weaviate: 最新バージョンではgRPC APIもサポートしています。また、Weaviateの新しいPythonクライアントとTypeScriptクライアントはまだ安定していないことに注意してください。
MyScale: MyScaleの真の強みは、SQLのサポートにあります。従来のSQLを使用してデータベースとのやり取りや管理ができます。
# メタデータのサポート
MyScaleとWeaviateの両方はメタデータをサポートしています。MyScaleは、ClickHouseの高度なインデックスと並列処理の機能と組み合わせて、MSTGアルゴリズムを使用してフィルタリングされたベクトル検索を最適化しています。さらに、メインのベクトル検索の前にデータセットを狭めるための事前フィルタリング戦略も採用されており、パフォーマンスと精度を向上させています。
要約:
MyScaleとWeaviateの両方はメタデータをサポートしていますが、MyScaleのメタデータフィルタリングはClickHouseのスケーラビリティのおかげでパフォーマンスが低下せず、大規模なデータセットでも問題ありません。
# サポートされるデータ型
MyScaleとWeaviateの両方は、ベクトルをはじめとするデータ型をサポートしています。また、geoCoordinates
などの高度なタイプもサポートしています。
Weaviate: cross-reference
タイプを持ち、他のオブジェクトとリンクすることができます。
MyScale: すべてのSQLデータ型をサポートしています。
たとえば、次のようなテーブルは、テキストの埋め込みを格納するためのベクトル型のテーブルであり、プリミティブなデータ型(id
とsentences
)と組み合わせています。
CREATE TABLE IF NOT EXISTS BookEmbeddings (
id UInt64,
sentences String,
embeddings Array(Float32),
CONSTRAINT check_data_length CHECK length(embeddings) = 1536
) ENGINE = MergeTree()
ORDER BY id;
MyScaleは完全なSQLサポートを提供しているため、次のような複雑なクエリを書くことができます。
SELECT
myscale_movie.id,
myscale_movie.title,
myscale_rating.rating,
distance(
myscale_movie.embedding,
[0.00578, 0, ..., 0, 0.00984]
) AS dist
FROM
myscale_movie
INNER JOIN myscale_rating
ON myscale_rating.movieId = myscale_movie.id
WHERE
myscale_rating.rating > 4
ORDER BY
dist DESC
LIMIT 10;
要約:
MyScaleとWeaviateの両方がベクトルとそれに対応するデータ型をサポートしています。MyScaleは完全なSQLデータ型とSQLの機能の明確な利点を持っています。
# スケーラビリティ
このブログの後半で価格の詳細を見ていきますが、(標準価格の下で)MyScaleは最大3億2000万のベクトル (opens new window)を提供していますが、Weaviateのスケーラビリティは限られており、5,000万のベクトルを超えるソリューションは提供していません (opens new window)。データベースに数百万のベクトルを持つことは珍しくないため、Weaviateのこの制限は深刻な制約です。
# インデックス
オープンソースであるため、両方のデータベースはHNSW、FLAT、Dynamicなどのさまざまなインデックスアルゴリズムをサポートしています。
Weaviate: インデックスは最近まで実験的なフェーズでした。
MyScale: Weaviateだけでなく、すべての主要なベクトルデータベースを上回るMulti-Scale Tree Graph(MSTG) (opens new window)をサポートすることで、一歩リードしています。MSTGは階層的なツリークラスタリングとグラフベースの検索を組み合わせたアルゴリズムであり、リソース消費を削減しながらより高速な検索を提供することで、現代のアルゴリズムを上回っています。
# フィルタリングされたベクトル検索とフルテキスト検索
MyScaleは、MSTGアルゴリズムを使用してフィルタリングされたベクトル検索を最適化しています。このアプローチは、ClickHouseの高度なインデックスと並列処理の機能と組み合わせることで、MyScaleが大規模なデータセットを効率的に処理できるようにします。MyScaleが採用する事前フィルタリング戦略により、メインのベクトル検索の前にデータセットが絞り込まれるため、最も関連性の高いデータのみが処理され、パフォーマンスと精度の両方が向上します。
Weaviateもベクトル検索をサポートしていますが、フルテキスト検索に関しては明確なステータスはありません。一方、MyScaleはフルテキスト検索とハイブリッド検索 (opens new window)の両方をサポートしています。
ちなみに、MyScale (opens new window)とWeaviateの両方がマルチベクトル検索をサポートしています。
MyScaleでは、HybridSearch()
関数を使用して、フルテキスト検索とベクトル検索の両方の結果を組み合わせてより良い結果を提供することができます。上記の画像は、与えられたテーブルwiki_abstract_mini
に対してこれを説明しています。
# ジオ検索
ジオ検索は、地図やGISアプリケーションだけでなく、多くの他のアプリケーションにとっても重要な要素です。FoodPandaや食料品店のようなシンプルなアプリケーションでも必要となる場合があります。ただし、Weaviateはジオ検索をサポートしていません。MyScaleには、ジオ空間関数 (opens new window)がいくつかあり、ジオ検索をサポートしています。たとえば、greatCircleDistance()
は、地球上の2点間の距離(多様体としての地球上の点)を見つけるために使用されます。
SELECT greatCircleDistance(31.5, 74.33, 25.30, 51.54)
--Output: 2,553,475.8
ここでは、この関数を使用して、2つの都市(ラホールとドーハ)の距離を大円距離の公式 (opens new window)を使用して見つけます。返される距離はメートル単位であり、確認すると正しいことがわかります (opens new window)。ここで、数キロメートルの差は、都市の中心点の選択によるものです。
Weaviateもジオデータをサポートしており、ジオ座標に基づいて特定のエリア内で検索するためのフィルタリングを許可しています。次のコードは、指定した場所の座標を取得し、500mの円内で検索する例です。
import weaviate
from weaviate.classes.query import Filter, GeoCoordinate
import os
client = weaviate.connect_to_local()
response = publications.query.fetch_objects(
filters=(
Filter
.by_property("headquartersGeoLocation")
.within_geo_range(
coordinate=GeoCoordinate(
latitude=30.5,
longitude=78.3
),
distance=500 # In meters
)
),
)
# LLM APIの統合
- MyScaleとWeaviateの両方は、OpenAI、LLamaIndex、LangChainなど、さまざまなLLM APIをサポートしています。
- 両方のデータベースは、CohereモデルとDSPyをサポートしており、自動プロンプティングに使用することができます。
例として、次のコードは、OpenAIの埋め込みを使用してLangChainとMyScaleを統合しています。
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import MyScale
loader = TextLoader("../../../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
for i, d in enumerate(docs):
d.metadata = {"doc_id": i}
docsearch = MyScale.from_documents(docs, embeddings)
このコードはテキストファイルを取り込み、ドキュメントをロードし、OpenAIモデルを使用して埋め込みを取得します。さらに、データをMyScaleクラスタにアップロードします。インデックスが存在しない場合は作成され、既に存在する場合は再利用されます。
# LLMアプリケーションのパフォーマンスの観測
MyScale Telemetry (opens new window)は、LangChainを使用して構築されたアプリケーション(特に大規模な言語モデル)の観測性を向上させるための専用ツールです。このツールは、アプリケーションからのトレースデータをキャプチャしてMyScaleDB(またはClickHouse)に保存し、デバッグやパフォーマンスの最適化のために分析することができます。
開発者は、Grafana Trace Dashboardなどのビジュアルダッシュボードを使用して、LLMの動作を監視することができます。これにより、パフォーマンスの問題を診断し、リアルタイムでアプリケーションのパフォーマンスを評価するプロセスが簡素化されます。このツールを使用することで、パフォーマンスへの最小限の影響でLLMのランタイム動作に深い洞察を得ることが容易になります。
# 価格
最後に、すべてのソリューションは2つの最終的なパラメータで制約されます:価格と効率性。効率性については、後ほどベンチマークを行います。まず、経済的な比較を行いましょう。
WeaviateとMyScaleの両方は、無料および有料の提供形態を提供しています。両方の提供形態をここで簡単に比較します。
# 無料の提供形態
Weaviateの無料提供形態は、14日間のサンドボックスに制限されています。14日後には、サービスを購入するか、それ以上の利用を中止するかを選択する必要があります。一方、MyScaleは、最大5百万の768次元ベクトルまでの無料ストレージを提供しており、クラスタが7日間非アクティブでない限り、利用期間に制限はありません。
# 有料の提供形態
無料の提供形態は実験には適していますが、最終的には専用サーバー上にソリューションを展開する必要があります。そのためにはお金が必要です。MyScaleには2つの有料の提供形態があります。
- 容量最適化ポッド
- パフォーマンス最適化ポッド
容量最適化ポッドでは、1つのポッドあたり1000万のベクトルが利用できます。一方、パフォーマンス最適化設定では、低レイテンシ(1つのポッドあたり500万のベクトル)が提供されます。
Weaviateは3つのオプションを提供しています。
- サーバーレスクラウド
- エンタープライズクラウド
- Bring your own cloud(独自のクラウドを持ち込む)
以下の表では、MyScaleの容量最適化とパフォーマンス最適化のバージョンをWeaviateのサーバーレスクラウド(最も安価なオプション)と比較しています。他の2つのオプションの価格は公には公開されていないため、表には含まれていません。Weaviateの最大ベクトル数は50百万を超えることができないという重大な制約があります。
容量 | Weaviateデフォルト($/時間) | Weaviateハイパフォーマンス | MyScale容量最適化($/時間) | ポッド数 | MyScaleパフォーマンス最適化($/時間) | ポッド数 |
---|---|---|---|---|---|---|
1000万 | 1.021 | 2.95 | 0.09 | 1 | 0.33 | 2 |
2000万 | 2.042 | 5.9 | 0.19 | 2 | 0.67 | 4 |
4000万 | 4.084 | 11.8 | 0.38 | 4 | 1.33 | 8 |
8000万 | - | - | 0.76 | 8 | 2.67 | 16 |
1億6000万 | - | - | 1.51 | 16 | 5.33 | 32 |
3億2000万 | - | - | 3.02 | 32 | 10.66 | 64 |
上記の表からわかるように、MyScaleはWeaviateのデフォルトまたはハイパフォーマンスよりもはるかに経済的です。パフォーマンス最適化の場合でも、MyScaleはデフォルトのWeaviateクラスタよりも3倍以上安価です。
要約: お金の価値に関して言えば、MyScaleには競争相手はありません。たとえば、MyScaleの80百万ベクトルのホスティングは、Weaviateの1000万ベクトルのホスティングよりも安価です。さらに、スケーラビリティの利点もあります。
# ベンチマーク
いくつかの基本的な属性を比較するために、2つのデータベースをベンチマークします。ベンチマークでは、MyScale(MSTGを使用)とWeaviateの2つの異なる構成を比較します。公平な比較のために、Weaviateの最新バージョンを使用します。
# スループット
秒あたりのクエリ数は、ベクトルデータベースの基本的な指標です。明らかに、MyScale(濃いライムグリーン)はクラシックなWeaviateを上回っています。Weaviate v1.23(濃いグレー)は、8つ以上のスレッドに対してのみMyScaleを上回ります。MyScaleは依然として平均精度の点で明らかな優位性を持っています。
要約:
MyScaleは、古いバージョンと新しいバージョンのWeaviateを4つのスレッドまで上回ります。8つ以上のスレッドでは、Weaviateの最新バージョンの方が優れていますが、MyScaleの方が精度が高いです。
# 平均クエリレイテンシ
平均クエリレイテンシは、データベースがクエリ結果を返すまでにかかる時間(低いほど良い)の平均です。MyScaleはWeaviateノードに比べて快適に優れています。ただし、16スレッド以上の場合、Weaviateの方がMyScaleよりも優れています。
# P95レイテンシ
P95レイテンシでも同様の結果が得られます。8つ以上のスレッドの場合、Weaviateの最新バージョンの方がMyScaleよりも優れた(高速な)レイテンシを示しますが、レガシーバージョンの場合、MyScaleはWeaviateをかなり上回ります。
# データの取り込み時間
このベンチマークは、単一のスレッドに制限されているため、ここでは1つのプロットのみを表示します。データのアップロードとビルドにかかる時間に関しては、MyScale(ここではシーグリーン)がWeaviateを快適に上回っています。平均精度の差もかなり顕著です(100%に近い小数点以下の差が重要です)。
# 月額費用
レガシーのWeaviateの月額費用は、MyScaleの月額費用(すべてのグラフの一番下)よりもはるかに高くなっています。8または16のスレッドの場合、それらは互いに近づきます。
要約:
MyScaleは、QPSあたりの最小限の月額費用を提供することで、最良のコストパフォーマンスを実現します。
# 結論
ベクトルデータベースの急速な発展の中で、MyScaleとWeaviateはそれぞれ独自の強みを持つ強力なソリューションを提供しています。2つのデータベースの間で選択するには、プロジェクト固有の要件を慎重に考慮する必要があります。MyScaleはスケーラビリティ、コスト効率、レイテンシの面で優れており、大規模なアプリケーションにおいて広範な構造化データとベクトルデータを管理する必要がある場合に魅力的な選択肢となります。複雑なクエリを効率的に処理し、従来のデータ型とのシームレスな統合を実現するMyScaleの完全なSQLサポートは、多くの企業環境で優位性を持っています。
一方、AI志向のアプリケーション向けに設計されたWeaviateは、さまざまな機械学習モデルや埋め込みをサポートする柔軟性を提供しています。堅牢なAPI、モジュラーアーキテクチャ、リアルタイムのアップデートにより、非構造化データとの動的な相互作用が必要なプロジェクトに最適な選択肢となります。両方のデータベースは複数のプログラミング言語をサポートしていますが、MyScaleの完全なSQL互換性により、高度なデータ分析と迅速なベクトル検索の両方を必要とするプロジェクトに対してより包括的なソリューションとなります。