Cette rubrique décrit comment utiliser le connecteur Milvus.
Présentation
Milvus est une base de données vectorielle hautement évolutive conçue pour gérer des volumes importants de données non structurées, telles que des images, du texte et de l'audio. Elle prend en charge la recherche par similarité efficace, ce qui la rend idéale pour des cas d'utilisation tels que les systèmes de recommandation, la recherche d'images et la recherche sémantique. Le connecteur Milvus offre les fonctionnalités suivantes :
|
Catégorie |
Détails |
|
Types pris en charge |
Table sink, table vectorielle |
|
Mode d'exécution |
Streaming |
|
Format de données |
Aucun |
|
Métriques de surveillance spécifiques |
Aucune |
|
Type d'API |
SQL |
|
Prise en charge des mises à jour/suppressions |
Oui |
Fonctionnalités
Le connecteur Milvus intègre étroitement Apache Flink à la base de données vectorielle Milvus afin de créer un pipeline de données performant et fiable pour les scénarios de recherche vectorielle en temps réel. Voici les principales caractéristiques du connecteur Milvus :
Écritures à haute concurrence : prend en charge un parallélisme du sink configurable.
Nouvelles tentatives automatiques : relance les opérations ayant échoué pour améliorer la stabilité.
Mise en tampon par lots : améliore les performances d'écriture en regroupant les enregistrements avant leur vidage.
Sémantique au moins une fois (at-least-once) : garantit la cohérence à terme grâce à des mises à jour idempotentes basées sur la clé primaire.
Recherche vectorielle : permet d'effectuer des recherches de similarité vectorielle en temps réel directement dans Flink SQL.
Prérequis
Vous avez créé un cluster Milvus. Pour plus d'informations, consultez la section Démarrage rapide : Créer une instance Milvus.
Vous avez créé une collection Milvus. Si vous prévoyez d'écrire dans une partition spécifique, assurez-vous que la partition Milvus existe déjà.
Limitations
L'écriture dans une table sink nécessite Ververica Runtime (VVR) 11.1 ou une version ultérieure.
L'interrogation d'une table vectorielle nécessite VVR 11.3 ou une version ultérieure.
Seule la version Milvus 2.4.x est prise en charge.
Le connecteur Milvus prend uniquement en charge la sémantique au moins une fois (at-least-once).
Syntaxe
CREATE TEMPORARY TABLE milvus_sink (
id BIGINT,
f1 STRING,
f2 BOOLEAN,
f3 TINYINT,
f4 SMALLINT,
f5 INTEGER,
f6 DATE,
f7 TIME(3),
f8 TIMESTAMP_LTZ(3),
f9 TIMESTAMP(3),
f10 FLOAT,
f11 DOUBLE,
f12 DECIMAL(10, 2),
f13 ARRAY<FLOAT>,
f14 ARRAY<DOUBLE>,
f15 ARRAY<INTEGER>,
f16 ARRAY<BIGINT>,
PRIMARY KEY (id) NOT ENFORCED -- Required. Milvus supports only BIGINT or STRING as the primary key.
) WITH (
'connector'='milvus',
'endpoint'='<yourEndpoint>',
'port'='<yourPort>',
'userName'='<yourUserName>',
'password'='<yourPassword>',
'databaseName'='<yourDatabaseName>',
'collectionName'='<yourCollectionName>'
);
Options du connecteur
Général
|
Option |
Description |
Type de données |
Obligatoire |
Valeur par défaut |
Notes |
|
connector |
Nom du connecteur. |
String |
Oui |
Définissez cette option sur |
|
|
endpoint |
Endpoint (adresse IP ou nom de domaine) de la base de données Milvus. |
String |
Oui |
Consultez la section Paramètres d'accès réseau et de sécurité. |
|
|
port |
Numéro de port de la base de données Milvus. |
INTEGER |
Non |
|
|
|
username |
Nom d'utilisateur de la base de données Milvus. |
STRING |
Oui |
Aucune. |
|
|
password |
Mot de passe de la base de données Milvus. |
STRING |
Oui |
||
|
databaseName |
Nom de la base de données Milvus. |
STRING |
Oui |
||
|
collectionName |
Nom de la collection Milvus. |
STRING |
Oui |
||
|
partitionName |
Nom de la partition dans laquelle écrire. |
STRING |
Non |
|
|
|
partitionKey.enabled |
Indique si la collection utilise un champ scalaire comme clé de partition. |
BOOLEAN |
Non |
|
|
|
maxRetries |
Nombre de nouvelles tentatives en cas d'échec des opérations. |
INTEGER |
Non |
|
Aucune. |
Spécifique au sink
|
Option |
Description |
Type de données |
Obligatoire |
Valeur par défaut |
Notes |
|
sink.parallelism |
Parallélisme de l'opérateur sink. |
INTEGER |
Non |
Si cette option n'est pas définie, le parallélisme est hérité de l'opérateur en amont. |
|
|
sink.maxRetries |
Nombre maximal de nouvelles tentatives en cas d'échec d'écriture. |
INTEGER |
Non |
|
Dans VVR 11.3 et versions ultérieures, cette option est obsolète. Utilisez plutôt |
|
sink.buffer-flush.max-rows |
Nombre maximal d'enregistrements à mettre en mémoire tampon (y compris les ajouts, les upserts et les suppressions). Un vidage est déclenché lorsque ce nombre est atteint. |
INTEGER |
Non |
|
Définissez cette option sur |
|
sink.buffer-flush.interval |
Intervalle de temps en millisecondes (ms) pour le vidage des enregistrements mis en mémoire tampon. Un vidage est déclenché lorsque cet intervalle est dépassé. |
INTEGER |
Non |
|
Définissez cette option sur |
|
sink.ignoreDelete |
Indique s'il faut ignorer les opérations de suppression. |
BOOLEAN |
Non |
|
Valeurs valides :
|
Spécifique à la table vectorielle
|
Paramètre |
Description |
Type de données |
Obligatoire |
Valeur par défaut |
Notes |
|
search.metric |
Métrique utilisée pour mesurer la similarité vectorielle. |
String |
Non |
|
Pour obtenir des informations sur les métriques de similarité prises en charge, consultez la documentation Milvus. Milvus v2.4 prend actuellement en charge les métriques suivantes :
|
Correspondance des types
|
Type Flink SQL |
Type Milvus |
|
STRING |
VarChar(n) |
|
BOOLEAN |
Bool |
|
TINYINT |
Int8 |
|
SMALLINT |
Int16 |
|
INTEGER |
Int32 |
|
BIGINT |
Int64 |
|
DATE |
VarChar(n) |
|
TIME(3) |
VarChar(n) |
|
TIMESTAMP_LTZ(3) |
Int64 Remarque
Stocké sous forme de temps epoch en millisecondes. |
|
TIMESTAMP(3) |
VarChar(n) |
|
FLOAT |
Float |
|
DOUBLE |
Double |
|
DECIMAL(10, 2) |
VarChar(n) |
|
ARRAY<FLOAT> |
FloatVector Remarque
Après avoir créé une collection Milvus, créez un index pour le champ vectoriel. |
|
ARRAY<DOUBLE> |
Array<Double>[m] |
|
ARRAY<INTEGER> |
Array<Int32>[m] |
|
ARRAY<BIGINT> |
Array<Int64>[m] |
Exemples
Écrire des données de streaming dans Milvus
-- Create a mock data source that generates 100 rows per second. simulated streaming data.
CREATE TEMPORARY TABLE mock_source (
id STRING,
vector ARRAY<FLOAT>, -- Vector passed as a FLOAT array.
event_time AS PROCTIME() -- Processing time attribute.
) WITH (
'connector' = 'datagen',
'rows-per-second' = '100', -- Generates 100 rows per second.
'fields.id.kind' = 'sequence',
'fields.id.start' = '1',
'fields.id.end' = '1000'
);
CREATE TEMPORARY TABLE milvus_sink (
id STRING, -- Unique identifier, such as a device ID.
vector ARRAY<FLOAT>, -- Vector data. The array length must be consistent with the source.
timestamp BIGINT -- Timestamp for stream processing.
PRIMARY KEY (id) NOT ENFORCED -- Required. Milvus supports only BIGINT or STRING as the primary key.
) WITH (
'connector'='milvus',
'endpoint'='xxx',
'port'='19530',
'userName'='xxx',
'password'='xxx',
'databaseName'='xxxx',
'collectionName'='xxxx'
);
-- Transform data and write to Milvus.
INSERT INTO milvus_sink
SELECT
id,
vector,
UNIX_TIMESTAMP() * 1000 AS timestamp -- Current timestamp in milliseconds.
FROM mock_source;
Effectuer une recherche vectorielle
CREATE TEMPORARY TABLE milvus_table (
id STRING, -- Unique identifier.
vector ARRAY<FLOAT>, -- Vector data. The array length must be consistent with the source.
PRIMARY KEY (id) NOT ENFORCED -- Required. Milvus only supports BIGINT or STRING as the primary key.
) WITH (
'connector'='milvus',
'endpoint'='xxx',
'port'='19530',
'userName'='xxx',
'password'='xxx',
'databaseName'='xxxx',
'collectionName'='xxxx'
);
-- Find the top 2 most similar items for the vector [1.1, 2.2, 3.3].
SELECT * FROM
LATERAL TABLE(
VECTOR_SEARCH(
TABLE milvus_table,
DESCRIPTOR(vector),
ARRAY[1.1, 2.2, 3.3],
2));
Remarque : La collection Milvus doit être chargée en mémoire avant d'exécuter la requête. Pour plus d'informations, consultez la documentation Milvus sur la section Charger une collection.