Tüm Ürünler
Search
Belge Merkezi

Realtime Compute for Apache Flink:Vektörleştirme sonucu önbelleği

Son Güncelleme:Oct 04, 2026

Bu belgede, aynı giriş metni için vektörleştirme sonuçlarını yeniden kullanarak model çağrılarını azaltmak, gecikme süresini düşürmek ve maliyetlerden tasarruf etmek amacıyla AI_EMBED işlevi için harici bir önbellek tablosunun nasıl yapılandırılacağı açıklanmaktadır.

Arka plan bilgileri

AI_EMBED işlevi, vektörleştirme sonuçları için kalıcı bir önbellek olarak harici bir tablo belirtmek üzere CACHE_TABLE parametresini kullanır. Çalışma zamanında aşağıdaki şekilde çalışır:

  • Önbellekte bulunma (Cache hit): Eşzamanlı olmayan arama bir eşleşme bulursa işlev doğrudan sonucu döndürür ve model çağrısını atlar.

  • Önbellekte bulunmama (Cache miss): Eşzamanlı olmayan arama bir eşleşme bulamazsa işlev vektörü hesaplamak için modeli çağırır, sonucu döndürür ve bunu eşzamanlı olmayan şekilde önbellek tablosuna geri yazar.

Bu mekanizma, aynı giriş metnine sahip tekrarlayan istekler için gereksiz model çağrılarını önler.

Sınırlamalar

  • Bu özellik yalnızca Realtime Compute for Apache Flink VVR 11.8.preview1 ve sonraki sürümler tarafından desteklenir.

  • Enable Stream Storage Apache Fluss Edition. Önbellek tablosu bir Fluss birincil anahtar tablosu olmalıdır.

Önbellek tablosu oluşturun

Önbellek tablosunun birincil anahtar türü, CACHE_KEY türü ile uyumlu olmalıdır.

Açıkça belirtilen anahtar modu

Birincil anahtar türü, CACHE_KEY tarafından belirtilen sütunun türü ile uyumlu olmalıdır. Örneğin, kaynak tablodaki cache_key bir INT ise:

CREATE TABLE `fluss`.`default`.`ai_cache` (
  cache_key   INT NOT NULL,
  embedding   ARRAY<FLOAT>,PRIMARY KEY (cache_key) NOT ENFORCED
);

Otomatik oluşturulan anahtar modu

SHA256 hash değerini depolamak için birincil anahtar STRING türünde olmalıdır:

CREATE TABLE `fluss`.`default`.`ai_cache_sha` (
  cache_key   STRING NOT NULL,
  embedding   ARRAY<FLOAT>,PRIMARY KEY (cache_key) NOT ENFORCED
);

Sözdizimi

AI_EMBED(
  MODEL       => MODEL <MODEL NAME>,
  INPUT       => <INPUT COLUMN NAME>
  [, DIMENSION   => <DIMENSION VALUE>]
  [, CACHE_TABLE => TABLE <catalog>.<db>.<table>
     [, CACHE_KEY => DESCRIPTOR(<column>)]]
  [, CONFIG      => MAP[...]]
)

Parametreler


Parametre


Gerekli


Açıklama


MODEL


Evet


Model referansı. Daha fazla bilgi için bkz. Register model.


INPUT


Evet


Giriş metin sütunu.


CACHE_TABLE


Hayır


Önbellek tablosu referansı. Sözdizimi TABLE <catalog>.<db>.<table> şeklindedir.


CACHE_KEY


Hayır


Önbellek anahtarı sütunu. Sözdizimi DESCRIPTOR(<column>) şeklindedir. Belirtilmezse sistem SHA256 hash kullanarak otomatik olarak bir bileşik anahtar oluşturur.


CONFIG


Hayır


Çalışma zamanı yapılandırması.

CACHE_KEY modları

Açıkça belirtilen (Önerilen): Giriş tablosundaki belirli bir sütunun değerini arama anahtarı olarak kullanır. Verilerinizde zaten benzersiz bir anahtar varsa bu mod önerilir.

CACHE_KEY => DESCRIPTOR(cache_key)

Otomatik oluşturma: CACHE_KEY parametresini iletmezseniz sistem aşağıdaki kurallara göre bir anahtar oluşturur:

-- If CACHE_KEY is not provided, the system automatically generates the key:
-- key = LOWER(SHA256(model_id || ':' || dimension || ':' || input_text))
CACHE_TABLE => TABLE `fluss-ql`.`default`.`ai_cache1`

