Код для изучения эталона описан в этом сообщении в блоге.
LANCEDB-это векторная база данных с открытым исходным кодом, встраиваемой и удобной для разработчиков. Некоторые ключевые функции о LancedB, которые делают его чрезвычайно ценным, перечислены ниже, среди многих других, перечисленных в их репо Github.
Цель этого репо состоит в том, чтобы продемонстрировать полнотекстовые и векторные функции поиска LanceDB через сквозное эталон, в котором мы тщательно изучаем результаты запроса и пропускную способность.
Набор данных, используемый для этой демонстрации, представляет собой набор данных обзоров вина от Kaggle, содержащий ~ 130 тыс. Обзоры на винах, а также другие метаданные. Набор данных преобразуется в архив ZIP, и код для этого, а также данные ZIP предоставляется здесь для справки.
Изучение производительности любого инструмента в изоляции является проблемой, поэтому для сравнения в этом репо предоставляется рабочий процесс Elasticsearch. Elasticsearch-это популярная полнотекстовая и векторная поисковая система, основанная на Lucene и вектор, использование которой регулярно оправдано для полнотекстового (и в наши дни, векторный поиск), так что это делает его значимым инструментом для сравнения Lancenceb.
Установите зависимости в виртуальной среде с помощью 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.txtПримечание
BAAI/bge-small-en-v1.5 )| Случай | Elasticsearch (QPS) | LancedB (QPS) |
|---|---|---|
| FTS: сериал | 399,8 | 468.9 |
| FTS: одновременно | 1539,0 | 528.9 |
| Векторный поиск: сериал | 11,9 | 54,0 |
| Векторный поиск: одновременный | 50,7 | 71.6 |
Последовательный эталон, показанный ниже, включает в себя последовательно запуска запросов в синхронизации для цикла в Python. Это не является репрезентативным для реалистичного варианта использования в производстве, но полезно для понимания производительности базовых поисковых систем в каждом случае (Lucene для Elasticsearch и Tantivy для LanceDB).
Более подробная информация об этом будет обсуждаться в сообщении в блоге.
| Запросы | 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 |
| Запросы | 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 |
Одновременный эталон предназначен для воспроизведения реалистичного варианта использования для LanceDB или Elasticsearch - где несколько запросов поступают одновременно, а API остальных на вершине БД должен обрабатывать асинхронные запросы.
Примечание
multiprocessing библиотеки Python на 4 рабочих потоках (большее количество потоков привело к более медленной производительности). | Запросы | 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 |
| Запросы | Elasticsearch (Sec) | Elasticsearch (QPS) | Lancedb, 4 потока (Sec) | LancedB, 4 потока (QP) |
|---|---|---|---|---|
| 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 |