In che modo la compattazione di un database vettoriale recupera spazio dopo l’eliminazione di un documento?

Eva Wong è la Technical Writer e smanettatrice residente di ZimaSpace. Una geek da sempre con una passione per homelab e software open-source, si specializza nel tradurre concetti tecnici complessi in guide accessibili e pratiche. Eva crede che l'auto-ospitare debba essere divertente, non intimidatorio. Attraverso i suoi tutorial, dà potere alla comunità di demistificare le configurazioni hardware, dalla costruzione del loro primo NAS al dominio dei container Docker.

La compattazione del database vettoriale recupera lo spazio eliminato riscrivendo i record attivi in segmenti puliti e ritirando i file dei segmenti più vecchi che contengono ancora vettori rimossi.

Eliminare un documento domestico da una libreria RAG locale può farlo scomparire immediatamente dalla ricerca mentre l'utilizzo del disco cambia appena. Non si tratta necessariamente di un'eliminazione non riuscita. Molti database vettoriali separano la visibilità logica dalla pulizia fisica dello spazio di archiviazione, così le scritture in primo piano rimangono veloci e i lettori possono continuare a utilizzare segmenti immutabili o orientati all'aggiunta. La compattazione è il successivo percorso di manutenzione che trasforma queste eliminazioni logiche in una rappresentazione fisica più compatta.

Un'eliminazione modifica di solito la visibilità prima di riscrivere i byte archiviati

Modificare fisicamente un file di indice di grandi dimensioni a ogni eliminazione genererebbe costose scritture casuali e una gestione complessa della concorrenza. Molti motori registrano invece un indicatore di eliminazione, un tombstone o un registro delle eliminazioni che indica alla ricerca di ignorare il vettore.

I tombstone HNSW rendono gli oggetti eliminati non idonei alla ricerca nel grafo prima che la manutenzione in background rimuova fisicamente tutto il loro stato dall'indice.

Il risultato visibile all'utente e quello a livello di disco avvengono quindi in momenti diversi. Il record può smettere di comparire nei risultati dei vicini più prossimi mentre i suoi vecchi byte rimangono all'interno di un segmento esistente.

Questa separazione offre inoltre al database lo spazio necessario per coordinare query concorrenti, repliche, snapshot e regole di conservazione prima di distruggere le strutture di archiviazione storiche.

I record eliminati si accumulano nei segmenti finché non viene raggiunta una soglia di pulizia

Un segmento può contenere sia vettori attivi sia record che non sono più idonei alla ricerca. Con l'accumularsi di aggiornamenti ed eliminazioni, diminuisce il rapporto tra dati utili e dati obsoleti.

Una soglia dei vettori eliminati può ritardare la pulizia costosa finché non si sono accumulati abbastanza punti obsoleti da rendere conveniente riscrivere un segmento.

Attendere il raggiungimento di una soglia consente di ammortizzare il lavoro di manutenzione. Riscrivere un segmento per recuperare un singolo record eliminato di piccole dimensioni costerebbe più I/O dello spazio risparmiato. Su un home server con frequenti reindicizzazioni, la quantità visibile di spazio fisico obsoleto può quindi aumentare per un certo periodo prima che l'ottimizzatore decida che la pulizia è conveniente.

La compattazione copia i dati attivi in segmenti nuovi o uniti

Quando inizia la manutenzione, il database legge i segmenti di origine idonei, salta i record eliminati logicamente e scrive i vettori e i payload sopravvissuti in una nuova rappresentazione compatta.

La compattazione come unione dei segmenti e pulizia delle eliminazioni riscrive i dati sopravvissuti in segmenti più puliti, omettendo i record già eliminati logicamente o scaduti.

I segmenti piccoli possono essere uniti nello stesso momento, riducendo il numero di strutture separate che la ricerca deve consultare. Il nuovo segmento rappresenta lo stato attivo anziché trasferire ogni modifica storica.

Questa riscrittura può richiedere temporaneamente spazio libero aggiuntivo, perché i segmenti vecchi e nuovi possono coesistere finché la sostituzione non viene verificata e resa attiva.

Gli indici vengono ricostruiti attorno all'insieme di vettori sopravvissuti

Rimuovere i byte dei payload vettoriali è solo una parte della pulizia. I collegamenti del grafo, le strutture quantizzate, i filtri e i metadati dei segmenti possono fare riferimento a record che non appartengono più al segmento attivo.

Un percorso di compattazione che ricostruisce gli indici durante l'ottimizzazione garantisce che le strutture di ricerca del grafo e ausiliarie corrispondano all'insieme di vettori sopravvissuti, invece di conservare riferimenti a punti rimossi.

Per HNSW, questo può modificare la topologia del grafo anche quando i vettori rimanenti non cambiano. Ecco perché la compattazione può influire sull'attraversamento dei vicini approssimati pur preservando lo stesso dataset logico. Il meccanismo descritto in questo articolo riguarda il ciclo di vita dello spazio di archiviazione: i record obsoleti vengono esclusi dall'indice riscritto, così la loro occupazione fisica può infine scomparire.

I segmenti vecchi devono essere ritirati prima che il loro spazio possa essere liberato

Dopo che il segmento compattato diventa la rappresentazione attiva, i segmenti vecchi vengono contrassegnati come obsoleti o eliminati. I file sottostanti possono tuttavia attendere un periodo di garbage collection o di conservazione prima che i blocchi effettivi del disco vengano rilasciati.

Quando la garbage collection segue la compattazione, i file dei segmenti eliminati possono rimanere temporaneamente anche dopo che la sostituzione compattata è attiva; perciò lo spazio nel filesystem può essere rilasciato dopo le modifiche alla visibilità nelle query.

Snapshot, conservazione dei backup, replica o lettori che mantengono riferimenti possono prolungare questo ritardo nei sistemi che conservano generazioni precedenti di segmenti.

Il monitoraggio del disco dovrebbe quindi distinguere tra numero logico di entità, dimensione dei segmenti attivi, spazio temporaneo per la compattazione, segmenti eliminati e capacità libera del filesystem.

La compattazione è una manutenzione in background con un proprio costo in termini di risorse

Leggere i segmenti vecchi, scriverne di nuovi, ricostruire gli indici ed eliminare i file obsoleti consuma CPU, larghezza di banda del disco, memoria e talvolta spazio temporaneo duplicato.

Le metriche di pulizia dei tombstone rendono osservabile la correzione delle eliminazioni come un carico di lavoro di manutenzione con cicli, durate e consumo di risorse propri.

Evitare record obsoleti nell'indice dopo gli aggiornamenti dei file è un requisito a monte: un'eliminazione nell'origine deve prima raggiungere il database vettoriale, affinché la compattazione possa recuperare la rappresentazione obsoleta.

Hub Tecnologico e AI

Altro da leggere

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.