Bu konu, Milvus bağlayıcısının nasıl kullanılacağını açıklar.
Genel Bakış
Milvus; resim, metin ve ses gibi büyük ölçekli yapılandırılmamış verileri işlemek üzere tasarlanmış, yüksek ölçeklenebilirliğe sahip bir vektör veritabanıdır. Verimli benzerlik araması destekleyen bu veritabanı; öneri sistemleri, görsel erişimi ve anlamsal arama gibi kullanım senaryoları için idealdir. Milvus bağlayıcısı aşağıdaki yetenekleri sunar:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Özellikler
Milvus bağlayıcısı, Apache Flink'i Milvus vektör veritabanıyla sıkı bir şekilde entegre ederek gerçek zamanlı vektör araması senaryoları için yüksek performanslı ve güvenilir bir veri işlem hattı oluşturur. Milvus bağlayıcısının temel özellikleri şunlardır:
Yüksek eşzamanlı yazma: Yapılandırılabilir sink paralelliğini destekler.
Otomatik yeniden deneme: Kararlılığı artırmak için başarısız işlemleri yeniden dener.
Toplu tamponlama: Kayıtları flush işleminden önce toplu hale getirerek yazma performansını artırır.
En az bir kez semantiği: Birincil anahtara dayalı idempotent güncellemeler aracılığıyla nihai tutarlılığı sağlar.
Vektör araması: Flink SQL içinde doğrudan gerçek zamanlı vektör benzerlik aramalarını etkinleştirir.
Ön Koşullar
Bir Milvus kümesi oluşturdunuz. Daha fazla bilgi için bkz. Hızlı başlangıç: Milvus örneği oluşturma.
Bir Milvus koleksiyonu oluşturdunuz. Belirli bir bölüme yazma planınız varsa Milvus bölümünün zaten mevcut olduğundan emin olun.
Sınırlamalar
Bir sink tablosuna yazmak için Ververica Runtime (VVR) 11.1 veya sonraki bir sürüm gerekir.
Bir vektör tablosunu sorgulamak için VVR 11.3 veya sonraki bir sürüm gerekir.
Yalnızca Milvus 2.4.x desteklenir.
Milvus bağlayıcısı yalnızca en az bir kez semantiğini destekler.
Sözdizimi
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>'
);
Bağlayıcı seçenekleri
Genel
|
Seçenek |
Açıklama |
Veri türü |
Gerekli |
Varsayılan değer |
Notlar |
|
connector |
Bağlayıcının adı. |
String |
Evet |
Değeri |
|
|
endpoint |
Milvus veritabanının uç noktası (IP adresi veya alan adı). |
String |
Evet |
||
|
port |
Milvus veritabanının bağlantı noktası numarası. |
INTEGER |
Hayır |
|
|
|
username |
Milvus veritabanı için kullanıcı adı. |
STRING |
Evet |
Yok. |
|
|
password |
Milvus veritabanı için parola. |
STRING |
Evet |
||
|
databaseName |
Milvus veritabanının adı. |
STRING |
Evet |
||
|
collectionName |
Milvus koleksiyonunun adı. |
STRING |
Evet |
||
|
partitionName |
Veri yazılacak bölümün adı. |
STRING |
Hayır |
|
|
|
partitionKey.enabled |
Koleksiyonun bir skaler alanı bölüm anahtarı olarak kullanıp kullanmadığını belirtir. |
BOOLEAN |
Hayır |
|
|
|
maxRetries |
Başarısız işlemler için yeniden deneme sayısı. |
INTEGER |
Hayır |
|
Yok. |
Sink'e özel
|
Seçenek |
Açıklama |
Veri türü |
Gerekli |
Varsayılan değer |
Notlar |
|
sink.parallelism |
Sink operatörü için paralellik değeri. |
INTEGER |
Hayır |
Ayarlanmazsa paralellik üst akış operatöründen devralınır. |
|
|
sink.maxRetries |
Başarısız bir yazma işleminde yapılacak maksimum yeniden deneme sayısı. |
INTEGER |
Hayır |
|
VVR 11.3 ve sonraki sürümlerde bu seçenek kullanımdan kaldırılmıştır. Bunun yerine |
|
sink.buffer-flush.max-rows |
Tamponlanacak maksimum kayıt sayısı (eklemeler, upsert işlemleri ve silmeler dahil). Bu sayıya ulaşıldığında flush işlemi tetiklenir. |
INTEGER |
Hayır |
|
Bu tetikleyiciyi devre dışı bırakmak için değeri |
|
sink.buffer-flush.interval |
Tamponlanan kayıtları flush etmek için milisaniye (ms) cinsinden zaman aralığı. Bu aralık aşıldığında flush işlemi tetiklenir. |
INTEGER |
Hayır |
|
Zaman tabanlı flush işlemini devre dışı bırakmak için değeri |
|
sink.ignoreDelete |
Silme işlemlerinin yoksayılıp yoksayılmayacağını belirtir. |
BOOLEAN |
Hayır |
|
Geçerli değerler:
|
Vektör tablosuna özel
|
Parametre |
Açıklama |
Veri türü |
Gerekli |
Varsayılan değer |
Notlar |
|
search.metric |
Vektör benzerliğini ölçmek için kullanılan metrik. |
String |
Hayır |
|
Desteklenen benzerlik metrikleri hakkında bilgi için Milvus belgelerine bakın. Milvus v2.4 şu anda aşağıdaki metrikleri destekler:
|
Tür eşleme
|
Flink SQL türü |
Milvus türü |
|
STRING |
VarChar(n) |
|
BOOLEAN |
Bool |
|
TINYINT |
Int8 |
|
SMALLINT |
Int16 |
|
INTEGER |
Int32 |
|
BIGINT |
Int64 |
|
DATE |
VarChar(n) |
|
TIME(3) |
VarChar(n) |
|
TIMESTAMP_LTZ(3) |
Int64 Not
Milisaniye cinsinden epoch zamanı olarak depolanır. |
|
TIMESTAMP(3) |
VarChar(n) |
|
FLOAT |
Float |
|
DOUBLE |
Double |
|
DECIMAL(10, 2) |
VarChar(n) |
|
ARRAY<FLOAT> |
FloatVector Not
Bir Milvus koleksiyonu oluşturduktan sonra vektör alanı için bir dizin oluşturun. |
|
ARRAY<DOUBLE> |
Array<Double>[m] |
|
ARRAY<INTEGER> |
Array<Int32>[m] |
|
ARRAY<BIGINT> |
Array<Int64>[m] |
Örnekler
Akış verilerini Milvus'a yazma
-- 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;
Vektör araması gerçekleştirme
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));
Not: Sorguyu çalıştırmadan önce Milvus koleksiyonunun belleğe yüklenmesi gerekir. Daha fazla bilgi için Milvus belgelerindeki Koleksiyon yükleme konusuna bakın.