Начало работы с Pgvector: Руководство для разработчиков, изучающих векторные базы данных
В связи с последними тенденциями в технологиях генеративного ИИ и крупноязычных моделей появились более эффективные способы хранения и запроса данных. Традиционные базы данных, такие как MySQL и PostgreSQL, были идеальным выбором для разработчиков в течение многих лет. Однако в последнее время широкую популярность в сообществе приобрел новый тип баз данных, называемый векторной базой данных.
С помощью расширения pgvector разработчики могут эффективно хранить векторные данные в PostgreSQL, обеспечивая расширенные возможности управления данными.
Векторные базы данных значительно отличаются от традиционных баз данных, особенно в том, что касается их сценариев использования. Итак, в этом обзоре мы рассмотрим Pgvector, расширение PostgreSQL, которое позволяет использовать векторное хранение данных в базе данных PostgreSQL. Мы также изучим и поймем ограничения Pgvector, его отличие от специализированных векторных баз данных, а также то, как и где вы можете использовать векторные базы данных в своих приложениях.
Если вы разработчик, знакомый с традиционными базами данных и ищущий новые решения, это руководство предоставит вам знания, необходимые для начала работы с Pgvector. Оно также поможет вам изучить другие специализированные векторные базы данных в качестве альтернативы Pgvector.
ИИ и машинное обучение сегодня широко используются в различных отраслях, включая технологии, ИТ, медицину и автомобили. В этих областях данные представляются в виде векторов, содержащих числовые значения, которые отражают свойства и особенности неструктурированных данных, таких как изображения или тексты. Алгоритмы машинного обучения используют эти векторы в качестве входных данных для изучения закономерностей и взаимосвязей в данных.
Pgvector - это расширение PostgreSQL, традиционной реляционной базы данных с открытым исходным кодом. Оно поддерживает хранение и поиск векторов, полученных в результате обработки естественного языка или моделей глубокого обучения, поверх PostgreSQL. Или вы можете просто рассматривать Pgvector как расширение векторной базы данных PostgreSQL.
Одна из лучших вещей в работе с Pgvector - это то, что она похожа на работу с традиционной SQL-базой данных, такой как PostgreSQL. Синтаксис для векторных операций, таких как создание векторных столбцов, создание новой таблицы с векторными столбцами и получение ближайших соседей L2, одинаков.
Если вы работаете над приложениями искусственного интеллекта, рекомендательными системами или любым другим проектом, связанным с высокоразмерными данными, понимание базы данных Pgvector - и других векторных баз данных - может расширить ваши горизонты в управлении базами данных. Кроме того, она позволяет эффективно хранить векторные значения, не требуя обширных знаний в области хранения векторов и баз данных.
Итак, давайте начнем с настройки Pgvector для интеграции с PostgreSQL. Убедитесь, что в вашей системе установлен PostgreSQL. Для Mac вы можете легко установить его через Homebrew:
brew install postgresql
Вы можете быстро проверить, установлен ли у вас PostgreSQL, выполнив следующую команду:
psql --version
В результате вы получите версию PostgreSQL, установленную в вашей системе, как показано ниже:
Вам также потребуется установить make. Вы можете легко установить его с помощью Homebrew, выполнив следующую команду:
brew install make
После этого он должен установить make в вашу систему, как показано ниже:
Прежде чем погрузиться в мир векторных баз данных, необходимо настроить Pgvector и интегрировать его с PostgreSQL. Давайте пройдемся по всем необходимым шагам.
- Клонируйте репо Pgvector.
cd /tmp && git clone --branch v0.4.4 https://github.com/pgvector/pgvector.git
- Перейдите в эту директорию и выполните следующие команды
make:
cd pgvector && make && make install
Интеграция Pgvector с Postgres
Откройте интерфейс командной строки PostgreSQL (psql) с помощью следующей команды. Этот шаг запустит Postgres в командной строке, чтобы вы могли выполнять команды Postgres непосредственно в терминале:
psql
Вы можете создать пользователя для работы с Postgres с помощью следующей команды:
CREATE USER <user> WITH PASSWORD <password>
Затем войдите в систему под этим пользователем, используя учетные данные, созданные в приведенной выше команде. Также вы можете войти в Postgres как суперпользователь:
psql -U postgres
Теперь создадим новую базу данных для работы с помощью следующей команды:
создать базу данных vectordb;
Давайте выберем эту базу данных:
/c vectordb;
Затем мы включим расширение Pgvector для нашей базы данных vectordb:
создать расширение pgvector;
Этот шаг нужно выполнить только один раз для каждой базы данных, которую вы хотите использовать с Pgvector.
Пример Pgvector
Создадим два векторных столбца, id и embedding, в таблице под названием vectors. Таблица и столбцы хранят векторные данные в PostgreSQL.
CREATE TABLE vectors (
id SERIAL PRIMARY KEY,
embedding float4[] -- Столбец вектора
);
Теперь мы можем вставить некоторые векторные данные в нашу таблицу vectors:
INSERT INTO vectors (embedding) VALUES
('{1.2, 0.8, -2.1}'),
('{-0.7, 2.4, 3.6}');
Чтобы просмотреть таблицу, мы можем просто выполнить запрос SELECT * на нашей таблице vectors.
SELECT * FROM vectors;
Использование Pgvector для поиска сходства векторов
Мы уже обсуждали, как векторные базы данных могут быть полезны для поиска сходства. Вот как написать простой запрос на поиск сходства, чтобы найти векторы, похожие на заданный вектор запроса.
SELECT * FROM vectors
WHERE pgvector_cosine(embedding, '{0.9, -0.3, 1.8}') > 0.8;
Мы используем обычный запрос SELECT * с предложением WHERE. Затем мы используем функцию pgvector_cosine, чтобы указать, что мы хотим получить строки, в которых косинусное сходство между столбцом вектора embedding и заданным вектором запроса {0.9, -0.3, 1.8} больше 0.8.
Введение в векторные базы данных
Что такое векторная база данных?
Векторная база данных - это специализированный тип базы данных, предназначенный для эффективного хранения, управления и запроса высокоразмерных векторных данных. В отличие от традиционных баз данных, которые оптимизированы для структурированных данных, таких как текст и числа, векторные базы данных предназначены для работы со сложными типами данных, используемых в машинном обучении и обработке естественного языка. Эти базы данных отлично справляются с поиском по сходству, когда цель состоит в том, чтобы найти векторы, похожие на вектор запроса, на основе определенных метрик расстояния.
Векторные базы данных играют важную роль в приложениях, требующих хранения и поиска векторных данных, таких как распознавание изображений, рекомендательные системы и семантический поиск. Благодаря использованию передовых методов индексирования векторные базы данных позволяют быстро и точно извлекать нужные векторы, что делает их незаменимыми для разработчиков, работающих с моделями искусственного интеллекта и машинного обучения.
Преимущества векторных баз данных для разработчиков
Векторные базы данных предлагают разработчикам ряд существенных преимуществ:
Эффективное хранение и извлечение: Они оптимизированы для эффективного хранения и извлечения высокоразмерных векторных данных, что обеспечивает эффективное управление даже большими наборами данных.
Быстрый и точный поиск по сходству: Векторные базы данных поддерживают быстрый поиск по сходству, позволяя разработчикам быстро находить наиболее релевантные векторы. Это очень важно для таких приложений, как рекомендательные системы и распознавание образов.
Поддержка различных метрик расстояния и алгоритмов: Они обеспечивают гибкость в выборе различных метрик расстояния (например, косинусоидальное сходство, евклидово расстояние) и алгоритмов для удовлетворения конкретных потребностей приложений.
Масштабируемость и гибкость: Векторные базы данных могут работать с крупномасштабными наборами данных, что делает их подходящими для приложений, требующих управления миллионами или даже миллиардами векторов.
Интеграция с популярными языками программирования и фреймворками: Они обеспечивают бесшовную интеграцию с различными языками программирования и фреймворками, позволяя разработчикам легко внедрять функции векторных баз данных в существующие рабочие процессы.
Используя эти преимущества, разработчики могут создавать более эффективные и масштабируемые приложения, требующие расширенных возможностей управления векторными данными и поиска сходства.
Понимание векторных данных
Что такое векторные данные?
Векторные данные - это тип данных, представленных в виде списка чисел, называемого вектором. Каждое число в векторе соответствует определенной характеристике или атрибуту представляемых данных. Векторы универсальны и могут использоваться для представления широкого спектра типов данных, включая текст, изображения, аудио и многое другое. В контексте машинного обучения и обработки естественного языка векторы часто представляют семантическое значение слов, фраз или целых документов.
Одной из ключевых характеристик векторных данных является их высокая размерность. Векторы могут иметь тысячи и даже миллионы измерений, отражающих сложные детали и взаимосвязи в данных. Такая высокая размерность создает проблемы для традиционных баз данных, которые не оптимизированы для хранения и запросов к таким сложным структурам данных.
Векторные базы данных решают эти проблемы, предоставляя эффективные механизмы хранения и поиска, специально разработанные для векторных данных высокой размерности. Они позволяют разработчикам выполнять поиск по сходству векторов, цель которого - найти векторы, похожие на заданный вектор запроса по определенным критериям. Эта возможность важна для таких приложений, как распознавание образов, рекомендательные системы и обработка естественного языка, где понимание и использование взаимосвязей между точками данных имеет решающее значение.
Используя векторные базы данных, разработчики могут эффективно хранить и запрашивать векторные данные, открывая новые возможности для создания передовых приложений ИИ и машинного обучения.
Индекс и ограничения Pgvector
Хотя Pgvector - это отличный способ хранения и поиска векторов, у него есть несколько очевидных недостатков.
Pgvector имеет проблемы с масштабируемостью, когда дело доходит до работы с высокоразмерными векторами. Хранение векторных данных также может привести к дополнительным накладным расходам на хранение и индексирование. Также важно учитывать, какое пространство требуется векторным данным и как это может повлиять на производительность запросов.
Кроме того, Pgvector поддерживает только один тип индекса, называемый IVFFlat. Это ограничение влияет на свойства векторов, а также на размер хранимых наборов данных. Это также означает, что при использовании индексов Pgvector не существует стандартной оптимизации хранения.
В целом, Pgvector - это расширение PostgreSQL, позволяющее хранить и искать векторные вкрапления. Однако его возможности и производительность ограничены. К счастью, сегодня доступно множество специализированных векторных баз данных, таких как Milvus, которые справляются с этой задачей гораздо лучше благодаря улучшенным индексам или алгоритмам.
Теперь, когда мы рассмотрели Pgvector, его применение и недостатки, давайте познакомимся с концепцией специализированных векторных баз данных.
В отличие от Pgvector, плагина векторного поиска поверх традиционной базы данных, выделенные векторные базы данных, такие как Milvus и Zilliz, специально созданы с нуля для хранения и запроса миллионов или даже миллиардов высокоразмерных векторных данных с ответами практически в режиме реального времени. Они используют передовые методы индексирования для эффективного поиска по сходству, обеспечивают превосходную производительность операций, основанных на сходстве, обрабатывают большие векторные данные и предоставляют мощные API для приложений искусственного интеллекта и машинного обучения.
Такая специализированная векторная база данных, как Milvus, подходит для широкого спектра сценариев использования, включая поиск изображений и видео по сходству, обработку естественного языка, рекомендательные системы и многое другое. Благодаря своей универсальности она подходит для различных проектов, связанных с искусственным интеллектом. Давайте разберемся, что такое Milvus и как использовать его в облаке с помощью .
Milvus - это векторная база данных с открытым исходным кодом, которая представляет собой надежное решение для управления и запроса миллиардов высокоразмерных векторов. Она предлагает множество интересных функций, таких как GPU-индекс, Arm64, поиск по диапазону, upsert и CDC, которые обеспечивают оптимальную производительность и удобство использования для создания приложений искусственного интеллекта и машинного обучения. Более подробную информацию об этих функциях можно найти в [блоге последнего выпуска Milvus 2.3] (https://milvus.io/blog/unveiling-milvus-2-3-milestone-release-offering-support-for-gpu-arm64-cdc-and-other-features.md).
Zilliz Cloud работает как облачный сервис, который переносит экземпляры Milvus в сферу программного обеспечения как услуги (SaaS). Он упрощает развертывание и управление базами данных Milvus, предлагая облачную инфраструктуру, масштабируемость и операционную поддержку. Zilliz гарантирует, что разработчики смогут использовать возможности Milvus без сложностей, связанных с настройкой и обслуживанием инфраструктуры. Это все равно что использовать Amazon RDS для PostgreSQL в облаке.
Zilliz Cloud предлагает бесплатный уровень, предоставляя каждому разработчику равный доступ к этой службе векторных баз данных. Бесплатный уровень предлагает до двух коллекций, каждая из которых вмещает до 500 000 векторов с 768 измерениями и даже больше в меньшем масштабе. Такая щедрая емкость позволяет работать со значительными объемами данных, не требуя инвестиций в инфраструктуру.
При обновлении до Postgres 12 убедитесь, что вектор расширения управляется должным образом, чтобы сохранить совместимость и функциональность.
Как выбрать между Milvus и Zilliz
Если вы хотите получить полный контроль над своей базой данных, вы можете выбрать самостоятельное размещение экземпляров Milvus. Однако вы должны развернуть и управлять инфраструктурой в соответствии с вашими потребностями и сценариями использования.
С другой стороны, если вы предпочитаете использовать облачную базу данных векторов, вы можете воспользоваться Zilliz Cloud. Zilliz позволяет сосредоточиться на создании приложения с использованием Milvus в облаке, не заботясь об обслуживании инфраструктуры.
Milvus и Zilliz позволяют разработчикам эффективно управлять векторными данными, но при этом они удовлетворяют различным предпочтениям по развертыванию. Независимо от того, склоняетесь ли вы к гибкости самостоятельного использования или простоте облачных вычислений, сотрудничество Milvus-Zilliz предоставляет варианты, соответствующие требованиям вашего проекта.
Pgvector против Milvus и Zilliz: сравнение векторных баз данных
Теперь давайте сравним Pgvector с Milvus/Zilliz по простоте использования, производительности и гибкости.
Pgvector легко интегрируется с PostgreSQL, что хорошо знакомо разработчикам, которые уже используют реляционную базу данных. Однако Milvus и Zilliz требуют дополнительных настроек для установки своих SDK и API. Хорошая новость заключается в том, что после настройки Milvus/Zilliz создание крупномасштабного сервиса поиска сходств займет меньше минуты. Кроме того, доступны простые и интуитивно понятные SDK для различных языков программирования.
Помимо установки, их использование требует некоторого обучения. Pgvector кажется более простым в использовании из-за его знакомства с PostgreSQL.
Анализ производительности и масштабируемости для поиска по векторному сходству
Одним из основных ограничений Pgvector является ограниченная возможность индексирования. Для сложных поисков сходства Milvus превосходит Pgvector благодаря оптимизированным механизмам индексирования, как показано в [этом бенчмарке] (https://zilliz.com/blog/milvus-2.x-performance-benchmark-update).
Milvus использует поиск приблизительного ближайшего соседа для повышения производительности запросов, предлагая более быстрое время ответа, жертвуя некоторой точностью по сравнению с точным поиском ближайшего соседа.
Pgvector и Milvus - мощные стеки векторного поиска, разработанные для эффективной работы с большими векторными данными. Однако Milvus/Zilliz более масштабируем и может обрабатывать наборы данных с миллиардами векторных вкраплений.
Наборы характеристик и гибкость в векторных вкраплениях
В то время как Pgvector привносит векторные возможности в PostgreSQL, Milvus/Zilliz - это специально созданная векторная база данных со специализированными функциями, предназначенными для приложений ИИ. Они более функциональны и могут быть более полезны для пользовательских [случаев использования векторных баз данных] (https://zilliz.com/vector-database-use-cases).
VectorDBBench - это инструмент бенчмаркинга с открытым исходным кодом для векторных баз данных. Он сравнивает основные векторные базы данных и облачные сервисы, доступные на рынке, и предоставляет непредвзятые результаты бенчмарков в отношении запросов в секунду (QPS), запросов на доллар (QP$) и задержки P99.
Например, вы можете использовать VectorDBBench для сравнения Pgvector с Milvus или Zilliz. Согласно результатам бенчмарка, Milvus и Zilliz превосходят Pgvector по QPS и задержке.
Примечание: Это оценка от 1 до 100 баллов, основанная на производительности каждой системы в различных случаях в соответствии с определенным правилом. Более высокий балл означает лучшую производительность.
Примечание: Это оценка >1, основанная на результатах работы каждой системы в различных случаях в соответствии с конкретным правилом. Более низкий балл означает лучшую производительность.
С помощью VectorDBBench вы можете быстро понять, какая база данных работает лучше с точки зрения различных метрик. Вы также сможете определить, какая база данных лучше всего подходит для ваших конкретных нужд.
Pgvector открывает новые возможности для хранения и запроса векторных данных в PostgreSQL. Если вы уже знакомы с PostgreSQL и хотите изучить векторные базы данных, Pgvector - отличная отправная точка. Однако для приложений ИИ с миллионами или даже миллиардами поисков векторного сходства производительности Pgvector может оказаться недостаточно. Milvus и Zilliz предлагают специализированные возможности, которые оптимизируют производительность. Учитывайте требования вашего проекта и изучите эти векторные базы данных, чтобы раскрыть весь потенциал векторного хранения данных в ваших приложениях.
Это сообщение написал Сиддхант Варма (Siddhant Varma). Siddhant - полнофункциональный JavaScript-разработчик с опытом фронтенд-инжиниринга. Он работал над масштабированием нескольких стартапов в Индии и имеет опыт создания продуктов в сфере Ed-Tech и здравоохранения. Сиддхант страстно любит преподавать и умеет писать. Он также преподавал программирование многим выпускникам, помогая им стать лучшими будущими разработчиками.
Последнее обновление: 23 января 2024 г.
Читать далее

Zilliz Cloud Just Landed in Claude Code
Zilliz Cloud Just Landed in Claude Code - Build AI Apps without Leaving Your Terminal

Context Engineering Strategies for AI Agents: A Developer’s Guide
Learn practical context engineering strategies for AI agents. Explore frameworks, tools, and techniques to improve reliability, efficiency, and cost.

Zilliz Cloud Launches in AWS Australia, Expanding Global Reach to Australia and Neighboring Markets
We're thrilled to announce that Zilliz Cloud is now available in the AWS Sydney, Australia region (ap-southeast-2).
