Haszowanie w DBMS: techniki mieszania statycznego i dynamicznego

⚡ Inteligentne podsumowanie

Haszowanie w systemach DBMS to technika, która oblicza lokalizację rekordu na dysku bezpośrednio na podstawie jego klucza, bez konieczności przeszukiwania indeksu. Funkcja haszująca mapuje klucze wyszukiwania na kontenery danych, a haszowanie statyczne lub dynamiczne zarządza rozrostem tych kontenerów.

  • Podstawowa idea: Funkcja skrótu zamienia klucz na adres kontenera, dzięki czemu rekord jest znajdowany w jednym kroku, a nie przez przeglądanie indeksu.
  • 🪣 Kosz danych: Lokalizacja pamięci lub jednostka pamięci, w której umieszczane są rekordy o tym samym haszu.
  • 📌 Hashowanie statyczne: Liczba kontenerów jest stała, więc dany klucz zawsze mapuje się na ten sam adres.
  • 📈 Dynamiczne haszowanie: Koszyki są dodawane i usuwane na żądanie w miarę zmiany objętości danych.
  • 💥 Kolizja: Mapa dwóch kluczyping do tego samego wiadra, rozwiązywane poprzez sondowanie, powtarzanie lub łączenie.
  • 🔍 Najlepszy dla: Dokładne wyszukiwanie według klucza wyszukiwania, w którym hashowanie jest ważniejsze od uporządkowanego indeksowania.
  • 📊 Kompromis: Uporządkowane indeksowanie wygrywa w przypadku zapytań o zakresy; haszowanie wygrywa w przypadku wstawiania stałych i wyszukiwania punktów.

Hashowanie statyczne i dynamiczne w systemach DBMS

Co to jest haszowanie w systemie DBMS?

W systemach DBMS haszowanie to technika bezpośredniego wyszukiwania lokalizacji żądanych danych na dysku bez użycia struktury indeksu. Metoda haszowania służy do indeksowania i pobierania elementów w bazie danych, ponieważ wyszukiwanie konkretnego elementu za pomocą krótszego klucza haszowanego jest szybsze niż wyszukiwanie jego oryginalnej wartości. Dane są przechowywane w postaci bloków danych, których adres jest generowany przez zastosowanie funkcji haszującej; lokalizacja w pamięci, w której przechowywane są te rekordy, nazywana jest… blok danych lub wiadro danych.

Dlaczego potrzebujemy haszowania?

Oto sytuacje w systemie DBMS, w których należy zastosować metodę haszującą:

  • W przypadku ogromnej struktury bazy danych trudno jest przeszukać wszystkie wartości indeksów na wszystkich ich poziomach, a następnie dotrzeć do bloku danych docelowych i pobrać żądane dane.
  • Haszowanie jest używane do indeksowania i pobierania elementów w bazie danych, ponieważ wyszukiwanie konkretnego elementu jest szybsze przy użyciu krótszego klucza haszowanego niż oryginalnej wartości.
  • Haszowanie to doskonała metoda obliczania bezpośredniej lokalizacji rekordu danych na dysku bez korzystania ze struktury indeksu.
  • Jest to również pomocna technika wdrażania słowników.

Ważne terminologie w haszowaniu

