Salvatore Sanfilippo (antirez) torna ad approfondire le sue ricerche sul tema delle HNSW all’interno di Redis. In un post intitolato Scaling HNSWs, pubblicato ieri sul suo blog, l’autore torna sul lavoro svolto nell’ultimo anno implementando la ricerca vettoriale tramite HNSW (Hierarchical Navigable Small World) nel contesto dei Vector Sets di Redis. L’obiettivo? Garantire un’esperienza Redis‑style in termini di latenza e performance, mitigando le criticità delle HNSW, come l’elevato consumo di memoria e l’inserimento lento dei dati.
Memory e quantizzazione: efficienza senza sacrifici
Un nodo HNSW può essere paragonato a un grafico multilivello ricco di puntatori e vettori float, una combinazione perfetta per alzare i consumi. Antirez spiega che le quantizzazioni su 8 bit (int8) riducono drasticamente il footprint: 4× in meno memoria rispetto ai float32, con performance quasi identiche nei casi reali. Redis adotta questa quantizzazione come default, preferendo un compromesso ottimale tra spazio e accuratezza.
Threading intelligente e località per accelerare il throughput
Le HNSW sono intrinsecamente lente, soprattutto in operazioni di ricerca. Antirez contravviene alla filosofia single‑thread di Redis introducendo un sistema di threading controllato: le ricerche concorrenti si gestiscono su thread diversi, e vengono separati due step di inserimento—una prima fase di raccolta candidati e una commit finale che richiede lock minimo.
Questo design permette di raggiungere throughput dell’ordine di decine di migliaia di VSIM al secondo su hardware.
Delete sicuro e recupero memoria intelligente
La cancellazione di nodi in HNSW è nota per non restituire facilmente memoria—molti sistemi si affidano a tombstone. In Redis, invece, antirez impone link bidirezionali tra i nodi e, al momento della cancellazione, riannoda i vicini residui usando una matrice di distanze e una strategia greedy per mantenere la qualità del grafo. Il risultato: performance preservate anche dopo la cancellazione massiccia di nodi.
Scalabilità orizzontale sui cluster Redis
Mostrando il valore dei Vector Sets come vera struttura dati (non solo un indice), antirez dimostra come sia possibile distribuire vettori su più istanze Redis.
Le query VSIM parallele su segmenti diversi possono essere unite client-side, consentendo di scalare “hundreds of millions” di vettori spalmati su cluster Redis.
Caricamento rapido da persistenza
I tradizionali rebuild delle HNSW da dump (RDB) erano estremamente lenti. La soluzione è la serializzazione del grafo così com’è: salvare nodi e link, poi ricostruirli rapidamente in memoria. Questo approccio garantisce un caricamento fino a 100× più veloce.
Redis 8 e il nuovo paradigma Vector Sets
Queste innovazioni su HNSW sono state infuse nella release di Redis 8, che introduce i Vector Sets come nuovo tipo nativo. A differenza degli indici tradizionali, i Vector Sets sono strutture dati native, con API semplici (VADD, VSIM, VREM) e orientate alla composibilità e flessibilità.
Il modello ha radici profonde nella filosofia Redis di favorire data structure intelligenti piuttosto che layer magici.
Riassumendo, le tecniche di scaling di antirez si basano su quattro leve chiave: quantizzazione per ridurre il footprint, threading per aumentare il throughput, gestione attiva delle cancellazioni per mantenere integrità e performance, e serializzazione efficiente per accelerare il caricamento da disco. Il risultato è un framework svincolato da AI puro: i Vector Sets sono utili anche in scenari non AI, come fingerprinting o filtraggio rapido di elementi simili.
La strada percorsa da antirez è un invito alla riflessione: l’innovazione spesso valorizza strutture trasparenti e componibili, più che incapsulare complessità. I Vector Sets rappresentano un salto evolutivo, già consolidato in Redis 8, ma ricco di implicazioni ancora tutte da esplorare.