LittleVec — легковесная векторная база данных
В последние годы векторные базы данных стали неотъемлемой частью современных ИИ-проектов: поиск по embedding, RAG-пайплайны, быстрый семантический поиск и многое другое. Однако, если вы когда-либо пробовали развернуть подобную БД — будь то FAISS, Milvus, Qdrant или аналогичные решения — вы наверняка сталкивались с тем, что даже для небольших экспериментов и pet-проектов такие системы требуют довольно мощного железа. В итоге приходится либо платить за дорогой сервер, либо мириться с низкой скоростью и неудобствами.
Я регулярно разрабатываю прототипы и экспериментирую с RAG-пайплайнами, поэтому мне остро не хватало простой, быстрой и лёгкой векторной БД, которую можно было бы запустить на любом VPS или даже на домашнем мини-компьютере.
Мои цели были такие:
- Минимальные требования к ресурсам. Максимум эффективности: чтобы можно было держать миллионы векторов даже на слабых серверах.
- Простота запуска и интеграции..
- Надёжность хранения. Не хочется терять данные из-за сбоя — значит, нужна проверенная СУБД в основе.
- Гибкость. Возможность использовать разные метрики расстояния, хранить дополнительную информацию (payload), работать с несколькими базами одновременно.
Так и родился LittleVec — минималистичная векторная база данных, работающая как плагин для RocksServer и использующая в качестве хранилища сверхнадёжную RocksDB.
- Экономия ресурсов. LittleVec потребляет всего 15–50 Мб ОЗУ даже на миллионах записей. Это значит, что вы можете запускать полноценную векторную БД даже на бюджетных VPS или в контейнере на локальной машине.
- Быстрая интеграция. Минималистичный и понятный API, готовые Docker-образы, поддержка DEB-пакетов — всё, чтобы вы могли быстро начать использовать LittleVec в своём проекте.
- Надёжность и скорость. Благодаря RocksDB и оптимизациям на уровне хранения, поиск по миллиону векторов занимает ~60 мс на обычном сервере.
Самый простой способ — воспользоваться Docker-образом:
docker pull valmatdocker/littlevec
docker run -d -p 5577:5577 --name littlevec valmatdocker/littlevec
После запуска API будет доступно на 127.0.0.1:5577
.
Если вы предпочитаете запускать сервис напрямую:
- Установите RocksServer.
- Клонируйте репозиторий LittleVec и соберите DEB-пакет:
git clone https://github.com/valmat/little-vec.git
cd little-vec/build_deb
./build.sh
sudo dpkg -i littlevec_<version>_amd64.deb
- Перезапустите RocksServer:
sudo /etc/init.d/rocksserver restart
cd src
make -j
# Поместите little_vec.so в каталог плагинов RocksServer (обычно /usr/lib/rocksserver/plugins)
POST /vecdb/create
Content-Type: application/json
{
"db_name": "my_vectors",
"dim": 128,
"dist": "cos"
}
db_name
— имя вашей БД (любая строка)dim
— размерность векторовdist
— метрика:cos
,qcos
,dot_prod
,l1
,l2
(опционально)
POST /vectors/set
Content-Type: application/json
{
"db_name": "my_vectors",
"data": [
{
"id": "vec1",
"vector": [0.1, 0.2, ...],
"payload": {"text": "пример"}
}
]
}
POST /vectors/get/nearest
Content-Type: application/json
{
"db_name": "my_vectors",
"vector": [0.1, 0.2, ...],
"top_k": 5
}
Ответ:
{
"data": [
{ "id": "vec1", "distance": 0.123, "payload": {"text": "пример"} },
...
]
}
POST /vectors/delete
Content-Type: application/json
{
"db_name": "my_vectors",
"data": [
{ "id": "vec1" }
]
}
- Можно создавать несколько независимых векторных баз.
- В каждом запросе указывать свою метрику поиска.
- Хранить произвольный payload для каждого объекта.
- Получать distance между любыми векторами и объектами по id.
- Всё это — по простому HTTP API, легко интегрируется с любым языком.
LittleVec — минималистичная, быстрая, экономная и надёжная векторная база данных для экспериментов, прототипов или даже небольших production-сервисов.
Всё открыто, просто и прозрачно — пробуйте, присылайте фидбек и pull requests!
Все вопросы в issue на GitHub!