Poniżej przedstawiono ważne terminy stosowane w haszowaniu:

  • Pojemnik z danymi: Pojemniki danych to lokalizacje w pamięci, w których przechowywane są rekordy. Są one również znane jako jednostki pamięci.
  • Klawisz: a Klucz DBMS jest atrybutem lub zestawem atrybutów, który pomaga zidentyfikować wiersz (krotkę) w relacji (tabeli).
  • Funkcja skrótu: Mapaping funkcja mapująca cały zestaw kluczy wyszukiwania na adres, pod którym umieszczone są rzeczywiste rekordy.
  • Sondowanie liniowe: Stały odstęp między sondami. W tej metodzie do wprowadzenia nowego rekordu używany jest kolejny dostępny blok danych, zamiast nadpisywać starszy rekord.
  • Badanie kwadratowe: pomaga ustalić nowy adres kontenera poprzez dodanie kolejnych wyników wielomianu kwadratowego do wartości początkowej otrzymanej w oryginalnym obliczeniu.
  • Indeks skrótu: Adres bloku danych. Funkcja skrótu może być prostą funkcją matematyczną lub złożoną.
  • Double Haszowanie: metoda używana w tablicach skrótów do rozwiązywania kolizji poprzez zastosowanie drugiej funkcji skrótu.
  • Przepełnienie wiadra: Stan przepełnienia kontenera nazywa się kolizją. Jest to stan krytyczny dla każdej statycznej funkcji skrótu.

Rodzaje technik mieszania

W systemach DBMS stosuje się dwa główne rodzaje technik haszujących:

  1. Haszowanie statyczne
  2. Dynamiczne haszowanie

Różnica między nimi polega głównie na tym, czy liczba pojemników jest stała, co wyjaśniono w dwóch kolejnych sekcjach.

Haszowanie statyczne

W przypadku haszowania statycznego adres wynikowego kontenera danych zawsze pozostanie taki sam.

Dlatego jeśli wygenerujesz adres, powiedzmy, Identyfikator_ucznia = 10 korzystając z funkcji haszującej moda(3), wynikowym adresem zasobnika będzie zawsze 1. W związku z tym nie zauważysz żadnej zmiany w adresie kontenera.

Dlatego w metodzie haszowania statycznego liczba kontenerów danych w pamięci zawsze pozostaje stała.

Statyczne funkcje skrótu

  • Wstawianie rekordu: Kiedy do tabeli trzeba wstawić nowy rekord, generujesz dla niego adres za pomocą klucza skrótu. Po wygenerowaniu adresu rekord jest zapisywany w tej lokalizacji.
  • Badawczy: gdy trzeba pobrać rekord, ta sama funkcja skrótu jest używana do pobrania adresu kontenera, w którym przechowywane są dane.
  • Usuń rekord: używając funkcji skrótu, najpierw pobierasz rekord, który chcesz usunąć, a następnie usuwasz rekord z tego adresu w pamięci.

Haszowanie statyczne dzieli się dalej na:

  1. Otwórz hashowanie
  2. Zamknięte haszowanie

Otwórz haszowanie

W metodzie otwartego haszowania, zamiast nadpisywać starszy rekord, do wprowadzenia nowego rekordu używany jest kolejny dostępny blok danych. Metoda ta jest również znana jako sondowanie liniowe.

Na przykład A2 to nowy rekord, który chcesz wstawić. Funkcja skrótu generuje adres 222, ale jest on już zajęty przez inną wartość. Dlatego system szuka kolejnego kontenera danych, 501, i przypisuje mu A2.

Jak działa otwarte haszowanie z sondowaniem liniowym
Jak działa Open Hash

Zamknięte haszowanie

W przypadku metody haszowania zamkniętego, gdy kontenery są pełne, dla tego samego skrótu przydzielany jest nowy kontener, a wynik jest łączony po poprzednim.

Dynamiczne haszowanie

Dynamiczne haszowanie oferuje mechanizm, w którym kontenery danych są dodawane i usuwane dynamicznie i na żądanie. W tej metodzie haszowania funkcja haszująca pomaga tworzyć dużą liczbę wartości, a struktura rośnie lub kurczy się wraz z danymi. Dzięki temu jest to idealne rozwiązanie dla tabel, których rozmiaru nie można z góry przewidzieć, gdzie haszowanie statyczne marnowałoby miejsce lub powodowało przepełnienie.

Różnica między indeksowaniem uporządkowanym a haszowaniem

Poniżej przedstawiono najważniejsze różnice między indeksowaniem i haszowaniem:

