Die Komprimierung einer Vektordatenbank gibt gelöschten Speicherplatz frei, indem sie aktive Datensätze in saubere Segmente neu schreibt und ältere Segmentdateien entfernt, die noch gelöschte Vektoren enthalten.
Wenn ein Haushaltsdokument aus einer lokalen RAG-Bibliothek gelöscht wird, kann es sofort aus der Suche verschwinden, während sich die Festplattennutzung kaum verändert. Das bedeutet nicht unbedingt, dass das Löschen fehlgeschlagen ist. Viele Vektordatenbanken trennen die logische Sichtbarkeit von der physischen Speicherbereinigung, damit Schreibvorgänge im Vordergrund schnell bleiben und Leser weiterhin unveränderliche oder auf Anhängen ausgelegte Segmente verwenden können. Die Komprimierung ist der nachgelagerte Wartungsvorgang, der diese logischen Löschungen in eine kleinere physische Darstellung überführt.
Ein Löschvorgang ändert zunächst meist die Sichtbarkeit, bevor gespeicherte Bytes neu geschrieben werden
Eine große Indexdatei bei jedem Löschvorgang physisch zu bearbeiten, würde teure zufällige Schreibvorgänge und eine komplexe Nebenläufigkeit verursachen. Viele Engines protokollieren stattdessen eine Löschmarkierung, einen Tombstone oder ein Löschprotokoll, das der Suche mitteilt, den Vektor zu ignorieren.
HNSW-Tombstones sorgen dafür, dass gelöschte Objekte von der Graphsuche ausgeschlossen werden, bevor die Hintergrundwartung ihren gesamten Indexzustand physisch entfernt.
Das für den Nutzer sichtbare Ergebnis und das Ergebnis auf Festplattenebene treten daher zu unterschiedlichen Zeitpunkten ein. Der Datensatz kann aus den Ergebnissen der Ähnlichkeitssuche verschwinden, während seine alten Bytes in einem bestehenden Segment verbleiben.
Diese Trennung gibt der Datenbank außerdem Zeit, gleichzeitige Abfragen, Replikate, Snapshots und Aufbewahrungsregeln zu koordinieren, bevor historische Speicherstrukturen zerstört werden.
Gelöschte Datensätze sammeln sich in Segmenten an, bis ein Bereinigungsschwellenwert erreicht ist
Ein Segment kann sowohl aktive Vektoren als auch Datensätze enthalten, die nicht mehr für die Suche zugelassen sind. Wenn sich Aktualisierungen und Löschungen ansammeln, sinkt das Verhältnis von nutzbaren zu veralteten Daten.
Ein Schwellenwert für gelöschte Vektoren kann eine aufwendige Bereinigung verzögern, bis sich genügend veraltete Punkte angesammelt haben, damit sich das Neuschreiben eines Segments lohnt.
Das Warten auf einen Schwellenwert verteilt den Wartungsaufwand. Ein Segment neu zu schreiben, um einen einzigen kleinen gelöschten Datensatz zurückzugewinnen, würde mehr E/A verursachen, als Speicherplatz eingespart wird. Auf einem Heimserver mit häufigem Neuindizieren kann die sichtbar belegte Menge veralteten physischen Speichers daher eine Zeit lang ansteigen, bevor der Optimierer die Bereinigung für sinnvoll hält.
Bei der Komprimierung werden aktive Daten in neue oder zusammengeführte Segmente kopiert
Sobald die Wartung beginnt, liest die Datenbank geeignete Quellsegmente, überspringt logisch gelöschte Datensätze und schreibt die verbleibenden Vektoren und Nutzdaten in eine neue kompakte Darstellung.
Die Komprimierung als Zusammenführen von Segmenten und Bereinigen gelöschter Daten schreibt die verbleibenden Daten in sauberere Segmente neu und lässt Datensätze aus, die bereits logisch gelöscht oder abgelaufen sind.
Kleine Segmente können gleichzeitig zusammengeführt werden, wodurch sich die Anzahl der separaten Strukturen verringert, die die Suche prüfen muss. Das neue Segment stellt den aktiven Zustand dar, anstatt jede historische Änderung weiterzuführen.
Dieses Neuschreiben kann vorübergehend zusätzlichen freien Speicherplatz erfordern, da alte und neue Segmente koexistieren können, bis der Ersatz überprüft und aktiviert wurde.
Indizes werden rund um die verbleibende Vektormenge neu erstellt
Das Entfernen von Bytes der Vektordaten ist nur ein Teil der Bereinigung. Graphverknüpfungen, quantisierte Strukturen, Filter und Segmentmetadaten können auf Datensätze verweisen, die nicht mehr zum aktiven Segment gehören.
Ein Komprimierungspfad, der Indizes während der Optimierung neu erstellt, stellt sicher, dass Graph- und zusätzliche Suchstrukturen der verbleibenden Vektormenge entsprechen, anstatt Verweise auf entfernte Punkte beizubehalten.
Bei HNSW kann sich dadurch die Topologie des Graphen ändern, selbst wenn die verbleibenden Vektoren unverändert sind. Deshalb kann die Komprimierung die Suche nach ungefähren Nachbarn beeinflussen und dennoch denselben logischen Datensatz bewahren. Der in diesem Artikel beschriebene Mechanismus betrifft den Speicherlebenszyklus: Veraltete Datensätze werden aus dem neu geschriebenen Index ausgeschlossen, sodass ihr physischer Speicherbedarf schließlich verschwinden kann.
Alte Segmente müssen außer Betrieb genommen werden, bevor ihr Speicher freigegeben werden kann
Nachdem das komprimierte Segment zur aktiven Darstellung geworden ist, werden alte Segmente als veraltet markiert oder verworfen. Die zugrunde liegenden Dateien warten möglicherweise noch eine Zeit lang auf die Speicherbereinigung oder eine Aufbewahrungsfrist, bevor die tatsächlichen Festplattenblöcke freigegeben werden.
Wenn die Speicherbereinigung auf die Komprimierung folgt, können verworfene Segmentdateien vorübergehend bestehen bleiben, nachdem der komprimierte Ersatz aktiv ist. Der Speicherplatz im Dateisystem wird dann möglicherweise später freigegeben, als sich die Sichtbarkeit in der Abfrage ändert.
Snapshots, die Aufbewahrung von Sicherungen, Replikation oder Leser, die noch Verweise halten, können diese Verzögerung in Systemen verlängern, die ältere Segmentgenerationen bewahren.
Bei der Überwachung des Speicherplatzes sollte daher zwischen der logischen Anzahl von Entitäten, der Größe aktiver Segmente, dem temporären Speicherplatz für die Komprimierung, verworfenen Segmenten und der freien Kapazität des Dateisystems unterschieden werden.
Komprimierung ist eine Hintergrundwartung mit eigenem Ressourcenbedarf
Das Lesen alter Segmente, das Schreiben neuer Segmente, das Neuerstellen von Indizes und das Löschen veralteter Dateien verbraucht CPU, Festplattenbandbreite, Arbeitsspeicher und manchmal zusätzlichen temporären Speicherplatz.
Metriken zur Tombstone-Bereinigung machen die Behebung von Löschungen als Wartungsaufgabe sichtbar, einschließlich eigener Zyklen, Laufzeiten und Ressourcenverbrauch.
Das Vermeiden von veralteten Indexdatensätzen nach Dateiaktualisierungen ist eine Voraussetzung auf vorgelagerter Ebene: Eine Löschung in der Quelle muss zunächst die Vektordatenbank erreichen, bevor die Komprimierung die veraltete Darstellung zurückgewinnen kann.
Tech- & KI-Zentrum
Mehr zum Lesen

Was ist der Plex-Zustand, und welche Teile müssen erhalten bleiben?
Der persistente Plex-Zustand umfasst die Informationen, die das Servererlebnis über Neustarts und Neuaufbauten hinweg erhalten; Medien und temporäre Transkodierungsdaten erfüllen separate Aufgaben.

Wie handhabt Plex die Authentifizierung bei lokalen und Remote-Sitzungen?
Die Plex-Authentifizierung beginnt mit der Identität des Servers und des Kontos. Anschließend bestimmen lokale oder entfernte Netzwerkpfade die Erreichbarkeit und das Verhalten der sicheren...

Warum kann die Plex-Suche langsamer werden, wenn die Bibliotheksdaten wachsen?
Das Wachstum der Bibliothek allein ist nicht die Diagnose. Prüfe zunächst die Abfragestruktur, Indizes, den Cache-Zustand, die Speicherlatenz und die Schreibaktivität, bevor du die...

