Содержание
Что такое клиент в ChromaDB
Давайте начнём знакомство с векторной базой данных ChromaDB. Первое понятие, с которым мы должны познакомиться — это понятие клиента ChromaDB. Когда мы начинаем работать с ChromaDB, всё начинается с клиента.
Что такое клиент в ChromaDB? ChromaDB Client — это не пользователь, а программный интерфейс либо SDK для работы с векторной базой. У ChromaDB есть некий движок. Для того чтобы ваш код на Python мог общаться с этим движком, существует клиент, с которым мы можем взаимодействовать.
Это посредник между вашим Python-кодом и движком ChromaDB. Клиент ChromaDB — это объект, через который вы управляете всем: создаёте коллекции, добавляете данные, ищете, удаляете и так далее. Клиент — это ваша точка входа во всю систему ChromaDB.
Если посмотреть в общей архитектуре, то ChromaDB-клиент общается с движком векторной базы данных. В него приходят эмбеддинги от модели искусственного интеллекта. Он эти эмбеддинги сравнивает и ищет в базе данных.
Когда мы рассматриваем RAG-систему, мы промпт, ChromaDB-клиент и Vector Store изображаем просто как векторная база данных, единым элементом. Но если погрузиться глубже, то мы увидим, что ChromaDB Client — это отдельная сущность, и Vector Store — это отдельная сущность.
На этом слайде вы можете видеть простой пример, как можно создать клиент ChromaDB. Мы импортируем библиотеку ChromaDB и создаём клиент. Сразу скажу, существует более одного способа создать клиент. Об этих способах мы остановимся немного позже.
Общий способ такой: ChromaDB Client создаёт и получает существующие коллекции. О коллекциях мы тоже поговорим позже. Через клиента и созданную коллекцию мы уже можем взаимодействовать с данными: добавлять их туда и так далее.
Клиент отвечает за:
- соединение с базой данных ChromaDB
- управление коллекциями
- маршрутизацию операций — все запросы на добавление данных, поиск, удаление и обновление направляются через клиент к движку базы данных
Клиент инкапсулирует конфигурацию, то есть скрывает сложность настройки хранилища, представляя собой простой единый интерфейс. Через клиент мы конфигурируем, где ChromaDB будет хранить данные и как они будут обрабатываться.
Типы клиентов ChromaDB
Как я и говорил ранее, клиентов ChromaDB бывает несколько типов:
- Client — хранит все данные в оперативной памяти
- Persistent Client — хранит данные на диске
- HTTP Client — клиент для работы с базой данных в облаке через HTTP-запросы
Первый клиент — это клиент, который хранит данные в памяти. Это самый простой и быстрый вариант, как вы можете запустить и начать взаимодействовать с ChromaDB. Идеален для экспериментов, юнит-тестов, работы на слабых ноутбуках.
Данные хранятся в оперативной памяти (RAM), и все данные и коллекции пропадают при перезапуске процесса. Это очень важный момент. Запустили Python-скрипт, данные создались, скрипт закончил выполнение — данные автоматически удалились из оперативной памяти.
Из этого вытекают все ограничения этого способа: вы напрямую не имеете доступа к этим данным, и каждый раз после запуска приложения их нужно будет пересоздавать. Мы уже смотрели пример, как можно создать этот клиент: chromadb.Client(), и данные хранятся в памяти этого процесса.
Второй тип клиента — Persistent Client. Он хранит данные на диске. Если вы снова будете перезапускать приложение или запускать Python-скрипт, база данных остаётся в прежнем состоянии на момент предыдущего запуска.
Persistent Client — это основной способ использования, если вы разрабатываете реальные базы данных, которые будут использоваться многократно. Всё, что нужно сделать — указать путь, где хранить данные. Этот способ подходит для локальных RAG-приложений, десктопных программ, которым нужна собственная векторная база.
В общем виде использование выглядит так: мы используем не просто Client, а Persistent Client. У него есть основной атрибут path, где мы указываем папку для хранения данных. Точка означает текущую папку, где находится Python-скрипт, и ChromaDB создаст отдельную директорию для хранения данных.
Третий тип клиента — HTTP Client. Это клиент-сервер, который подключается к отдельно запущенному серверу ChromaDB. Это решение подходит для продакшена, микросервисов, распределённых систем, когда векторная база данных хранится на удалённом сервере.
Такой способ позволяет нескольким сервисам или пользователям одновременно работать с одной базой данных. Мы получаем масштабируемость — сервер ChromaDB можно масштабировать независимо от ваших приложений. Для работы нужен запущенный ChromaDB-сервер.
Сравнение клиентов и выбор решения
Persistent Client рассчитан на использование одним процессом в один момент времени. Если на продакшене вы попытаетесь использовать Persistent Client при обращении к векторной базе данных множеством клиентов, будут проблемы: процессы будут зависать, вставать в очередь, и пользователи вашего приложения будут долго ждать ответа.
Для продакшена, как правило, используется HTTP Client, который позволяет обеспечить масштабируемость приложения и возможность одновременного использования большим количеством пользователей.
Итоговое сравнение клиентов:
- Client — RAM, память, тесты, Jupyter-ноутбуки, быстрое прототипирование
- Persistent Client — локальный RAG, деплоймент, продакшен без сервера
- HTTP Client — серверный продакшен, микросервисы, SaaS, совместное использование несколькими сервисами
Выбирайте соответствующий клиент для вашей ситуации, чтобы обеспечить нужные требования к работе вашей векторной базы данных.