pgvecto.rs est une extension Postgres qui fournit des fonctions de recherche de similarité vectorielle. Il est écrit en Rust et basé sur pgrx.
Consultez pgvecto.rs vs pgvector pour plus de détails.
Fonctionnalité | pgvecto.rs | pgvecteur |
---|---|---|
Filtration | Présente la méthode VBASE pour la recherche vectorielle et les requêtes relationnelles (par exemple, TopK à vecteur unique + Filtre + Jointure). | Lorsque des filtres sont appliqués, les résultats peuvent être incomplets. Par exemple, si vous aviez initialement prévu de limiter les résultats à 10, vous pourriez vous retrouver avec seulement 5 résultats avec filtres. |
Dimensions vectorielles | Prend en charge jusqu'à 65 535 dimensions. | Prend en charge jusqu'à 2 000 dimensions. |
SIMD | Les instructions SIMD sont distribuées dynamiquement au moment de l'exécution pour maximiser les performances en fonction des capacités de la machine spécifique. | Ajout de la répartition du processeur pour les fonctions à distance sous Linux x86-64" dans la version 0.7.0. |
Types de données | Introduit des types de données supplémentaires : vecteurs binaires, FP16 (virgule flottante 16 bits) et INT8 (entier 8 bits). | - |
Indexage | Gère le stockage et la mémoire des index séparément de PostgreSQL | S'appuie sur le moteur de stockage natif de PostgreSQL |
Prise en charge des journaux de transactions | Fournit la prise en charge de la journalisation Write-Ahead (WAL) pour les données, la prise en charge des index est en cours. | Fournit la prise en charge de la journalisation Write-Ahead (WAL) pour l'index et les données. |
Pour les nouveaux utilisateurs, nous recommandons d'utiliser l'image Docker pour démarrer rapidement.
docker run
--name pgvecto-rs-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/pgvecto-rs:pg16-v0.2.1
Ensuite, vous pouvez vous connecter à la base de données à l'aide de l'outil de ligne de commande psql
. Le nom d'utilisateur par défaut est postgres
et le mot de passe par défaut est mysecretpassword
.
psql -h localhost -p 5432 -U postgres
Exécutez le code SQL suivant pour vous assurer que l'extension est activée.
DROP EXTENSION IF EXISTS vectors;
CREATE EXTENSION vectors;
pgvecto.rs introduit un nouveau type de données vector(n)
désignant un vecteur à n dimensions. Le n
entre parenthèses signifie les dimensions du vecteur.
Vous pouvez créer une table avec le SQL suivant.
-- create table with a vector column
CREATE TABLE items (
id bigserial PRIMARY KEY ,
embedding vector( 3 ) NOT NULL -- 3 dimensions
);
Conseil
vector(n)
est un type de données valide uniquement si vector(3)
de vector
sont également un type de données valide. Cependant, vous ne pouvez toujours pas mettre vector
pour une colonne ou si certaines valeurs ne correspondent pas à la dimension indiquée par la colonne, vous ne pourrez pas créer d'index dessus.
Vous pouvez ensuite remplir le tableau avec des données vectorielles comme suit.
-- insert values
INSERT INTO items (embedding)
VALUES ( ' [1,2,3] ' ), ( ' [4,5,6] ' );
-- or insert values using a casting from array to vector
INSERT INTO items (embedding)
VALUES (ARRAY[ 1 , 2 , 3 ]:: real []), (ARRAY[ 4 , 5 , 6 ]:: real []);
Nous prenons en charge trois opérateurs pour calculer la distance entre deux vecteurs.
<->
: distance euclidienne au carré, définie comme <#>
: produit scalaire négatif, défini comme <=>
: distance cosinus, définie comme -- call the distance function through operators
-- squared Euclidean distance
SELECT ' [1, 2, 3] ' ::vector < - > ' [3, 2, 1] ' ::vector;
-- negative dot product
SELECT ' [1, 2, 3] ' ::vector < # > '[3, 2, 1]'::vector;
-- cosine distance
SELECT ' [1, 2, 3] ' ::vector <=> ' [3, 2, 1] ' ::vector;
Vous pouvez rechercher un vecteur simplement comme celui-ci.
-- query the similar embeddings
SELECT * FROM items ORDER BY embedding < - > ' [3,2,1] ' LIMIT 5 ;
Veuillez consulter le didacticiel de l'application Questions-Réponses.
Le type vecf16
est le même avec vector
dans tout sauf le type scalaire. Il stocke des nombres à virgule flottante de 16 bits. Si vous souhaitez réduire l'utilisation de la mémoire pour obtenir de meilleures performances, vous pouvez essayer de remplacer le type vector
par le type vecf16
.
Veuillez consulter la FEUILLE DE ROUTE. Vous voulez vous lancer ? Bienvenue aux discussions et contributions !
good first issue ?
problèmes! Nous acceptons toutes sortes de contributions de la communauté open source, des individus et des partenaires.
Merci à ces personnes merveilleuses (clé emoji) :
Ajoutez vos contributions |
Ce projet suit la spécification de tous les contributeurs. Les contributions de toute nature sont les bienvenues !
Grâce aux projets suivants :