Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa

Darmowa diagnoza laptopa

Dojazd do klienta bezpłatnie

Dojazd do klienta bezpłatnie

Laptopy zastępcze bezpłatnie

Laptopy zastępcze bezpłatnie

Odbiór i zwrot sprzętu bezpłatnie

Odbiór i zwrot sprzętu bezpłatnie

Columnstore compression

Termin Definicja
Columnstore compression

Columnstore compression to mechanizm kompresji danych stosowany w indeksach kolumnowych, znacząco redukujący ich rozmiar.

Na czym polega kompresja columnstore

Columnstore compression to sposób organizacji i kompresowania danych przechowywanych w indeksie kolumnowym. W klasycznym układzie wierszowym wartości należące do jednego rekordu są zapisane obok siebie. W strukturze kolumnowej dane są natomiast grupowane według kolumn, dzięki czemu wartości tego samego atrybutu znajdują się w jednym obszarze. Taki układ sprzyja kompresji, ponieważ pojedyncza kolumna często zawiera wiele powtarzających się, podobnych albo uporządkowanych wartości.

Kompresja nie polega wyłącznie na zmniejszeniu liczby bajtów zajmowanych przez plik. Mechanizm wpływa również na sposób odczytu danych. Zapytanie analityczne, które potrzebuje tylko kilku kolumn z dużej tabeli, może odczytać ograniczony zestaw segmentów zamiast pobierać całe wiersze. Mniejsza ilość danych do odczytania i przesłania z pamięci masowej do pamięci operacyjnej może ograniczyć koszt operacji wejścia-wyjścia.

Segmenty, słowniki i powtarzalność wartości

W indeksach kolumnowych dane są zwykle dzielone na grupy określane jako segmenty lub grupy wierszy. Każdy segment przechowuje wartości dla określonego zakresu rekordów, osobno dla poszczególnych kolumn. Podczas kompresji silnik może wykorzystywać słownik wartości, w którym każdej powtarzającej się wartości przypisuje się krótszy identyfikator. Zamiast wielokrotnie zapisywać pełny tekst lub pełną reprezentację wartości, segment przechowuje odwołania do słownika.

Stosowane są także metody dopasowane do charakteru danych, między innymi kodowanie wartości powtarzalnych, kodowanie różnic między kolejnymi wartościami oraz reprezentacje bitowe. Skuteczność zależy od typu kolumny, liczby unikatowych wartości, rozkładu danych i kolejności rekordów w segmencie. Kolumna zawierająca statusy, kategorie lub inne często powtarzające się wartości może kompresować się znacznie lepiej niż kolumna zawierająca niemal wyłącznie unikatowe identyfikatory. Dane uporządkowane według czasu albo klucza analitycznego mogą dodatkowo ułatwiać ograniczanie zakresu odczytu.

Wpływ kompresji na zapytania i modyfikacje

Columnstore compression jest szczególnie użyteczna przy zapytaniach skanujących duże zbiory danych, agregujących wartości i filtrujących po wybranych kolumnach. Operacje takie jak sumowanie, grupowanie lub obliczanie statystyk mogą przetwarzać skompresowane dane, a w niektórych implementacjach korzystać również z wektorowego wykonywania instrukcji. Odczyt tylko potrzebnych kolumn zmniejsza presję na pamięć i przepustowość pamięci masowej. Nie oznacza to jednak, że każde zapytanie automatycznie wykona się szybciej. Zapytania pobierające pojedyncze rekordy po kluczu lub wymagające częstego odtwarzania pełnych wierszy mogą lepiej pasować do indeksów wierszowych.

Na zachowanie kompresji wpływają także operacje zapisu. Dopisywanie dużych, odpowiednio przygotowanych partii danych może pozwolić na utworzenie dobrze skompresowanych segmentów. Częste pojedyncze inserty, aktualizacje i usuwanie rekordów mogą prowadzić do powstania obszarów tymczasowych albo mniej optymalnie skompresowanych. Silnik bazy danych może później porządkować te dane w ramach procesów konserwacyjnych, lecz takie operacje zużywają zasoby procesora, pamięci i pamięci masowej. Dlatego przy ocenie columnstore compression trzeba analizować nie tylko rozmiar indeksu, lecz także wzorzec zapisu, plan zapytań oraz koszt utrzymania struktury.

Ocena działania i diagnostyka struktury kolumnowej

Sprawdzanie columnstore compression powinno obejmować porównanie rozmiaru danych przed kompresją i po niej, stopnia wypełnienia segmentów, liczby wartości unikatowych oraz udziału danych znajdujących się poza główną strukturą kolumnową. Istotne jest również ustalenie, czy zapytania rzeczywiście korzystają z indeksu kolumnowego i czy odczytują tylko kolumny potrzebne do wykonania operacji. Sam fakt istnienia indeksu columnstore nie potwierdza jeszcze jego przydatności dla konkretnego obciążenia.

W diagnostyce analizuje się plany wykonania, czas zapytań, liczbę odczytów logicznych i fizycznych, zużycie pamięci oraz obciążenie procesora. Należy odróżnić problem kompresji od problemu modelu danych, nieodpowiedniego filtrowania albo nieaktualnych statystyk. Jeżeli segmenty mają słabą kompresowalność, przyczyną może być wysoka różnorodność wartości, przypadkowa kolejność danych lub częste modyfikacje. Przed zmianą indeksów warto wykonać pomiary na reprezentatywnym zbiorze i sprawdzić, czy uzyskane zmniejszenie rozmiaru nie powoduje nadmiernego kosztu podczas zapisu oraz przebudowy struktury.