Vektordatenbanken sind auf dem Vormarsch und ihre Anwendungen sind überall zu finden. Sie sind super schnell (stellen Sie sich vor, Sie suchen in Sekundenbruchteilen durch Milliarden von Einträgen) und benötigen viel weniger Ressourcen (Sie benötigen keine GPUs). Trotz all dem sind sie leistungsstark genug und zuverlässig genug, um in Bereichen wie öffentliche Gesundheit, Finanzen und Biometrie eingesetzt zu werden.
Es gibt eine Vielzahl von Vektordatenbanken, und MyScale ist eine besondere unter ihnen, eine SQL-basierte Vektordatenbank. Ob Sie bereits ein Benutzer von Vektordatenbanken sind oder neu in ihnen sind, die Wahl zwischen ihnen kann schwierig sein; sie hängt von einer Reihe von Faktoren ab, wie z.B. Preisgestaltung, Skalierbarkeit, Verfügbarkeit bestimmter Funktionen, einigen Benchmarks und so weiter. Um Benutzern bei der gründlichen Auswahl zu helfen, haben wir diese Reihe von Artikeln eingeführt, in denen verschiedene Vektordatenbanken verglichen werden (opens new window). In dieser Fortsetzung werden wir MyScale und Weaviate vergleichen.
# Eine kurze Einführung in MyScale
MyScale (opens new window) ist eine Open-Source-, Cloud-basierte Datenbank, die für KI-gesteuerte Lösungen entwickelt wurde. Auf ClickHouse und Tantivy aufbauend, vereint sie die Leistung von SQL, Vektordatenbanken und Volltextsuchfunktionen in einer einzigen Plattform. MyScale unterstützt volles SQL, einschließlich komplexer Abfragen, was es zuverlässig und skalierbar für das Management von Daten in großem Maßstab macht.
Optimiert für KI-Anwendungen verarbeitet MyScale strukturierte und vektorisierte Daten effizient und ermöglicht robuste analytische Verarbeitung. Die von CilckHouse geerbte OLAP-Architektur von MyScale gewährleistet eine blitzschnelle Leistung, die in der Lage ist, Suchanfragen auf Milliarden von Vektoren in Millisekunden durchzuführen. Darüber hinaus ist MyScale sehr zugänglich und erfordert nur SQL für die Interaktion, was die Integration in Ihre bestehenden Systeme vereinfacht.
# Was ist Weaviate
Weaviate ist eine Open-Source (opens new window)-Vektordatenbank, die in Go geschrieben wurde und sowohl Objekte als auch Vektoren verwalten kann. Sie ist hoch optimiert für maschinelles Lernen und KI-Anwendungen, insbesondere solche, die schnelle Vektorsuchen erfordern. Weaviate bietet sowohl kostenlose als auch Pay-as-you-go-Tarife, was es für verschiedene Projekte zugänglich macht.
Die Datenbank zeichnet sich durch Geschwindigkeit aus und führt in Millisekunden Nachbarschaftssuchen auf Millionen von Datenpunkten durch. Diese Geschwindigkeit macht sie zu einer guten Wahl für Aufgaben wie semantische Suche, Empfehlungssysteme und Klassifikation. Weaviate lässt sich auch problemlos mit gängigen ML-Modellen integrieren, unterstützt eine Vielzahl von Medientypen, einschließlich Text und Bildern, und bietet Skalierbarkeit und cloudbasierte Funktionen.
Nun werden wir den Vergleich in verschiedenen Aspekten beginnen, angefangen beim Hosting.
# Hosting
Beim Hosting einer Vektordatenbank wie Weaviate oder MyScale ist es wichtig, die Bereitstellungsumgebung sorgfältig zu berücksichtigen, auch während der experimentellen Phase. Diese Datenbanken können auf lokalen Maschinen selbst gehostet werden, aber cloudbasiertes Hosting wird oft für Skalierbarkeit und Benutzerfreundlichkeit bevorzugt. Cloud-Plattformen wie AWS, Google Cloud oder Kubernetes bieten flexible Optionen zur Skalierung basierend auf Ihrer Arbeitslast.
# Docker/On-Premise
Sowohl MyScale als auch Weaviate sind Open-Source, daher können sie lokal mit Docker ausgeführt werden. Dies ist sehr nützlich für kleine Anwendungen, einige datenschutzbezogene Anwendungen oder einfach zum Ausprobieren von etwas zu experimentellen Zwecken. Sie können MyScale lokal wie folgt ausführen:
docker run --name MyScale --net=host myscale/MyScale:1.6
Für Weaviate können Sie Docker Compose verwenden:
docker run -p 8080:8080 -p 50051:50051 cr.weaviate.io/semitechnologies/weaviate:1.27.0
# Cloudbasiertes Hosting
Trotz der Verfügbarkeit dieser Docker-basierten Lösungen gibt es eine Reihe von Gründen, warum Benutzer die cloudbasierten Dienste bevorzugen:
- Bessere Ressourcen
- Optimierte Algorithmen
- Skalierbarkeit
Sowohl Weaviate als auch MyScale bieten kostenlose und kostenpflichtige Cloud-Lösungen an, und die beiden Optionen für kostenpflichtige Dienste sind:
- Kapazitätsoptimiert (Standard, günstiger)
- Leistungsoptimiert (bessere Leistung, teurer)
# Kernfunktionalitäten
Nun wollen wir den Vergleich der Kernfunktionalitäten der beiden Datenbanken beginnen, von denen jede ihre eigenen Vorzüge hat.
# Abfragesprache und API-Unterstützung
- Beide unterstützen Clients in verschiedenen Sprachen wie Python, Node.JS, Go, usw.
- Beide bieten Unterstützung für die GraphQL- und REST-APIs.
Weaviate: Die neueste Version von Weaviate bietet auch Unterstützung für die gRPC-API. Außerdem ist zu beachten, dass die neuen Python- und TypeScript-Clients für Weaviate noch nicht stabil sind.
MyScale: Die eigentliche Stärke von MyScale liegt in der Unterstützung von SQL. Sie können herkömmliches SQL verwenden, um mit der Datenbank zu interagieren und sie zu verwalten.
# Metadatenunterstützung
Sowohl MyScale als auch Weaviate unterstützen Metadaten. MyScale optimiert die gefilterte Vektorsuche mithilfe seines MSTG-Algorithmus in Kombination mit den fortschrittlichen Indexierungs- und parallelen Verarbeitungsfähigkeiten von ClickHouse. Darüber hinaus wird eine Vorfilterungsstrategie angewendet, um den Datensatz vor der eigentlichen Vektorsuche einzugrenzen und so die Leistung und Genauigkeit zu verbessern.
TL;DR:
Beide unterstützen Metadaten, während die Metadatenfilterung von MyScale dank der Skalierbarkeit von ClickHouse keine Einbußen bei der Leistung hat, selbst für größere Datensätze.
# Unterstützte Datentypen
Sowohl MyScale als auch Weaviate unterstützen offensichtlich Vektoren. Sie unterstützen auch fortgeschrittene Typen wie geoCoordinates
.
Weaviate: hat den Typ cross-reference
, der es uns ermöglicht, verschiedene Objekte miteinander zu verknüpfen.
MyScale: unterstützt alle SQL-Datentypen.
Hier ist zum Beispiel eine Tabelle mit dem Vektortyp zur Speicherung der Texteinbettungen, kombiniert mit primitiven Datentypen (für id
und 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 unterstützt vollständiges SQL und daher können wir ziemlich komplexe Abfragen schreiben, zum Beispiel:
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;
TL;DR:
Sowohl MyScale als auch Weaviate unterstützen Vektoren und die entsprechenden Datentypen. MyScale hat den klaren Vorteil der vollständigen SQL-Datentypen und SQL-Funktionen.
# Skalierbarkeit
Während wir uns die Preisdetails später in diesem Blog ansehen werden, ist es erwähnenswert, dass (unter Standardpreisen) MyScale bis zu 320 Millionen Vektoren (opens new window) bietet, während die Skalierbarkeit von Weaviate begrenzt ist, da es keine Lösungen über 50 Millionen Vektoren (opens new window) bietet. Dies zeigt eine ernsthafte Einschränkung von Weaviate, da es nicht ungewöhnlich ist, Millionen von Vektoren in einer Datenbank zu haben.
# Indexierung
Als Open-Source-Software unterstützen beide eine Reihe von Indexierungsalgorithmen wie HNSW, FLAT und Dynamic.
Weaviate: Die Indexierung war bis vor kurzem im experimentellen Stadium.
MyScale: geht noch einen Schritt weiter als Weaviate und alle beliebten Vektordatenbanken, indem es den Multi-Scale Tree Graph (MSTG) (opens new window) unterstützt, einen Algorithmus, der hierarchisches Baumclustering und graphenbasierte Suche kombiniert. Er übertrifft zeitgenössische Algorithmen, indem er schnellere Suchen mit reduziertem Ressourcenverbrauch ermöglicht.
# Gefilterte Vektorsuche und Volltextsuche
MyScale optimiert die gefilterte Vektorsuche (opens new window) durch seinen MSTG-Algorithmus. Diese Methode, zusammen mit den fortschrittlichen Indexierungs- und parallelen Verarbeitungsfähigkeiten von ClickHouse, ermöglicht es MyScale, große Datensätze effizient zu verarbeiten. Die von MyScale verwendete Vorfilterungsstrategie grenzt den Datensatz vor der eigentlichen Vektorsuche ein, so dass nur die relevantesten Daten verarbeitet werden, was sowohl die Leistung als auch die Genauigkeit verbessert.
Weaviate unterstützt ebenfalls Vektorsuchen, aber sein Stand bei Volltextsuchen ist unklar. MyScale unterstützt hingegen sowohl Volltextsuchen als auch hybride Suche (opens new window).
Übrigens unterstützen sowohl MyScale (opens new window) als auch Weaviate die Mehrvektorsuche.
Sie können die Funktion HybridSearch()
in MyScale verwenden, die die Ergebnisse sowohl von Volltext- als auch von Vektorsuchen kombiniert, um bessere Ergebnisse zu erzielen. Das obige Bild erklärt dies recht gut für eine gegebene Tabelle wiki_abstract_mini
.
# Geo-Suche
Die Geo-Suche ist nicht nur für Karten- und GIS-Anwendungen von großer Bedeutung, sondern auch in vielen anderen Anwendungen. Selbst eine einfache Anwendung wie FoodPanda oder ein Lebensmittelgeschäft kann sie benötigen. Weaviate bietet dies jedoch nicht an. MyScale verfügt über eine Reihe von geografischen Funktionen (opens new window), um die Geo-Suche zu unterstützen. Zum Beispiel findet greatCircleDistance()
den Abstand zwischen zwei Punkten auf der Erde (angenommen als Mannigfaltigkeit):
SELECT greatCircleDistance(31.5, 74.33, 25.30, 51.54)
--Ausgabe: 2.553.475,8
Hier verwenden wir diese Funktion, um den Abstand zwischen zwei Städten (Lahore und Doha) mithilfe der großen Kreisformel (opens new window) zu finden. Die zurückgegebene Entfernung ist in Metern und wie wir überprüfen können, ist sie korrekt (opens new window). Hier ist der Unterschied von einigen Kilometern auf die Auswahl der Zentren der Städte zurückzuführen.
Weaviate unterstützt ebenfalls geografische Daten, und obwohl es noch keine Funktion für die geografische Suche bietet, ermöglicht es uns, anhand von Geo-Koordinaten nach einem bestimmten Bereich zu suchen. Zum Beispiel sucht dieser Code innerhalb eines 500m-Radius nach den Koordinaten des gewünschten Standorts.
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 Metern
)
),
)
# Integration von LLM-APIs
- Sowohl MyScale als auch Weaviate unterstützen eine Reihe von LLM-APIs wie OpenAI, LLamaIndex, LangChain, usw.
- Beide unterstützen auch Cohere-Modelle und DSPy für automatisierte Anregungen.
Hier ist ein Beispielcode, der LangChain mit MyScale unter Verwendung von OpenAI-Embeddings integriert.
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)
Dieser Code nimmt eine Textdatei, lädt die Dokumente und ermittelt ihre Einbettungen mithilfe des OpenAI-Modells. Anschließend werden die Daten in den MyScale-Cluster hochgeladen. Wenn der Index nicht vorhanden ist, wird er erstellt, und wenn er bereits vorhanden ist, wird er wiederverwendet.
# Beobachtbarkeit der LLM-App-Leistung
MyScale Telemetry (opens new window) ist ein spezialisiertes Tool, das entwickelt wurde, um die Beobachtbarkeit großer Sprachmodelle (LLMs) zu verbessern, indem es Trace-Daten von Anwendungen erfasst und speichert, insbesondere solche, die mit LangChain erstellt wurden. Diese Trace-Daten werden in MyScaleDB (oder ClickHouse) gespeichert und können zur Fehlerbehebung und Leistungsoptimierung analysiert werden.
Entwickler können das Verhalten ihrer LLMs über visuelle Dashboards überwachen, wie z.B. das Grafana Trace Dashboard, das den Prozess der Fehlerdiagnose und Bewertung der Anwendungsleistung in Echtzeit vereinfacht. Dieses Tool erleichtert es, tiefe Einblicke in das Laufzeitverhalten von LLMs mit minimalem Leistungsverlust zu gewinnen.
# Preisgestaltung
Letztendlich sind alle Lösungen durch zwei ultimative Parameter begrenzt: Preis und Effizienz. In Bezug auf die Effizienz werden wir sie in Kürze benchmarken. Zunächst wollen wir sie wirtschaftlich vergleichen.
Sowohl Weaviate als auch MyScale bieten kostenlose und kostenpflichtige Tarife an. Hier geben wir einen kurzen (und prägnanten) Vergleich beider.
# Kostenloser Tarif
Der kostenlose Tarif von Weaviate ist auf 14 Tage begrenzt. Nach 14 Tagen müssen Benutzer sich entscheiden, entweder den Service zu kaufen oder ihre weitere Nutzung einzustellen. MyScale bietet hingegen kostenlosen Speicherplatz für bis zu 5 Millionen 768-dimensionale Vektoren und ist nicht auf eine bestimmte Anzahl von Tagen begrenzt (solange der Cluster nicht 7 Tage lang inaktiv ist).
# Kostenpflichtiger Tarif
Kostenlose Tarife sind gut für Experimente, aber letztendlich müssen Sie Lösungen auf dedizierten Servern bereitstellen, was Geld kostet.
MyScale hat zwei kostenpflichtige Tarife:
- Kapazitätsoptimierte Pods
- Leistungsoptimierte Pods
In den kapazitätsoptimierten Pods erhalten Sie 10 Millionen Vektoren pro Pod, während die leistungsoptimierte Einstellung eine geringere Latenz (5 Millionen Vektoren pro Pod) bietet.
Weaviate bietet 3 Optionen:
- Serverless Cloud
- Enterprise Cloud
- Bring Your Own Cloud.
In der folgenden Tabelle geben wir den Vergleich beider (kapazitäts- und leistungsoptimierte) Versionen von MyScale mit Weaviates serverloser Cloud (der günstigsten Option) an. Die Preise für die anderen beiden sind öffentlich nicht auf ihrer Website verfügbar und daher nicht aufgeführt. Weaviate hat eine ernsthafte Einschränkung, dass es keine Unterstützung über 50 Millionen Vektoren hinaus bietet.
Kapazität | Weaviate Standard ($)/Stunde | Weaviate High Performance | MyScale Kapazitätsoptimiert ($)/Stunde | Pods | MyScale Leistungsoptimiert ($)/Stunde | Pods |
---|---|---|---|---|---|---|
10 Millionen | 1,021 | 2,95 | 0,09 | 1 | 0,33 | 2 |
20 Millionen | 2,042 | 5,9 | 0,19 | 2 | 0,67 | 4 |
40 Millionen | 4,084 | 11,8 | 0,38 | 4 | 1,33 | 8 |
80 Millionen | - | - | 0,76 | 8 | 2,67 | 16 |
160 Millionen | - | - | 1,51 | 16 | 5,33 | 32 |
320 Millionen | - | - | 3,02 | 32 | 10,66 | 64 |
Wie wir sehen können, ist MyScale deutlich günstiger als sowohl Weaviates Standard- als auch High-Performance-Version. Selbst die leistungsoptimierte Version von MyScale ist gut 3-mal günstiger als die Standard-Weaviate-Cluster.
TL;DR: Wenn es um das Preis-Leistungs-Verhältnis geht, gibt es keinen Wettbewerb mit MyScale. Zum Beispiel kostet das Hosting von 80 Millionen Vektoren bei MyScale weniger als das Hosting von 10 Millionen bei Weaviate. Außerdem hat es den Vorteil einer besseren Skalierbarkeit.
# Benchmarking
Es wäre ein fairer Vergleich, die beiden in Bezug auf einige grundlegende Merkmale zu benchmarken. Für das Benchmarking werden wir MyScale (unter Verwendung von MSTG) mit diesen beiden verschiedenen Konfigurationen von Weaviate vergleichen. Um den Vergleich unvoreingenommen zu gestalten, verwenden wir die neuesten Versionen von Weaviate:
- Ältere Version von Weaviate
- Neue Version von Weaviate (v1.23.3)
# Durchsatz
Die Anzahl der Abfragen pro Sekunde ist ein gutes grundlegendes Maß für eine Vektordatenbank. Wir können deutlich sehen, dass MyScale (dunkelgrün) klassisches Weaviate übertrifft. Weaviate v1.23 (dunkelgrau) übertrifft MyScale nur für 8 oder mehr Threads. MyScale hat immer noch einen klaren Vorteil in Bezug auf die mittlere Präzision, wie wir sehen können.
TL;DR:
MyScale übertrifft sowohl die alte als auch die neue Version von Weaviate bis zu 4 Threads. Für mehr Threads übertrifft die neueste Version von Weaviate MyScale, obwohl MyScale eine bessere Präzision aufweist.
# Durchschnittliche Abfrage-Latenz
Die durchschnittliche Abfrage-Latenz kann als die Zeit definiert werden (je niedriger, desto besser), die die Datenbank im Durchschnitt benötigt, um die Abfrageergebnisse zurückzugeben. MyScale übertrifft die Weaviate-Knoten hier deutlich. Nur für 16 Threads zeigt Weaviate einen Vorteil gegenüber MyScale.
# P95-Latenz
Auch bei der P95-Latenz haben wir ähnliche Ergebnisse. Sobald die Threads über 8 hinausgehen, zeigt die neueste Version von Weaviate eine bessere (schnellere) Latenz gegenüber MyScale, während MyScale die ältere Version von Weaviate deutlich übertrifft.
# Daten-Eingabezeit
Dieses Benchmarking ist auf einen einzigen Thread beschränkt, daher zeigen wir hier nur ein Diagramm. MyScale (hier in türkis) übertrifft Weaviate deutlich in Bezug auf die Zeit, die es zum Hochladen und Aufbau benötigt. Der Unterschied zwischen ihrer mittleren Präzision ist ebenfalls recht deutlich (jeder Bruchteil nahe 100% zählt).
# Monatliche Kosten
Selbst die monatlichen Kosten von Weaviate in der älteren Version liegen weit über MyScale (ganz unten in jedem Diagramm). Nur für 8 oder 16 Threads kommen sie sich näher.
TL;DR:
MyScale bietet Ihnen das beste Preis-Leistungs-Verhältnis, indem es minimale monatliche Kosten pro QPS bietet.
# Fazit
In dem sich schnell entwickelnden Bereich der Vektordatenbanken bieten sowohl MyScale als auch Weaviate starke Lösungen mit jeweils einzigartigen Stärken. Die Entscheidung zwischen den beiden erfordert eine sorgfältige Berücksichtigung der projektspezifischen Anforderungen. MyScale zeichnet sich durch Skalierbarkeit, Kosteneffizienz und Latenz aus und ist daher eine überzeugende Wahl für Anwendungen im großen Maßstab, die umfangreiche strukturierte und vektorisierte Daten verwalten müssen und gleichzeitig von der vollständigen SQL-Unterstützung profitieren. Diese Fähigkeit, komplexe Abfragen effizient zu verarbeiten und nahtlos mit traditionellen Datentypen zu integrieren, gibt MyScale in vielen Unternehmensumgebungen einen Vorteil.
Weaviate hingegen, das für KI-Anwendungen entwickelt wurde, bietet Flexibilität durch seine Unterstützung einer Vielzahl von maschinellen Lernmodellen und Einbettungen. Seine robuste API, modulare Architektur und Echtzeit-Updates machen es zu einer guten Wahl für Projekte, die eine dynamische Interaktion mit unstrukturierten Daten erfordern. Während beide Datenbanken mehrere Programmiersprachen unterstützen, positioniert sich MyScale aufgrund seiner vollständigen SQL-Kompatibilität als umfassendere Lösung für Projekte, die sowohl fortgeschrittene Datenanalyse als auch schnelle Vektorsuche erfordern.