W jaki sposób kompaktowanie bazy danych wektorowych odzyskuje miejsce po usunięciu dokumentu?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Kompaktowanie bazy danych wektorów odzyskuje usunięte miejsce, przepisując aktywne rekordy do uporządkowanych segmentów i wycofując starsze pliki segmentów, które nadal zawierają usunięte wektory.

Usunięcie dokumentu domowego z lokalnej biblioteki RAG może sprawić, że natychmiast zniknie on z wyników wyszukiwania, podczas gdy zajętość dysku prawie się nie zmieni. Niekoniecznie oznacza to, że usuwanie się nie powiodło. Wiele baz danych wektorów oddziela logiczną widoczność od fizycznego czyszczenia danych, dzięki czemu zapisy wykonywane na pierwszym planie pozostają szybkie, a czytelnicy mogą nadal korzystać z niezmiennych segmentów lub segmentów zorientowanych na dopisywanie danych. Kompaktowanie to późniejszy proces konserwacyjny, który przekształca te logiczne usunięcia w mniejszą fizyczną reprezentację.

Usunięcie zwykle najpierw zmienia widoczność, zanim przepisze zapisane dane

Fizyczna edycja dużego pliku indeksu przy każdym usunięciu powodowałaby kosztowne losowe zapisy i złożoną obsługę współbieżności. Wiele silników zamiast tego zapisuje znacznik usunięcia, tombstone lub dziennik usunięć, który informuje wyszukiwanie, aby pominęło dany wektor.

Tombstone’y HNSW sprawiają, że usunięte obiekty przestają kwalifikować się do wyszukiwania w grafie, zanim konserwacja w tle fizycznie usunie cały ich stan indeksu.

Rezultat widoczny dla użytkownika i rezultat na poziomie dysku pojawiają się więc w różnym czasie. Rekord może przestać pojawiać się w wynikach wyszukiwania najbliższych sąsiadów, podczas gdy jego stare dane nadal pozostają w istniejącym segmencie.

To rozdzielenie daje bazie danych także czas na skoordynowanie równoczesnych zapytań, replik, migawek i zasad przechowywania danych przed zniszczeniem historycznych struktur pamięci masowej.

Usunięte rekordy gromadzą się w segmentach do momentu osiągnięcia progu czyszczenia

Segment może zawierać zarówno aktywne wektory, jak i rekordy, które nie kwalifikują się już do wyszukiwania. W miarę przybywania aktualizacji i usunięć maleje stosunek użytecznych danych do danych przestarzałych.

Próg usuniętych wektorów może opóźnić kosztowne czyszczenie do momentu, gdy zgromadzi się wystarczająco dużo przestarzałych punktów, aby przepisanie segmentu było opłacalne.

Oczekiwanie na osiągnięcie progu pozwala rozłożyć koszt konserwacji. Przepisanie segmentu w celu odzyskania miejsca po jednym małym usuniętym rekordzie kosztowałoby więcej operacji wejścia-wyjścia niż wynosiłaby oszczędność miejsca. Na domowym serwerze, na którym często przebudowuje się indeks, widoczna ilość przestarzałej pamięci masowej może więc przez pewien czas rosnąć, zanim optymalizator uzna, że czyszczenie jest opłacalne.

Kompaktowanie kopiuje aktywne dane do nowych lub scalonych segmentów

Po rozpoczęciu konserwacji baza danych odczytuje kwalifikujące się segmenty źródłowe, pomija logicznie usunięte rekordy i zapisuje zachowane wektory oraz dane dodatkowe w nowej, zwartej reprezentacji.

kompaktowanie jako scalanie segmentów i czyszczenie usuniętych danych przepisuje zachowane dane do uporządkowanych segmentów, pomijając rekordy, które zostały już logicznie usunięte lub wygasły.

W tym samym czasie można scalać małe segmenty, co zmniejsza liczbę oddzielnych struktur, które musi przeszukiwać wyszukiwarka. Nowy segment odzwierciedla aktywny stan danych, zamiast przenosić wszystkie historyczne modyfikacje.

Takie przepisywanie może tymczasowo wymagać dodatkowego wolnego miejsca, ponieważ stare i nowe segmenty mogą współistnieć do czasu zweryfikowania zamiennika i jego aktywacji.

Indeksy są przebudowywane wokół zachowanego zbioru wektorów

Usunięcie danych wektorowych to tylko część czyszczenia. Łącza grafu, struktury kwantyzowane, filtry i metadane segmentów mogą odwoływać się do rekordów, które nie należą już do aktywnego segmentu.

Proces kompaktowania, który przebudowuje indeksy podczas optymalizacji, zapewnia zgodność grafu i pomocniczych struktur wyszukiwania z zachowanym zbiorem wektorów, zamiast pozostawiać odwołania do usuniętych punktów.

W przypadku HNSW może to zmienić topologię grafu, nawet gdy pozostałe wektory się nie zmieniły. Dlatego kompaktowanie może wpływać na przechodzenie po grafie w celu znajdowania przybliżonych sąsiadów, a jednocześnie zachowywać ten sam logiczny zbiór danych. Mechanizm opisany w tym artykule dotyczy cyklu życia pamięci masowej: przestarzałe rekordy są wykluczane z przepisanego indeksu, aby ich fizyczny ślad mógł ostatecznie zniknąć.

Stare segmenty muszą zostać wycofane, zanim można zwolnić zajmowane przez nie miejsce

Po tym, jak skompaktowany segment stanie się aktywną reprezentacją, stare segmenty są oznaczane jako przestarzałe lub usuwane. Bazowe pliki mogą jednak nadal czekać na proces wyrzucania nieużywanych danych lub upłynięcie okresu przechowywania, zanim rzeczywiste bloki dysku zostaną zwolnione.

Gdy po kompaktowaniu wyrzucanie nieużywanych danych usuwa porzucone pliki segmentów, mogą one tymczasowo pozostać po aktywowaniu skompaktowanego zamiennika, dlatego miejsce w systemie plików może zostać zwolnione później niż zmieni się widoczność danych w zapytaniach.

Migawki, przechowywanie kopii zapasowych, replikacja lub czytelnicy utrzymujący odwołania mogą wydłużyć to opóźnienie w systemach, które zachowują starsze generacje segmentów.

Monitorowanie dysku powinno zatem rozróżniać logiczną liczbę encji, rozmiar aktywnych segmentów, tymczasowe miejsce potrzebne do kompaktowania, usunięte segmenty oraz wolne miejsce w systemie plików.

Kompaktowanie to konserwacja w tle, która wymaga własnych zasobów

Odczytywanie starych segmentów, zapisywanie nowych, przebudowywanie indeksów i usuwanie przestarzałych plików zużywa procesor, przepustowość dysku, pamięć, a czasem także tymczasowe dodatkowe miejsce na dane.

metryki czyszczenia tombstone’ów pozwalają obserwować naprawę po usunięciach jako proces konserwacyjny z własnymi cyklami, czasem trwania i zużyciem zasobów.

Unikanie przestarzałych rekordów indeksu po aktualizacji plików jest wymaganiem na wcześniejszym etapie: usunięcie ze źródła musi najpierw dotrzeć do bazy danych wektorów, zanim kompaktowanie będzie mogło odzyskać miejsce zajmowane przez przestarzałą reprezentację.

Centrum Technologii i Sztucznej Inteligencji

Więcej do przeczytania

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.