lakebase_vector

De lakebase_vector extensie voegt bij benadering dichtstbijzijnde neighbor vectorzoekopdrachten (ANN) toe aan Lakebase via het lakebase_ann indextype. Het is een vervolgkeuzeassistent voor pgvector: dezelfde vectortypen, afstandsoperators en querysyntaxis werken zonder wijziging.

Install

Schakel eerst Lakebase Search in uw projectinstellingen in. Installeer vervolgens de extensie:

CREATE EXTENSION IF NOT EXISTS lakebase_vector CASCADE;

Het CASCADE trefwoord wordt pgvector automatisch geïnstalleerd als een afhankelijkheid.

Upgrade de extensie en indexen

Een nieuwe Lakebase Search-release kan functies, fixes en prestatieverbeteringen toevoegen. Hoewel Lakebase Search wordt uitgebracht als onderdeel van Lakebase-updates, wordt niet alles automatisch bijgewerkt. In lakebase_vector, upgraden twee dingen afzonderlijk en dragen versienummers die niet aan elkaar gerelateerd zijn:

  • De extensieversie is de versie van de SQL-objecten die CREATE EXTENSION lakebase_vector aanmaakt, inclusief de datatypes, functies, operatoren en de lakebase_ann indextoegangsmethode. Deze versie wordt gerapporteerd door SELECT installed_version FROM pg_available_extensions WHERE name = 'lakebase_vector'. ALTER EXTENSION lakebase_vector UPDATE Updates van deze versie.
  • Het indexopslagformaat is de op-schijf indeling van een lakebase_ann index. De uitbreiding kan in een update bijgewerkte indexopslagformaten introduceren, waardoor meer functies worden ontgrendeld en betere prestaties worden geleverd. Alle nieuw aangemaakte indexen gebruiken automatisch het nieuwste opslagformaat, terwijl bestaande indexen kunnen worden geüpgraded naar het nieuwe formaat nadat REINDEX INDEX CONCURRENTLY een nieuwer opslagformaat beschikbaar is.

Upgraden is niet dringend. De extensie is compatibel met SQL-objecten en indexopslagformaten van oudere versies, maar het up-to-date blijven houd je op het ondersteunde, best presterende pad en voorkomt een grotere migratie later, dus upgrade wanneer het uitkomt in plaats van het eindeloos uit te stellen.

Note

De laatst beschikbare extensieversie wordt gerapporteerd door SELECT default_version FROM pg_available_extensions WHERE name = 'lakebase_vector'.

De nieuwste opslagformatversie is _2. De volgende zoekopdracht vindt alle indexen die een ouder opslagformaat gebruiken. Je kunt ze vervolgens opnieuw opbouwen naar het nieuwste opslagformaat met REINDEX INDEX of REINDEX INDEX CONCURRENTLY:

SELECT oid::regclass AS index, lakebase_ann_index_info(oid::regclass)::json ->> 'version' AS storage_format_version
FROM pg_class
WHERE relam = (SELECT oid FROM pg_am WHERE amname = 'lakebase_ann') AND relkind = 'i';

Note

REINDEX INDEX CONCURRENTLY Maakt het mogelijk om lezen en schrijven te laten doorgaan, maar het duurt langer.

Snel starten

-- Create a table with a vector column
CREATE TABLE items (id BIGSERIAL PRIMARY KEY, embedding VECTOR(3));

-- Insert sample data
INSERT INTO items (embedding)
SELECT ARRAY[random(), random(), random()]::real[]
FROM generate_series(1, 1000);

-- Create a lakebase_ann index
CREATE INDEX items_embedding_idx ON items
  USING lakebase_ann (embedding vector_l2_ops);

-- Query using standard pgvector distance operators
SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 5;

Vul uit gesynchroniseerde tabellen

Als je embeddings uit Unity Catalog laadt in plaats van ze direct in te voegen, kunnen gesynchroniseerde tabellen een lakehouse-embeddingkolom direct naar een Postgres-kolom vector mappen tijdens de synchronisatie, in plaats van de standaardmapping JSONB . Zie Aangepaste type-mapping voor Lakebase Search.

De index configureren

Ingesteld build_mode bij het maken van een index om de nauwkeurigheid/snelheid te bepalen:

  • standard (standaard): Saldo's recall en indexbouwtijd. Gebruik voor de meeste workloads.
  • quality: verbetert het geheugen, maar het duurt langer om op te bouwen.
CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (build_mode = 'quality');

De fast bouwmodus blijft ondersteund voor achterwaartse compatibiliteit.

Standaard kiest lakebase_ann hij lijsten op basis van de statistieken van de tabel en de configuratie van de index. Ingesteld lists om expliciet de partitie-indeling te besturen:

CREATE INDEX ON items USING lakebase_ann (embedding vector_l2_ops)
WITH (lists = '1000');

Indexbouwtijd

Groter shared_buffers kan de bouwtijd van de index aanzienlijk verkorten. Lakebase maakt deze optimalisatie alleen mogelijk op grotere berekeningen met vaste grootte. Controleer de huidige waarde voordat je een indexbuild optimaliseert:

SHOW shared_buffers;

Als shared_buffers het 1 GB of minder is, overweeg dan tijdelijk te veranderen naar een grotere compute met vaste grootte voordat je met de indexbouw begint.

Je kunt ook het aanmaken van indexen versnellen door het aantal parallelle werkers te verhogen.

De max_parallel_maintenance_workers configuratieparameter stelt het maximale aantal parallelle werkers vast dat kan worden gestart met een enkel nutscommando zoals CREATE INDEX.

De max_parallel_workers configuratieparameter stelt het maximale aantal werkers vast dat de berekening kan ondersteunen voor parallelle bewerkingen. Waarden boven max_parallel_maintenance_workers deze limiet hebben geen effect.

De max_worker_processes configuratieparameter stelt het maximale aantal achtergrondprocessen vast dat de computer kan ondersteunen. Lakebase beheert deze instelling op basis van rekengrootte. Waarden boven max_parallel_workers deze limiet hebben geen effect.

SHOW max_worker_processes;
-- Set both values to the desired parallelism minus one.
SET max_parallel_workers = 15;
SET max_parallel_maintenance_workers = 15;

Indexen gelijktijdig bouwen

CREATE INDEX CONCURRENTLY en REINDEX INDEX CONCURRENTLY laten lezen en schrijven doorgaan terwijl een index wordt gebouwd of herbouwd:

CREATE INDEX CONCURRENTLY items_embedding_idx_concurrent ON items
  USING lakebase_ann (embedding vector_l2_ops);

REINDEX INDEX CONCURRENTLY items_embedding_idx_concurrent;

Nauwkeurigheid van zoekopdrachten afstemmen

Voordat u gaat afstemmen, roept lakebase_ann_index_info(index_name) u aan om de indexen listsen default_probesdefault_epsilon waarden op te halen.

Gebruik lakebase_ann.probes tijdens het querymoment om te bepalen hoeveel IVF-partities er worden doorzocht. Hogere waarden verbeteren het intrekken tegen de kosten van querysnelheid. De standaardwaarde is 'auto'. Test verschillende waarden om je terugroepdoel te halen.

De vorm van probes moet overeenkomen met de vorm van lists. Roep lakebase_ann_index_info aan om je lists array te vinden, stel dan één waarde in voor een één-niveau index of twee komma-gescheiden waarden voor een twee-niveau index:

lists uit indexgegevens probes instellen
[] (leeg) ''
[222] '22'
[3333, 33333] '33, 333'

Note

Op een kleine dataset lakebase_ann gebruikt exact (vlak) zoeken in plaats van IVF-partitionering, en lakebase_ann_index_info geeft leeg lists en default_probes. In dit geval laat probes je het op zetten ''. Wanneer lists niet leeg is, veroorzaakt een probes waarde waarvan de vorm niet overeenkomt lists een fout.

-- Check your index's lists array first
SELECT lakebase_ann_index_info('items_embedding_idx');

-- Then set probes to match the shape of lists.
-- One-level index (single-value lists): set one value.
SET lakebase_ann.probes TO '10';

-- Two-level index: set two ascending comma-separated values, for example '10, 20'.
-- Flat index (empty lists): leave probes set to ''.

SELECT * FROM items ORDER BY embedding <-> '[3,1,2]' LIMIT 10;

lakebase_ann.epsilon bepaalt hoeveel kandidaten worden herrangschikt met behulp van afstanden met volledige precisie. Hogere waarden herschikken meer kandidaten en het duurt langer. De standaardwaarde werkt 'auto' goed voor de meeste workloads. Tijdens flat search op een kleine dataset controleert epsilon nog steeds volledige precisie herrangschikking.

Prefilter

