Les donnéesvectorielles sont au cœur des fonctionnalités modernes basées sur l’IA : recherche sémantique, moteurs de recommandation, pipelines RAG (Retrieval-Augmented Generation), etc. À mesure que les champs 4D etVector occupent une place prépondérante dans les bases de données 4D, la capacité à les indexer efficacement est essentielle pour garantir la rapidité des requêtes à mesure que les ensembles de données s’étoffent. Cet article explique le fonctionnement de l’indexation vectorielle dans 4D, présente les algorithmes pris en charge et décrit comment gérer les index vectoriels par programmation.
Interroger un champ vectoriel revient généralement à rechercher les enregistrements dont les vecteurs sont les « plus proches » d’un vecteur de référence, à l’aide d’une mesure de similarité. Sans index, 4D doit parcourir chaque vecteur de la table et calculer la distance un par un, ce qui est correct mais lent à mesure que la table s’étoffe.
Avec un index vectoriel, 4D utilise un algorithme spécialement conçu pour la recherche de similarité vectorielle, ce qui réduit considérablement le temps d’exécution de la requête tout en renvoyant les mêmes résultats qu’une requête non indexée. En d’autres termes :
- L’exactitude est préservée: les requêtes indexées et non indexées renvoient des ensembles de résultats identiques.
- Les performances sont améliorées: les requêtes indexées sont environ 8 fois plus rapides que celles non indexées.
Types d’index vectoriels pris en charge
4D introduit trois types d’index dédiés aux champs 4D.Vector, en plus de l’index « Standard » existant :
| Constant | Cas d’utilisation |
|---|---|
Index cosinus vectoriel |
Similitude basée sur l’angle entre les vecteurs |
Index vectoriel par produit scalaire |
Similitude basée sur le produit scalaire |
Indice euclidien des vecteurs |
Similitude basée sur la distance en ligne droite |
Ces indices sont disponibles via CREATE INDEX et SET INDEX, et chaque type d’indice peut être sélectionné indépendamment, ce qui permet à un même champ vectoriel de disposer simultanément de plusieurs indices (par exemple, à la fois cosinus et euclidien).
Interface utilisateur
Les champs vectoriels et leurs indices sont entièrement intégrés à l’éditeur de structure et aux boîtes de dialogue associées :
- Les champs de type «4D » ( ) et « Vector » ( ) s’affichent avec une icône vectorielle dédiée
, tant dans l’éditeur de structure que dans l’inspecteur.
- La fenêtre de liste des indices affiche les indices vectoriels aux côtés des indices classiques.

- Depuis l’Inspecteur, le menu contextuel du champ et la fenêtre Créer/Modifier un indice, seuls les indices cosinus, scalaire, euclidien et automatique sont proposés pour les champs vectoriels, chacun pouvant être sélectionné indépendamment. La sélection de tout autre type d’indice déclenche une erreur.

Assurer la cohérence des index
4D se charge de maintenir la cohérence des index vectoriels avec les données :
- La mise à jour d’un vecteur via `save()` (ou toute autre commande) met automatiquement à jour l’index associé.
- La suppression d’un vecteur via `drop()` (ou toute autre commande) met automatiquement à jour l’index associé.
Gardez à l’esprit que :
- Les index composés ne peuvent pas inclure de champ vectoriel.
-
Les mises à jour des index vectoriels ne sont actuellement pas prises en charge au sein des transactions.
Prise en charge opérationnelle
Les index vectoriels sont traités comme des éléments à part entière dans l’ensemble des outils de maintenance et d’administration de 4D :
- Pause / Reprise: PAUSE INDEXES et RESUME INDEXES travaillez sur les index vectoriels comme sur n’importe quel autre index.
- Stockage: 4D crée un dossier nommé <nom du projet>.4DVI dans le répertoire DATA pour stocker les index vectoriels.
- Réindexation: une réindexation déclenchée au redémarrage réindexe également les index vectoriels.
- Vérification et réparation: le Centre de maintenance et de sécurité (MSC) inclut les index vectoriels dans ses opérations de vérification et de réparation.
- Sauvegarde: lorsqu’un index est stocké dans un fichier séparé, il est inclus dans la configuration de sauvegarde par défaut.
Précision vectorielle
4D.Vector. La fonctionnew() accepte désormais un paramètre de précision, qui peut être de 32 ou 64 bits (constantesmk single precision et mk double precision ). Par défaut, les nouveaux vecteurs sont créés avec une précision de 32 bits (4 octets par composante). Cela réduit de moitié l’empreinte mémoire par rapport aux vecteurs 64 bits tout en conservant une précision suffisante pour les calculs de similarité et de distance, ce qui explique pourquoi il s’agit de la valeur par défaut recommandée pour la plupart des cas d’utilisation.
$vector32:=4D.Vector.new([1; 2; 3])
// $vector32.precision=32
$vector64:=4D.Vector.new([1; 2; 3]; mk double precision)
// $vector64.precision=64
Remarque de compatibilité : ce changement rompt la compatibilité avec le code existant qui s’appuyait sur l’ancienne valeur par défaut de 64 bits. Pour conserver la précision 64 bits, passez explicitement l’mk double precision.
Conclusion
L’indexation vectorielle dans 4D apporte des performances de niveau production à la recherche de similarité directement au sein du moteur de base de données, sans sacrifier la cohérence ni la facilité d’utilisation. Que vous développiez un système de recommandation, une fonctionnalité de recherche sémantique ou un pipeline RAG, vous pouvez désormais :
- Choisir la métrique de similarité adaptée (cosinus, produit scalaire ou euclidienne) à votre cas d’utilisation.
- Créer et gérer des index vectoriels via le code ou l’interface utilisateur.
- Compter sur 4D pour synchroniser automatiquement les index à mesure que les données évoluent.
- Inspecter, mettre en pause, vérifier et réparer les index vectoriels à l’aide des mêmes outils que ceux que vous utilisez déjà pour les index classiques.
Comme toujours, les requêtes indexées et non indexées renvoient des résultats identiques ; l’index sert uniquement à optimiser les performances et n’entraîne jamais de modification du comportement.
Les commentaires ne sont pas disponibles pour cet article pour le moment.