Código para el estudio de referencia descrito en esta publicación de blog.
LancedB es una base de datos vectorial de código abierto, integrada y amigable para el desarrollador. Algunas características clave sobre LancedB que lo hacen extremadamente valioso se enumeran a continuación, entre muchas otras enumeradas en su repositorio de GitHub.
El objetivo de este repositorio es demostrar las características de búsqueda de texto completo y vectores de LancedB a través de un punto de referencia de extremo a extremo, en el que estudiamos cuidadosamente los resultados y el rendimiento de la consulta.
El conjunto de datos utilizado para esta demostración es el conjunto de datos de revisión del vino de Kaggle, que contiene ~ 130k revisiones en vinos junto con otros metadatos. El conjunto de datos se convierte en un archivo zip, y el código para esto, así como los datos zip se proporcionan aquí como referencia.
Estudiar el rendimiento de cualquier herramienta en aislamiento es un desafío, por lo que en aras de la comparación, se proporciona un flujo de trabajo Elasticsearch en este repositorio. Elasticsearch es un popular motor de búsqueda de texto completo y vectores basado en Lucene cuyo uso se justifica regularmente para el texto completo (y en estos días, la búsqueda de vectores), por lo que esto lo convierte en una herramienta significativa para comparar LancedB.
Instale las dependencias en el entorno virtual a través de 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.txtNota
BAAI/bge-small-en-v1.5 )| Caso | Elasticsearch (QPS) | LancedB (QPS) |
|---|---|---|
| FTS: serie | 399.8 | 468.9 |
| FTS: concurrente | 1539.0 | 528.9 |
| Búsqueda de vectores: serie | 11.9 | 54.0 |
| Búsqueda vectorial: concurrente | 50.7 | 71.6 |
El punto de referencia en serie que se muestra a continuación implica consultas de ejecución secuencial en una sincronización para bucle en Python. Esto no es representativo de un caso de uso realista en la producción, pero es útil para comprender el rendimiento de los motores de búsqueda subyacentes en cada caso (Lucene para Elasticsearch y Tantivy para LancedB).
Más detalles sobre esto se discutirán en una publicación de blog.
| Consultas | Elasticsearch (Sec) | Elasticsearch (QPS) | LancedB (Sec) | LancedB (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 |
| Consultas | Elasticsearch (Sec) | Elasticsearch (QPS) | LancedB (Sec) | LancedB (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 |
El punto de referencia concurrente está diseñado para replicar un caso de uso realista para LancedB o Elasticsearch, donde múltiples consultas llegan al mismo tiempo, y la API REST en la parte superior del DB tiene que manejar solicitudes asíncronas.
Nota
multiprocessing de Python en 4 hilos de trabajadores (un mayor número de hilos dio como resultado un rendimiento más lento). | Consultas | Elasticsearch (Sec) | Elasticsearch (QPS) | LancedB (Sec) | LancedB (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 |
| Consultas | Elasticsearch (Sec) | Elasticsearch (QPS) | LancedB, 4 hilos (sec) | LancedB, 4 hilos (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 |