Standaard past Postgres niet-vectorfiltervoorwaarden toe nadat de ANN-index kandidaatrijen heeft teruggegeven. Stel in staat lakebase_ann.prefilter deze omstandigheden te evalueren voordat volledige precisie afstand wordt herrangschikt:

SET lakebase_ann.prefilter TO on;

SELECT * FROM items
WHERE id % 100 = 0
ORDER BY embedding <-> '[3,1,2]'
LIMIT 10;

Prefiltering werkt het beste wanneer het filter goedkoop te evalueren is en de meeste rijen verwijdert. Laat het uit voor filters die veel rijen overeenkomen of dure berekeningen vereisen, omdat het evalueren van het filter binnen de index extra overhead kan toevoegen.

Voorwarmen van een index

Gebruik lakebase_ann_prewarm nadat een berekening is begonnen om de vaak gebruikte delen van een index in het geheugen te laden. Het scope argument accepteert de volgende waarden:

  • search (standaard): Warmt het volledige hete gedeelte voor voor zoekdoeleinden voor.
  • routing: Voorwarmt alleen de routeringsstructuren. Deze optie is sneller en biedt een betere kosten-prestatie afweging voor grote indexen.
-- Prewarm the full search scope
SELECT lakebase_ann_prewarm('items_embedding_idx');

-- Prewarm only routing structures
SELECT lakebase_ann_prewarm('items_embedding_idx', scope => 'routing');

Operatorklassen

Metrische gegevens voor afstand Operatorklasse Queryoperator
L2 (Euclidisch) vector_l2_ops <->
Negatief binnenproduct vector_ip_ops <#>
Cosinus-gelijkenis vector_cosine_ops <=>

Kies de operatorklasse die overeenkomt met de wijze waarop uw insluitingen zijn getraind en gebruik dezelfde metrische gegevens voor de index en de query:

  • vector_cosine_ops (<=>) is cosinus-gelijkenis. Gebruik deze voor de meeste tekst insluitingen. Dit is de meest voorkomende keuze.
  • vector_l2_ops (<->) is Euclidean (L2) afstand. Gebruik deze functie wanneer absolute ruimtelijke afstand belangrijk is en vectoren niet worden genormaliseerd.
  • vector_ip_ops (<#>) is een negatief binnenproduct. Gebruik deze als vectoren vooraf zijn genormaliseerd tot eenheidslengte. Voor eenheidsvectoren is het binnenste product gelijk aan cosinus-gelijkenis en is dit doorgaans sneller.

Naslaginformatie over indexopties

Option Typ Default Description
build_mode touw 'standard' Bepaalt de afweging tussen nauwkeurigheid en snelheid. Gebruik 'quality' het voor een betere recall ten koste van een langere indexbuild. 'fast' blijft ondersteund voor achterwaartse compatibiliteit.
lists touw 'auto' Stelt de IVF-partitie-indeling in. Met 'auto', kiest de extensie een waarde op basis van de statistieken van de tabel en de configuratie van de index. Stel een enkel geheel getal in, bijvoorbeeld '1000' voor een index met één niveau, of twee oplopende gehele getallen met oplopende komma, zoals '100, 1000' bij een index met twee niveaus.

GUC-verwijzing

Parameter Typ Default Description
lakebase_ann.probes touw 'auto' Aantal IVF-partities om op elk niveau te scannen. Hogere waarden verbeteren het intrekken tegen de kosten van querysnelheid. De vorm moet overeenkomen met de lists array van lakebase_ann_index_info.
lakebase_ann.epsilon touw 'auto' Bepaalt hoeveel kandidaten worden herrangschikt met behulp van volledige precisie afstanden. Hogere waarden herschikken meer kandidaten en het duurt langer.
lakebase_ann.prefilter enum off Evalueert niet-vectorfilters voordat de afstand met volledige precisie wordt herrangschikt. Geldige waarden zijn on en off. Het beste voor goedkope filters die de meeste kandidaatrijen verwijderen.

Hulpprogrammafuncties

Function Returns Description
lakebase_ann_prewarm(regclass, scope text DEFAULT 'search') leegte Laadt vaak geraadpleegde indexgegevens in het geheugen. Geldige scope waarden zijn search en routing.
lakebase_ann_index_info(regclass) text Geeft indexmetadata terug als JSON-tekst, inclusief version, lists, , default_probesen default_epsilon.

Volgende stappen