Démarrer avec Pgvector : Un guide pour les développeurs qui explorent les bases de données vectorielles
Avec les récentes tendances technologiques en matière d'IA générative et de [modèles de grandes langues] (https://zilliz.com/glossary/large-language-models-(llms)), des méthodes plus efficaces de stockage et d'interrogation des données ont vu le jour. Les bases de données traditionnelles comme MySQL et PostgreSQL ont été le choix idéal pour les développeurs pendant des années. Toutefois, un nouveau type de base de données appelé [base de données vectorielle] (https://zilliz.com/blog/what-is-a-real-vector-database#What-is-a-vector-database) a récemment gagné en popularité au sein de la communauté.
Avec l'extension pgvector, les développeurs peuvent stocker efficacement des données vectorielles dans PostgreSQL, permettant ainsi des capacités de gestion de données avancées.
Les bases de données vectorielles sont très différentes des bases de données traditionnelles, en particulier en ce qui concerne leurs cas d'utilisation. Dans ce tour d'horizon, nous allons donc explorer Pgvector, une extension de PostgreSQL qui vous permet d'utiliser le stockage vectoriel avec une base de données PostgreSQL. Nous allons également explorer et comprendre les limites de Pgvector, en quoi il diffère des bases de données vectorielles spécialisées, et comment et où vous pouvez utiliser les bases de données vectorielles pour vos applications.
Si vous êtes un développeur familier des bases de données traditionnelles et que vous recherchez de nouvelles solutions, ce guide vous apportera les connaissances nécessaires pour démarrer avec Pgvector. Il vous aidera également à explorer d'autres [bases de données vectorielles] dédiées (https://zilliz.com/learn/what-is-vector-database) comme alternative à Pgvector.
L'IA et l'apprentissage automatique sont aujourd'hui largement utilisés dans divers secteurs, notamment la technologie, l'informatique, la médecine et l'automobile. Dans ces domaines, les données sont représentées sous forme de vecteurs contenant des valeurs numériques qui capturent les propriétés et les caractéristiques des [données non structurées] (https://zilliz.com/learn/introduction-to-unstructured-data) telles que les images ou les textes. Les algorithmes d'apprentissage automatique utilisent ces vecteurs comme données d'entrée pour apprendre des modèles et des relations au sein des données.
Pgvector est une extension open-source de PostgreSQL, une base de données relationnelle traditionnelle open-source. Elle prend en charge le stockage et la recherche de vecteurs issus du traitement du langage naturel ou de modèles d'apprentissage profond au-dessus de PostgreSQL. Vous pouvez également considérer Pgvector comme une extension de la base de données vectorielle de PostgreSQL.
L'une des meilleures choses à propos du travail avec Pgvector est qu'il est similaire au travail avec une base de données SQL traditionnelle comme PostgreSQL. La syntaxe des opérations vectorielles, telles que la création de colonnes vectorielles, la création d'une nouvelle table avec des colonnes vectorielles, et l'obtention des plus proches voisins L2, est la même.
Que vous travailliez sur des applications d'intelligence artificielle, des systèmes de recommandation ou tout autre projet impliquant des données de haute dimension, la compréhension de la base de données Pgvector - et d'autres bases de données vectorielles - peut élargir vos horizons en matière de gestion de bases de données. Elle permet également un stockage efficace des valeurs vectorielles sans nécessiter de connaissances approfondies en matière de stockage vectoriel et de bases de données.
Commençons par configurer Pgvector pour l'intégrer à PostgreSQL. Assurez-vous que PostgreSQL est installé sur votre système. Pour Mac, vous pouvez facilement l'installer via Homebrew :
brew install postgresql
Vous pouvez rapidement vérifier si PostgreSQL est installé en exécutant la commande suivante :
psql --version
Il devrait alors vous donner la version de PostgreSQL installée sur votre système, comme indiqué ci-dessous :
Vous aurez également besoin d'installer make. Vous pouvez facilement l'installer en utilisant Homebrew en lançant la commande suivante :
brew install make
Ensuite, il devrait installer make dans votre système comme indiqué ci-dessous :
Avant de plonger dans le monde des bases de données vectorielles, vous devez configurer Pgvector et l'intégrer à PostgreSQL. Passons en revue les étapes nécessaires.
- Clonez le repo de Pgvector.
cd /tmp && git clone --branch v0.4.4 https://github.com/pgvector/pgvector.git
- Allez dans ce répertoire et exécutez les commandes
makesuivantes :
cd pgvector && make && make install
Intégrer Pgvector avec Postgres
Ouvrez l'interface de ligne de commande PostgreSQL (psql) en utilisant la commande suivante. Cette étape lancera Postgres sur votre ligne de commande afin que vous puissiez exécuter des commandes Postgres directement sur votre terminal :
psql
Vous pouvez créer un utilisateur pour utiliser Postgres à l'aide de la commande suivante :
CREATE USER <user> WITH PASSWORD <password> (Créer un utilisateur <user> avec un mot de passe <password>)
Ensuite, connectez-vous à cet utilisateur en utilisant les informations d'identification que vous avez créées dans la commande ci-dessus. Vous pouvez également vous connecter à Postgres en tant que superutilisateur :
psql -U postgres
Maintenant, créons une nouvelle base de données avec la commande suivante :
créer la base de données vectordb ;
Sélectionnons cette base de données :
/c vectordb ;
Ensuite, nous allons activer l'extension Pgvector pour notre base de données vectordb :
créer l'extension pgvector ;
Vous ne devez effectuer cette étape qu'une seule fois pour chaque base de données que vous souhaitez utiliser avec Pgvector.
Pgvector Exemple
Créons deux colonnes de vecteurs, id et embedding, dans une table appelée vectors. La table et les colonnes stockent les données vectorielles dans PostgreSQL.
CREATE TABLE vectors (
id SERIAL PRIMARY KEY,
embedding float4[] -- La colonne du vecteur
) ;
Nous pouvons maintenant insérer des données vectorielles dans notre tableau vectors :
INSERT INTO vectors (embedding) VALUES
('{1.2, 0.8, -2.1}'),
('{-0.7, 2.4, 3.6}') ;
Pour visualiser la table, nous pouvons simplement exécuter la requête SELECT * sur notre table vectors.
SELECT * FROM vectors ;
Utilisation de Pgvector pour la recherche de similarité vectorielle
Nous avons vu comment les bases de données vectorielles peuvent être utiles pour effectuer des recherches de similarité. Voici comment écrire une simple requête de recherche de similarité pour trouver des vecteurs similaires à un vecteur de requête donné.
SELECT * FROM vecteurs
WHERE pgvector_cosine(embedding, '{0.9, -0.3, 1.8}') > 0.8 ;
Nous utilisons la requête SELECT * normale avec une clause WHERE. Ensuite, nous utilisons la fonction pgvector_cosine pour spécifier que nous voulons récupérer les lignes où la similarité cosinus entre la colonne du vecteur embedding et le vecteur de la requête {0.9, -0.3, 1.8} est supérieure à 0.8.
Introduction aux bases de données vectorielles
Qu'est-ce qu'une base de données vectorielle ?
Une base de données vectorielle est un type de base de données spécialisé conçu pour stocker, gérer et interroger efficacement des données vectorielles de haute dimension. Contrairement aux bases de données traditionnelles, qui sont optimisées pour les données structurées telles que le texte et les nombres, les bases de données vectorielles sont conçues pour traiter les types de données complexes utilisés dans l'apprentissage automatique et le traitement du langage naturel. Ces bases de données excellent dans l'exécution de recherches de similarité, où l'objectif est de trouver des vecteurs qui sont similaires à un vecteur d'interrogation donné sur la base de mesures de distance spécifiques.
Les bases de données vectorielles sont essentielles dans les applications qui nécessitent le stockage et l'extraction de données vectorielles, telles que la reconnaissance d'images, les systèmes de recommandation et la [recherche sémantique] (https://zilliz.com/glossary/semantic-search). En tirant parti de techniques d'indexation avancées, les bases de données vectorielles peuvent retrouver rapidement et précisément les vecteurs pertinents, ce qui les rend indispensables pour les développeurs qui travaillent avec des modèles d'intelligence artificielle et d'apprentissage automatique.
Avantages des bases de données vectorielles pour les développeurs
Les bases de données vectorielles offrent plusieurs avantages significatifs aux développeurs :
Stockage et récupération efficaces : Elles sont optimisées pour stocker et récupérer efficacement des données vectorielles de haute dimension, ce qui permet de gérer efficacement des ensembles de données de grande taille.
Recherches de similarité rapides et précises** : Les bases de données vectorielles prennent en charge les recherches de similarité rapides, ce qui permet aux développeurs de trouver rapidement les vecteurs les plus pertinents. Cela est essentiel pour des applications telles que les systèmes de recommandation et la reconnaissance d'images.
Prise en charge de diverses mesures de distance et de divers algorithmes** : Les bases de données vectorielles offrent une grande souplesse dans le choix des mesures de distance (par exemple, la similarité cosinusienne, la distance euclidienne) et des algorithmes afin de répondre aux besoins spécifiques des applications.
Évolutivité et flexibilité** : Les bases de données vectorielles peuvent gérer des ensembles de données à grande échelle, ce qui les rend adaptées aux applications qui nécessitent la gestion de millions, voire de milliards de vecteurs.
Intégration avec les langages de programmation et les cadres de travail les plus courants : Les bases de données vectorielles s'intègrent parfaitement à divers langages de programmation et frameworks, ce qui permet aux développeurs d'incorporer facilement les fonctionnalités des bases de données vectorielles dans leurs flux de travail existants.
En tirant parti de ces avantages, les développeurs peuvent créer des applications plus efficaces et plus évolutives qui nécessitent une gestion avancée des données vectorielles et des capacités de recherche de similarités.
Comprendre les données vectorielles
Qu'est-ce que les données vectorielles ?
Les données vectorielles sont un type de données représentées sous la forme d'une liste de nombres, appelée vecteur. Chaque nombre du vecteur correspond à une caractéristique ou à un attribut spécifique des données représentées. Les vecteurs sont polyvalents et peuvent être utilisés pour représenter un large éventail de types de données, y compris le texte, les images, l'audio, etc. Dans le contexte de l'apprentissage automatique et du traitement du langage naturel, les vecteurs représentent souvent la signification sémantique de mots, de phrases ou de documents entiers.
L'une des principales caractéristiques des données vectorielles est leur grande dimensionnalité. Les vecteurs peuvent avoir des milliers, voire des millions de dimensions, capturant des détails et des relations complexes au sein des données. Cette haute dimensionnalité pose des problèmes aux bases de données traditionnelles, qui ne sont pas optimisées pour le stockage et l'interrogation de structures de données aussi complexes.
Les bases de données vectorielles relèvent ces défis en fournissant des mécanismes efficaces de stockage et d'extraction spécialement conçus pour les données vectorielles à haute dimension. Elles permettent aux développeurs d'effectuer des recherches de similarité vectorielle, l'objectif étant de trouver des vecteurs similaires à un vecteur d'interrogation donné sur la base de critères spécifiques. Cette capacité est essentielle pour des applications telles que la reconnaissance d'images, les systèmes de recommandation et le traitement du langage naturel, où la compréhension et l'exploitation des relations entre les points de données sont cruciales.
En utilisant des bases de données vectorielles, les développeurs peuvent stocker et interroger efficacement les données vectorielles, ce qui ouvre de nouvelles possibilités pour la création d'applications avancées d'intelligence artificielle et d'apprentissage automatique.
Index et limites de Pgvector
Bien que Pgvector soit un excellent moyen de stocker et de rechercher des vecteurs, il présente des inconvénients évidents.
Pgvector a des problèmes d'extensibilité lorsqu'il s'agit de traiter des vecteurs de haute dimension. Le stockage des données vectorielles peut également entraîner des frais généraux de stockage et d'indexation supplémentaires. Il est également important de tenir compte de l'espace nécessaire à vos données vectorielles et de la manière dont cela peut affecter les performances des requêtes.
De plus, Pgvector ne prend en charge qu'un seul type d'index appelé [IVFFlat] (https://zilliz.com/learn/choosing-right-vector-index-for-your-project#Inverted-file-index-IVF). Cette limitation affecte les propriétés des vecteurs ainsi que la taille des ensembles de données que vous stockez. Cela signifie également qu'il n'y a pas d'optimisation du stockage par défaut avec un index Pgvector.
En résumé, Pgvector est une extension PostgreSQL qui permet le stockage et la recherche d'embeddings vectoriels. Cependant, ses capacités et ses performances sont limitées. Heureusement, de nombreuses bases de données vectorielles dédiées comme [Milvus] (https://zilliz.com/what-is-milvus) sont disponibles aujourd'hui et font un bien meilleur travail grâce à des index ou des algorithmes améliorés.
Maintenant que nous avons exploré Pgvector, ses applications et ses inconvénients, introduisons le concept de bases de données vectorielles dédiées.
Contrairement à Pgvector, un plugin de recherche vectorielle au-dessus d'une base de données traditionnelle, les bases de données vectorielles dédiées comme Milvus et Zilliz sont conçues dès le départ pour stocker et interroger des millions, voire des milliards, de données vectorielles à haute dimension avec des réponses quasiment en temps réel. Ils s'appuient sur des techniques d'indexation avancées pour traiter efficacement les recherches de similarité, offrent des performances supérieures pour les opérations basées sur la similarité, traitent les données vectorielles à grande échelle et fournissent des API puissantes pour les applications d'intelligence artificielle et d'apprentissage automatique.
Une base de données vectorielles dédiée comme Milvus répond à un large éventail de [cas d'utilisation] (https://zilliz.com/vector-database-use-cases), notamment la recherche de similitudes d'images et de vidéos, le traitement du langage naturel, les systèmes de recommandation, etc. Sa polyvalence lui permet de s'adapter à divers projets liés à l'intelligence artificielle. Comprenons Milvus et comment l'exploiter dans le nuage à l'aide de .
Milvus est une base de données vectorielle open-source qui fournit une solution robuste pour la gestion et l'interrogation de milliards de vecteurs en haute dimension. Elle offre de nombreuses fonctionnalités intéressantes telles que l'index GPU, Arm64, la recherche par plage, l'insertion ascendante et le CDC, qui garantissent des performances et une expérience utilisateur optimales pour la création d'applications d'IA et d'apprentissage automatique. Consultez [le dernier blog sur la version 2.3 de Milvus] (https://milvus.io/blog/unveiling-milvus-2-3-milestone-release-offering-support-for-gpu-arm64-cdc-and-other-features.md) pour plus d'informations sur ces fonctionnalités.
[Zilliz Cloud] (https://zilliz.com/cloud) est un service basé sur le cloud qui fait entrer les instances Milvus dans le domaine du logiciel en tant que service (SaaS). Il simplifie le déploiement et la gestion des bases de données Milvus en offrant une infrastructure en nuage, une évolutivité et une assistance opérationnelle. [Zilliz] (https://zilliz.com/about) garantit que les développeurs peuvent exploiter les capacités de Milvus sans la complexité de la mise en place et de la maintenance de leur infrastructure. C'est comme utiliser Amazon RDS pour PostgreSQL dans le nuage.
Zilliz Cloud propose un niveau gratuit, donnant à tous les développeurs un accès égal à ce service de base de données vectorielles. Le niveau gratuit offre jusqu'à deux collections, chacune pouvant contenir jusqu'à 500 000 vecteurs avec 768 dimensions et même plus à une plus petite échelle. Cette capacité généreuse permet de traiter d'importantes quantités de données sans nécessiter d'investissements en infrastructure.
Lors de la mise à niveau vers Postgres 12, assurez-vous que l'extension vectorielle est correctement gérée pour maintenir la compatibilité et la fonctionnalité.
Comment choisir entre Milvus et Zilliz ?
Si vous souhaitez avoir un contrôle total sur votre base de données, vous pouvez opter pour des instances Milvus auto-hébergées. Cependant, vous devez déployer et gérer votre infrastructure en fonction de vos besoins et de vos cas d'utilisation.
En revanche, si vous préférez utiliser une base de données vectorielle basée sur le cloud, vous pouvez utiliser [Zilliz Cloud] (https://zilliz.com/blog/zilliz-cloud-vector-db-for-all). Zilliz vous permet de vous concentrer sur la création de votre application en exploitant Milvus dans le nuage sans vous soucier de la maintenance de l'infrastructure.
Milvus et Zilliz permettent aux développeurs de gérer efficacement les données vectorielles, mais ils répondent à diverses préférences de déploiement. Que vous préfériez la flexibilité de l'auto-hébergement ou la simplicité de l'informatique dématérialisée, la collaboration Milvus-Zilliz offre des options adaptées aux exigences de votre projet.
Pgvector vs. Milvus et Zilliz : une comparaison des bases de données vectorielles
Comparons maintenant [https://zilliz.com/comparison] Pgvector avec Milvus/Zilliz en termes de facilité d'utilisation, de performances et de flexibilité.
Pgvector s'intègre parfaitement à PostgreSQL, qui est familier aux développeurs qui utilisent déjà cette base de données relationnelle. Cependant, Milvus et Zilliz nécessitent des configurations supplémentaires pour installer leurs SDK et API. La bonne nouvelle, c'est qu'une fois Milvus/Zilliz installé, la création d'un service de recherche de similarités à grande échelle prend moins d'une minute. En outre, des SDK simples et intuitifs sont disponibles pour différents langages de programmation.
Outre l'installation, l'utilisation de ces kits nécessite un certain temps d'apprentissage. Pgvector semble plus facile à utiliser en raison de sa familiarité avec PostgreSQL.
Analyse des performances et de l'évolutivité de la recherche de similarité vectorielle
L'une des principales limites de Pgvector est sa capacité d'indexation limitée. Pour les recherches de similarités complexes, Milvus surpasse Pgvector grâce à ses mécanismes d'indexation optimisés, comme le démontre [ce benchmark] (https://zilliz.com/blog/milvus-2.x-performance-benchmark-update).
Milvus exploite la recherche approximate nearest neighbor pour améliorer les performances des requêtes, offrant des temps de réponse plus rapides en sacrifiant une certaine précision par rapport à la recherche exacte du plus proche voisin.
Pgvector et Milvus sont de puissantes piles de recherche vectorielle conçues pour traiter efficacement des données vectorielles à grande échelle. Cependant, Milvus/Zilliz est plus évolutif et peut traiter des ensembles de données comportant des milliards d'intégrations vectorielles.
Ensembles de caractéristiques et flexibilité dans les ancrages vectoriels
Alors que Pgvector apporte des capacités vectorielles à PostgreSQL, Milvus/Zilliz est une base de données vectorielles spécialement conçue avec des fonctionnalités spécialisées adaptées aux applications d'IA. Elles sont plus riches en fonctionnalités et peuvent être plus utiles pour les [cas d'utilisation des bases de données vectorielles] personnalisés (https://zilliz.com/vector-database-use-cases).
VectorDBBench est un outil d'analyse comparative open-source pour les bases de données vectorielles. Il compare les bases de données vectorielles classiques et les services en nuage disponibles sur le marché et fournit des résultats d'analyse comparative impartiaux concernant les requêtes par seconde (QPS), les requêtes par dollar (QP$) et la latence P99.
Par exemple, vous pouvez utiliser VectorDBBench pour comparer Pgvector à Milvus ou Zilliz. D'après les résultats de l'analyse comparative, [Milvus et Zilliz surpassent Pgvector] (https://zilliz.com/vector-database-benchmark-tool#comparison-section) en termes de QPS et de latence.
Remarque : il s'agit d'une note de 1 à 100 basée sur les performances de chaque système dans différents cas selon une règle spécifique. Une note plus élevée indique une meilleure performance.
Note : Il s'agit d'une note >1 basée sur les performances de chaque système dans différents cas selon une règle spécifique. Une note plus basse indique une meilleure performance.
Avec VectorDBBench, vous pouvez rapidement comprendre quelle base de données est la plus performante en termes de diverses mesures. Vous pouvez également déterminer quelle base de données répond le mieux à vos besoins spécifiques.
Pgvector ouvre de nouvelles possibilités de stockage et d'interrogation des données vectorielles dans PostgreSQL. Si vous êtes déjà familier avec PostgreSQL et que vous souhaitez explorer les bases de données vectorielles, Pgvector est un excellent point de départ. Cependant, pour les applications d'IA avec des millions ou même des milliards de recherches de similarités vectorielles, les performances de Pgvector peuvent ne pas être suffisantes. Milvus et Zilliz offrent des fonctionnalités spécialisées qui optimisent les performances. Prenez en compte les exigences de votre projet et explorez ces bases de données vectorielles pour libérer tout le potentiel du stockage vectoriel dans vos applications.
Cet article a été rédigé par Siddhant Varma. [Siddhant] (https://www.linkedin.com/in/siddhantvarma99/) est un développeur JavaScript à part entière, spécialisé dans l'ingénierie frontale. Il a travaillé à la mise à l'échelle de plusieurs startups en Inde et a de l'expérience dans la construction de produits dans les secteurs des technologies de l'information et de la santé. Siddhant a une passion pour l'enseignement et un don pour l'écriture. Il a également enseigné la programmation à de nombreux diplômés, les aidant ainsi à devenir de meilleurs futurs développeurs.
Dernière mise à jour : 23 janvier 2024
Continuer à lire

Storage Cost Isn’t the Whole Story: Why We Disagree with Turbopuffer’s Trade-offs
A real-world benchmark comparing Turbopuffer and Zilliz Cloud on cost, latency, recall, and consistency for production-scale vector search workloads.

Zilliz Cloud Now Available in AWS Europe (Ireland)
Zilliz Cloud launches in AWS eu-west-1 (Ireland) — bringing low-latency vector search, EU data residency, and full GDPR-ready infrastructure to European AI teams. Now live across 30 regions on five cloud providers.

AI Agents Are Quietly Transforming E-Commerce — Here’s How
Discover how AI agents transform e-commerce with autonomous decision-making, enhanced product discovery, and vector search capabilities for today's retailers.