Bu mod, çalışma zamanında bir SHA256 hash hesaplama ek yüküne neden olur ancak model, boyut ve giriş metni kombinasyonunun her biri için benzersiz bir anahtarı otomatik olarak garanti eder.

Performans ayarlama

Ayarlama parametreleri

SET 'table.exec.async-ml-predict.max-concurrent-operations' = '100';
SET 'table.exec.async-ml-predict.output-mode' = 'ALLOW_UNORDERED';
SET 'table.exec.async-ml-predict.timeout' = '120s';

Parametreler

Parametre

Varsayılan

Açıklama

max-concurrent-operations

10

Eşzamanlı önbellek aramaları veya model çağrıları için maksimum kayıt sayısı. Bu değeri artırmak aktarım hızını iyileştirebilir. Ancak çok yüksek ayarlamak model hizmetini aşırı yükleyebilir veya aşırı bellek kullanımına neden olabilir.

output-mode

ORDERED

Çıktı sırası modu.

  • ORDERED: Çıktının girişle aynı sırada olmasını garanti eder. Birleştirmeler (join) veya pencere işlevleri gibi sıraya bağlı alt akış işlemleri için uygundur.

  • ALLOW_UNORDERED: Kayıtlar tamamlanır tamamlanmaz çıktılanır. Yalnızca ekleme yapılan akışlar için önerilir.

timeout

3min

Hem arama hem de tahmin için izin verilen maksimum toplam süre. Bu değer çok düşük ayarlanırsa önbellekte bulunmama durumunda normal bir işlem zaman aşımına uğrayabilir.

Öneri: Aşağıdaki nedenlerle ALLOW_UNORDERED kullanımı önemli performans avantajları sağlar:

  • Önbellekte bulunma durumu genellikle yalnızca tek bir arama gerektirirken önbellekte bulunmama durumu ek bir model çağrısı gerektirir.

  • ORDERED modunda tek bir önbellekte bulunmama durumu sonraki tüm önbellekte bulunma durumlarının çıktılanmasını engeller.

  • ALLOW_UNORDERED modunda önbellekte bulunanlar önceki bulunmama durumlarının tamamlanmasını beklemeden hemen çıktılanır.

Not

Yalnızca ekleme yapılan akışlar ALLOW_UNORDERED modunu kullanır. Geri çekmeli (retraction) akışlar için sistem ALLOW_UNORDERED belirtilse bile ORDERED moduna geri döner.

İzleme ölçümleri

Bir iş çalışırken önbelleğin etkinliğini izlemek için Flink ölçümlerini kullanabilirsiniz.


Ölçüm adı


Açıklama


Notlar


ai_function_cache.cache_hit


Önbellekte bulunma sayısı


Bulunma oranı = bulunan / (bulunan + bulunmayan).


ai_function_cache.cache_miss


Önbellekte bulunmama sayısı


Sürekli yüksek bir değer önbelleğin ısınmadığını veya anahtarların kararsız olduğunu gösterir.


ai_function_cache.writeback_attempt


Geri yazma deneme sayısı


Bu değer bulunmama sayısına yakın olmalıdır.


ai_function_cache.writeback_skipped_null_output


Boş çıktı nedeniyle atlanan geri yazmalar


Yüksek bir değer modelde potansiyel bir soruna işaret eder.

Örnek

Fluss birincil anahtar tablosu örneği:

-- Create the cache table (Fluss) in advance
CREATE TABLE `fluss`.`default`.`embedding_cache` (
  cache_key   STRING NOT NULL,
  embedding   ARRAY<FLOAT>,
  PRIMARY KEY (cache_key) NOT ENFORCED
);

Bu örnekte önbellek olarak bir Fluss birincil anahtar tablosu kullanılır ve aktarım hızını artırmak için çıktı modu ALLOW_UNORDERED olarak ayarlanır.

-- Tuning parameters
SET 'table.exec.async-ml-predict.max-concurrent-operations' = '100';
SET 'table.exec.async-ml-predict.output-mode' = 'ALLOW_UNORDERED';

-- Create the model
CREATE TEMPORARY MODEL embedding_model
  INPUT (text STRING)
  OUTPUT (embedding ARRAY<FLOAT>)
WITH (
  'provider' = 'openai-compat',
  'task' = 'embeddings',
  'model' = 'text-embedding-v4',
  'dimension' = '1024'
);

-- Business query
INSERT INTO result_sink
SELECT id, content, embedding
FROM source_table, LATERAL TABLE(AI_EMBED(
  MODEL       => MODEL embedding_model,
  INPUT       => content,
  CONFIG      => MAP['async', 'true'],
  CACHE_TABLE => TABLE `fluss`.`default`.`embedding_cache`
));