Parametry Uporządkowane indeksowanie Hashing
Zapisywanie adresu Adresy w pamięci są sortowane według wartości klucza zwanej kluczem podstawowym. Adresy są zawsze generowane przy użyciu funkcji skrótu na wartości klucza.
Wydajność Może się zmniejszać w miarę zwiększania ilości danych, ponieważ dane są przechowywane w postaci posortowanej, a każde wstawienie, usunięcie lub aktualizacja powoduje ich zmianę kolejności. Wydajność jest najlepsza przy ciągłym dodawaniu i usuwaniu danych. W przypadku ogromnej bazy danych utrzymanie pliku skrótu staje się droższe.
Używać do Preferowane w przypadku pobierania zakresów, gdzie dane są pobierane dla konkretnego zakresu. Idealne do pobierania konkretnego rekordu na podstawie klucza wyszukiwania i działa dobrze tylko wtedy, gdy klucz wyszukiwania jest przypisany do funkcji skrótu.
Zarządzanie pamięcią Wiele nieużywanych bloków danych powstaje w wyniku operacji usuwania i aktualizacji i nie można ich zwolnić do ponownego wykorzystania, dlatego wymagana jest regularna konserwacja. W przypadku haszowania statycznego i dynamicznego pamięć jest zawsze zarządzana, a przepełnienie kontenera jest obsługiwane w celu rozszerzenia haszowania statycznego.

Krótko mówiąc, wybierz uporządkowane indeksowanie do zapytań zakresowych i haszowania w celu dokładnego dopasowania klucza.

Co to jest kolizja?

Kolizja haszowania to stan, w którym wynikowe hasze z dwóch lub więcej elementów w zestawie danych błędnie mapują się na to samo miejsce w tabela mieszania.

Jak radzić sobie z kolizją haszującą

Istnieją dwie techniki, których możesz użyć, aby uniknąć kolizji haszującej:

  1. Powtórzenie: Metoda ta wywołuje drugorzędną funkcję skrótu, która jest stosowana w sposób ciągły, aż do znalezienia pustego slotu, w którym można umieścić rekord.
  2. Łączenie: Metoda łańcuchowa tworzy listę powiązaną elementów, których klucze mają tę samą wartość skrótu. Ta metoda wymaga dodatkowego pola łączącego na każdej pozycji w tabeli.

FAQ

Haszowanie statyczne utrzymuje stałą liczbę kontenerów, więc może dojść do ich przepełnienia wraz ze wzrostem ilości danych. Haszowanie dynamiczne dodaje i usuwa kontenery na żądanie, dzięki czemu dostosowuje się do zmieniającego się rozmiaru danych bez konieczności pełnej przebudowy.

W przypadku zapytań zakresowych. Haszowanie rozrzuca klucze po kontenerach, więc zapytanie typu „między” lub „większe niż” nie może ich przeszukać w kolejności. Uporządkowany indeks utrzymuje klucze posortowane i stanowi lepsze dopasowanie.

Pojemnik przepełnia się, gdy hashuje się do niego więcej rekordów, niż jest w stanie pomieścić. W hashowaniu statycznym jest to częste zjawisko wraz ze wzrostem ilości danych i jest obsługiwane przez adresowanie otwarte, łączenie łańcuchowe lub pojemniki przepełnienia.

Systemy AI wykorzystują haszowanie do szybkiego wyszukiwania cech oraz do sztuczki haszowania, która mapuje kategorie o wysokiej kardynalności na stały wektor. Haszowanie podobieństwa pozwala również efektywnie grupować rekordy niemal zduplikowane.

Ponowne hashowanie znajduje kolejny wolny slot w tej samej tabeli za pomocą drugiej funkcji. Łańcuchowanie utrzymuje kolidujące rekordy na liście powiązanej dołączonej do kontenera, więc sama tabela nigdy nie wypełnia slotu dwa razy.

Podsumuj ten post następująco: