Code für die in diesem Blog -Beitrag beschriebene Benchmark -Studie.
LancyB ist eine Open Source-, eingebettete und Entwickler-freundliche Vektor-Datenbank. Einige wichtige Funktionen über LancyB, die es äußerst wertvoll machen, sind unten aufgeführt, unter anderem in ihrem Github -Repo.
Ziel dieses Repo ist es, die Volltext- und Vektor-Suchfunktionen von LancyB über einen End-to-End-Benchmark zu demonstrieren, in dem wir die Ergebnisse und den Durchsatz sorgfältig untersuchen.
Der für diese Demo verwendete Datensatz ist der Datensatz von Wine Reviews von Kaggle, der ~ 130.000 Bewertungen zu Weinen zusammen mit anderen Metadaten enthält. Der Datensatz wird in ein ZIP -Archiv konvertiert, und der Code dafür sowie die ZIP -Daten wird hier als Referenz bereitgestellt.
In diesem Repo wird die Leistung eines isolierten Instruments der Isolation untersucht. In diesem Repo wird daher ein Elasticsearch -Workflow bereitgestellt. Elasticsearch ist eine beliebte Lucene-basierte Volltext- und Vektor-Suchmaschine, deren Verwendung regelmäßig für den Volltext (und heutzutage die Vektorsuche) gerechtfertigt ist.
Installieren Sie die Abhängigkeiten in virtueller Umgebung über requirements.txt .
# Setup the environment for the first time
python -m venv .venv # python -> python 3.11+
# Activate the environment (for subsequent runs)
source .venv/bin/activate
python -m pip install -r requirements.txtNotiz
BAAI/bge-small-en-v1.5 )| Fall | ElasticSearch (QPS) | Lancyb (QPS) |
|---|---|---|
| FTS: Serie | 399.8 | 468.9 |
| FTS: gleichzeitig | 1539.0 | 528.9 |
| Vektorsuche: Serie | 11.9 | 54.0 |
| Vektorsuche: gleichzeitig | 50.7 | 71.6 |
Der nachstehend gezeigte serielle Benchmark umfasst nacheinander ausführende Abfragen in einer Synchronisierung für die Schleife in Python. Dies ist nicht repräsentativ für einen realistischen Anwendungsfall in der Produktion, aber nützlich, um die Leistung der zugrunde liegenden Suchmaschinen in jedem Fall zu verstehen (Lucene für Elasticsearch und Tantivy für LancyB).
Weitere Details dazu werden in einem Blog -Beitrag besprochen.
| Abfragen | ElasticSearch (Sec) | ElasticSearch (QPS) | Lancyb (Sec) | Lancyb (QPS) |
|---|---|---|---|---|
| 10 | 0,0516 | 193.8 | 0,0518 | 193.0 |
| 100 | 0,2589 | 386.3 | 0,2383 | 419.7 |
| 1000 | 2.5748 | 388.6 | 2.1759 | 459.3 |
| 10000 | 25.0318 | 399.8 | 21.3196 | 468.9 |
| Abfragen | ElasticSearch (Sec) | ElasticSearch (QPS) | Lancyb (Sec) | Lancyb (QPS) |
|---|---|---|---|---|
| 10 | 0,8087 | 12.4 | 0,2158 | 46,3 |
| 100 | 7.6020 | 13.1 | 1.6803 | 59,5 |
| 1000 | 84.0086 | 11.9 | 16.7948 | 59,5 |
| 10000 | 842.9494 | 11.9 | 185,0582 | 54.0 |
Der gleichzeitige Benchmark ist so konzipiert, dass ein realistischer Anwendungsfall für LancyB oder Elasticsearch repliziert wird - bei dem mehrere Abfragen zur gleichen Zeit ankommen, und die Rest -API über dem DB muss asynchrone Anforderungen abwickeln.
Notiz
multiprocessing -Bibliothek auf 4 Worker -Threads erreicht (eine höhere Anzahl von Threads führte zu einer langsameren Leistung). | Abfragen | ElasticSearch (Sec) | ElasticSearch (QPS) | Lancyb (Sec) | Lancyb (QPS) |
|---|---|---|---|---|
| 10 | 0,0350 | 285.7 | 0,0284 | 351.4 |
| 100 | 0,1243 | 804.1 | 0,2049 | 487.8 |
| 1000 | 0,6972 | 1434,5 | 1.8980 | 526.8 |
| 10000 | 6.4948 | 1539.0 | 18.9136 | 528.9 |
| Abfragen | ElasticSearch (Sec) | ElasticSearch (QPS) | Lancyb, 4 Threads (Sec) | Lancyb, 4 Threads (QPS) |
|---|---|---|---|---|
| 10 | 0,2896 | 34.5 | 0,1409 | 71.0 |
| 100 | 2.5275 | 39.6 | 1.3367 | 74,8 |
| 1000 | 20.4268 | 48,9 | 13.3158 | 75.1 |
| 10000 | 197.2314 | 50.7 | 139.6330 | 71.6 |