Kode untuk studi benchmark yang dijelaskan dalam posting blog ini.
LandedB adalah basis data vektor open source, tertanam dan ramah pengembang. Beberapa fitur utama tentang Lancedb yang membuatnya sangat berharga tercantum di bawah ini, di antara banyak lainnya yang terdaftar di repo GitHub mereka.
Tujuan dari repo ini adalah untuk menunjukkan fitur-fitur pencarian teks lengkap dan vektor dari LandedB melalui tolok ukur ujung ke ujung, di mana kami dengan hati-hati mempelajari hasil dan throughput kueri.
Dataset yang digunakan untuk demo ini adalah Dataset Ulasan Anggur dari Kaggle, berisi ~ 130k ulasan tentang anggur bersama dengan metadata lainnya. Dataset dikonversi ke arsip ZIP, dan kode untuk ini serta data ZIP disediakan di sini untuk referensi.
Mempelajari kinerja alat apa pun secara terpisah merupakan tantangan, jadi demi perbandingan, alur kerja Elasticsearch disediakan dalam repo ini. Elasticsearch adalah mesin pencari teks lengkap dan vektor berbasis Lucene yang populer yang penggunaannya secara teratur dibenarkan untuk teks lengkap (dan hari-hari ini, pencarian vektor), jadi ini menjadikannya alat yang bermakna untuk membandingkan Landedb dengan.
Instal dependensi di lingkungan virtual melalui 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.txtCatatan
BAAI/bge-small-en-v1.5 )| Kasus | Elasticsearch (QPS) | Landedb (QPS) |
|---|---|---|
| FTS: Serial | 399.8 | 468.9 |
| FTS: Bersamaan | 1539.0 | 528.9 |
| Pencarian Vektor: Serial | 11.9 | 54.0 |
| Pencarian Vektor: Bersamaan | 50.7 | 71.6 |
Benchmark serial yang ditunjukkan di bawah ini melibatkan kueri yang berjalan secara berurutan dalam sinkronisasi untuk loop di Python. Ini tidak mewakili kasus penggunaan yang realistis dalam produksi, tetapi berguna untuk memahami kinerja mesin pencari yang mendasarinya dalam setiap kasus (Lucene for Elasticsearch dan Tantivy for LanceB).
Rincian lebih lanjut tentang ini akan dibahas dalam posting blog.
| Kueri | Elasticsearch (SEC) | Elasticsearch (QPS) | Landedb (Sec) | Landedb (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 |
| Kueri | Elasticsearch (SEC) | Elasticsearch (QPS) | Landedb (Sec) | Landedb (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 |
Benchmark bersamaan dirancang untuk mereplikasi kasus penggunaan yang realistis untuk LandedB atau Elasticsearch - di mana banyak kueri tiba pada saat yang sama, dan API REST di atas DB harus menangani permintaan asinkron.
Catatan
multiprocessing Python pada 4 utas pekerja (jumlah utas yang lebih tinggi menghasilkan kinerja yang lebih lambat). | Kueri | Elasticsearch (SEC) | Elasticsearch (QPS) | Landedb (Sec) | Landedb (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 |
| Kueri | Elasticsearch (SEC) | Elasticsearch (QPS) | Landedb, 4 Threads (Sec) | Landedb, 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 |