Vous pouvez utiliser le moteur de données en colonnes AlloyDB pour PostgreSQL pour accélérer vos recherches vectorielles lorsque vous utilisez l'index ScaNN (Scalable Nearest Neighbors) ou HNSW (Hierarchical Navigable Small World). Le moteur de données en colonnes sert de cache en mémoire optimisé pour la lecture de ces index vectoriels.
La mise en cache de vos index dans le moteur columnar permet de répondre aux requêtes directement à partir d'une représentation en mémoire de l'index optimisée pour la lecture. Elle augmente également le nombre de requêtes par seconde (RPS) que votre base de données peut traiter pour les charges de travail de recherche vectorielle.
Vous ne pouvez utiliser HNSW avec le moteur de données en colonnes que pour les clusters AlloyDB exécutant PostgreSQL 17 ou version ultérieure. ScaNN avec le moteur de données en colonnes ne présente pas cette limitation.
Avant de commencer
Définissez les flags de base de données
google_columnar_engine.enabledetgoogle_columnar_engine.enable_index_cachingsuronpour activer le moteur de données en colonnes et sa fonctionnalité de mise en cache des index.gcloud alloydb instances update INSTANCE_ID \ --database-flags google_columnar_engine.enabled=on,google_columnar_engine.enable_index_caching=on \ --region=REGION \ --cluster=CLUSTER_ID \ --project=PROJECT_IDRemplacez les éléments suivants :
INSTANCE_ID: ID de l'instance sur laquelle vous souhaitez activer le moteur de colonnes.REGION: région où se trouve votre instance, par exempleus-central1.CLUSTER_ID: ID du cluster dans lequel se trouve votre instance.PROJECT_ID: ID du projet dans lequel se trouve votre cluster.
Pour en savoir plus sur la définition des options, consultez Configurer des options de base de données.
Créez un index ScaNN ou un index HNSW dans votre base de données.
Ajouter un index au moteur de données en colonnes
Après avoir activé le moteur de données en colonnes, vous pouvez ajouter un index existant au cache à l'aide de la fonction SQL google_columnar_engine_add_index().
Pour ajouter un index au moteur de colonnes, procédez comme suit :
Dans la console Google Cloud , accédez à la page Clusters.
Pour afficher la page Présentation du cluster, cliquez sur le nom du cluster AlloyDB dans la colonne Nom de la ressource.
Dans le volet de navigation, cliquez sur AlloyDB Studio.
Connectez-vous à AlloyDB Studio à l'aide du nom de votre base de données, de votre nom d'utilisateur et de votre mot de passe.
Dans l'onglet Éditeur 1, saisissez la requête suivante :
SELECT google_columnar_engine_add_index('INDEX_NAME');Remplacez
INDEX_NAMEpar le nom de votre index vectoriel.- Cliquez sur Exécuter.
Une fois que vous avez ajouté un index au moteur de données en colonnes, toutes les requêtes qui utilisent cet index sont automatiquement accélérées par le moteur de données en colonnes. Vous pouvez vérifier que vos requêtes vectorielles sont accélérées par le moteur de données en colonnes à l'aide du plan EXPLAIN (ANALYZE, COLUMNAR_ENGINE) sur votre requête.
Vérifier l'utilisation du cache
Pour vérifier que vos requêtes vectorielles sont accélérées par le moteur de données en colonnes, vous pouvez utiliser le plan EXPLAIN (ANALYZE, COLUMNAR_ENGINE) sur votre requête.
Exemple de plan d'exécution ScaNN
Voici un exemple de plan d'exécution pour une requête qui utilise un index ScaNN ajouté au moteur en colonnes :
EXPLAIN (ANALYZE TRUE, SCANN TRUE, COSTS FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE FALSE, COLUMNAR_ENGINE TRUE)
SELECT * FROM t ORDER BY val <=> '[0.5,0.5,0.5,0.5]' LIMIT 100;
--This contains details about ScaNN's usage from the columnar engine. Example:
------------------------------------------------------------------------------------------------------
Index Scan using scann_idx on t t_1 (actual rows=100 loops=1)
Order By: (val <=> '[0.5,0.5,0.5,0.5]'::vector)
Limit: 100
ScaNN Info: (... columnar engine nodes hit=6...)
Columnar Engine ScaNN Info: (index found=true)
(5 rows)
La présence de columnar engine nodes hit et Columnar Engine ScaNN Info:
(index found=true) dans le résultat confirme que le moteur de données en colonnes est utilisé pour la requête.
Exemple de plan d'exécution HNSW
Le plan d'exécution affiche la section Infos HNSW du moteur de données en colonnes pour l'index correspondant, qui indique des métriques telles que le ratio d'éléments récupérés à partir du moteur de données en colonnes (elements_from_ce) et à partir du disque (elements_from_disk).
Voici un exemple de plan d'exécution pour une requête qui utilise un index HNSW ajouté au moteur en colonnes :
EXPLAIN (ANALYZE, COLUMNAR_ENGINE) SELECT * FROM documents ORDER BY embedding <=> '[0.1, 0.2, 0.3, 0.4, 0.5]'::vector LIMIT 5;
--This contains details about HNSW's usage from the columnar engine. Example:
------------------------------------------------------------------------------------------------------
Limit (actual rows=5 loops=1)
-> Index Scan using hnsw_idx on documents (actual rows=5 loops=1)
Order By: (embedding '[0.1, 0.2, 0.3, 0.4, 0.5]'::vector)
Columnar Engine HNSW Info: (index found=true elements_from_ce=385 elements_from_disk=0)
Columnar Check: table is not in the columnar store
(5 rows)
La réponse indique que l'index est accéléré par le moteur de données en colonnes, car tous les éléments ont été récupérés à partir du moteur de données en colonnes (elements_from_ce=385) et aucun n'a été récupéré à partir du disque (elements_from_disk=0).
Lorsque des modifications de données telles que des instructions INSERT, UPDATE ou DELETE invalident des entrées de cache, le moteur de données en colonnes utilise une approche hybride pour maintenir la précision et les performances. Il lit les vecteurs mis en cache valides directement depuis la mémoire et n'extrait que les vecteurs modifiés ou nouveaux du disque.
Si vous modifiez une grande quantité de données, vous pouvez temporairement constater une augmentation de elements_from_disk et une baisse des performances jusqu'à ce que le cache soit actualisé.
Gérer l'index mis en cache
Pour gérer le cycle de vie de vos index mis en cache, procédez comme suit :
Dans la console Google Cloud , accédez à la page Clusters.
Pour afficher la page Présentation du cluster, cliquez sur le nom du cluster AlloyDB dans la colonne Nom de la ressource.
Dans le volet de navigation, cliquez sur AlloyDB Studio.
Connectez-vous à AlloyDB Studio à l'aide du nom de votre base de données, de votre nom d'utilisateur et de votre mot de passe.
Dans l'onglet Éditeur 1, saisissez la commande SQL correspondant à la tâche sélectionnée :
Pour actualiser le cache manuellement, exécutez la commande suivante :
SELECT google_columnar_engine_refresh_index('INDEX_NAME');Pour vérifier l'état de l'index, exécutez la commande suivante :
SELECT google_columnar_engine_verify('INDEX_NAME');Pour supprimer l'index du cache, exécutez la commande suivante :
SELECT google_columnar_engine_drop_index('INDEX_NAME');Pour afficher les index actifs, exécutez la commande suivante :
SELECT * FROM g_columnar_indexes;Pour afficher les index partitionnés, exécutez la commande suivante :
SELECT * FROM g_columnar_index_partitions;
Remplacez
INDEX_NAMEpar le nom de votre index.Cliquez sur Exécuter.
Limites
L'actualisation des index HNSW accélérés par le moteur de données en colonnes peut consommer temporairement une quantité de mémoire jusqu'à deux fois supérieure à la taille de l'index.
Étapes suivantes
- Créer un index HNSW
- Créer un index ScaNN
- Présentation du moteur de données en colonnes
- Gérer les index ScaNN dans le moteur de données en colonnes
- Effectuer une recherche vectorielle