Co sprawia, że ​​kolumnowe bazy danych są odpowiednie do analizy danych?


23

Jakie są zalety kolumnowych magazynów danych, które czynią je bardziej odpowiednimi do analizy danych i analizy?

Odpowiedzi:


27

Baza danych zorientowana na kolumny (= magazyn danych kolumnowych) przechowuje dane z tabeli kolumna po kolumnie na dysku, natomiast zorientowana wierszowo baza danych przechowuje dane tabeli wiersz po rzędzie.

Istnieją dwie główne zalety korzystania z bazy danych zorientowanej na kolumny w porównaniu z bazą danych zorientowaną na wiersze. Pierwsza zaleta dotyczy ilości danych, które należy odczytać na wypadek, gdybyśmy wykonali operację tylko na kilku funkcjach. Rozważ proste zapytanie:

SELECT correlation(feature2, feature5)
FROM records

Tradycyjny moduł wykonujący czytałby całą tabelę (tj. Wszystkie funkcje):

wprowadź opis zdjęcia tutaj

Zamiast tego, stosując nasze podejście oparte na kolumnach, musimy po prostu przeczytać kolumny, które są zainteresowane:

wprowadź opis zdjęcia tutaj

Drugą zaletą, która jest również bardzo ważna w przypadku dużych baz danych, jest to, że pamięć oparta na kolumnach umożliwia lepszą kompresję, ponieważ dane w jednej konkretnej kolumnie są rzeczywiście jednorodne niż we wszystkich kolumnach.

Główną wadą podejścia zorientowanego na kolumny jest to, że manipulowanie (wyszukiwanie, aktualizacja lub usuwanie) cały dany wiersz jest nieefektywne. Jednak sytuacja powinna występować rzadko w bazach danych do analiz („magazynowanie”), co oznacza, że ​​większość operacji jest tylko do odczytu, rzadko odczytuje wiele atrybutów w tej samej tabeli, a zapisy są tylko dopisywaniami.

Niektóre RDMS oferują opcję silnika pamięci masowej zorientowanego na kolumny. Na przykład PostgreSQL natywnie nie ma opcji przechowywania tabel w sposób oparty na kolumnach, ale Greenplum stworzył tabelę o zamkniętym źródle (DBMS2, 2009). Co ciekawe, Greenplum stoi także za biblioteką open source do skalowalnej analizy w bazie danych, MADlib (Hellerstein i in., 2012), co nie jest przypadkiem. Niedawno CitusDB, startup pracujący na szybkiej, analitycznej bazie danych, wydał własne rozszerzenie sklepu kolumnowego typu open source dla PostgreSQL, CSTORE (Miller, 2014). System Google do uczenia maszynowego na dużą skalę Sibyl wykorzystuje również format danych zorientowany na kolumny (Chandra i in., 2010). Trend ten odzwierciedla rosnące zainteresowanie wokół pamięci masowej zorientowanej na kolumny do analizy na dużą skalę. Stonebraker i in. (2005) dodatkowo omawiają zalety zorientowanego na kolumny DBMS.

Dwa konkretne przypadki użycia: w jaki sposób przechowywana jest większość zbiorów danych do uczenia maszynowego na dużą skalę?

(większość odpowiedzi pochodzi z Załącznika C do: BeatDB : Kompleksowe podejście do odsłonięcia informacji o ogromnych zbiorach danych sygnałów. Franck Dernoncourt, SM, praca dyplomowa, Departament MIT EECS )


1
To niesamowita odpowiedź. Pięknie wyjaśnione. Dziękuję Ci.
Dawny33

1
To bardzo dobrze napisana odpowiedź, a diagramy są bardzo pomocne. Doceniamy również referencje.
Shawn Mehan

Teraz rozważ k-średnie grupowanie lub SVM z układem kolumnowym ...
anony-Mousse

11

To zależy od tego , co robisz.

Sklepy z kolumnami mają dwie kluczowe zalety:

  • całe kolumny można pominąć
  • kompresja długości przebiegu działa lepiej na kolumnach (dla niektórych typów danych; w szczególności z kilkoma odrębnymi wartościami)

Mają jednak również wady:

  • wiele algorytmów potrzebuje wszystkich kolumn i zapisuje tylko na raz (np. k-średnie) lub może nawet wymagać obliczenia macierzy odległości parami
  • techniki kompresji działają dobrze tylko w przypadku rzadkich typów danych i czynników, ale nie w przypadku danych ciągłych o podwójnej wartości
  • dodatki w sklepach kolumnowych są drogie, więc nie nadaje się idealnie do przesyłania strumieniowego / zmiany danych

Przechowywanie kolumnowe jest bardzo popularne w przypadku OLAP, czyli „głupich analiz” (Michael Stonebraker) i oczywiście w przypadku przetwarzania wstępnego, w którym rzeczywiście możesz być zainteresowany odrzuceniem całych kolumn (ale najpierw musisz mieć ustrukturyzowane dane - nie przechowujesz JSON w kolumnie format). Ponieważ układ kolumnowy jest naprawdę fajny np. Do zliczania liczby jabłek, które sprzedałeś w zeszłym tygodniu.

W przypadku wielu zastosowań naukowych / danych, właściwym rozwiązaniem są bazy tablicowe (plus oczywiście nieustrukturyzowane dane wejściowe). Np. SciDB i RasDaMan.

W wielu przypadkach (np. Głębokie uczenie się) macierze i tablice są potrzebnymi typami danych, a nie kolumnami. Oczywiście MapReduce itp. Nadal może być przydatny w przetwarzaniu wstępnym. Może nawet dane kolumnowe (ale baza danych macierzy zwykle obsługuje również kompresję podobną do kolumny).


3

Nie korzystałem z kolumnowej bazy danych, ale użyłem otwartego formatu kolumnowego o nazwie Parquet i myślę, że korzyści są prawdopodobnie takie same - szybsze przetwarzanie danych, gdy potrzebujesz tylko zapytania do małego podzbioru dużego Liczba kolumn. Miałem zapytanie uruchomione na około 50 terabajtach plików Avro (format pliku zorientowany na wiersze) z 673 kolumnami, co zajęło około półtorej godziny w 140-węzłowym klastrze Hadoop. W przypadku Parkietu to samo zapytanie zajęło około 22 minut, ponieważ potrzebowałem tylko 5 kolumn.

Jeśli miałeś małą liczbę kolumn lub korzystałeś z dużej części swoich kolumn, nie sądzę, aby kolumna bazy danych miałaby istotną różnicę w porównaniu z kolumną zorientowaną na wiersz, ponieważ nadal będziesz musiał zasadniczo przeskanować wszystkie swoje dane. Wierzę, że w kolumnowych bazach danych kolumny są przechowywane osobno, podczas gdy w bazach zorientowanych na wiersze są przechowywane osobno. Twoje zapytanie będzie szybsze za każdym razem, gdy będziesz w stanie odczytać mniej danych z dysku.

Ten link wyjaśnia więcej szczegółów.


0

Uwaga: to moje pytanie i jestem naprawdę wdzięczny za wspaniałe odpowiedzi tutaj, które pomogły mi zrozumieć tę koncepcję.

Wyjaśniłbym więc tę koncepcję w sposób, który zrozumiałem:

Zasadniczo dane w bazach danych są przechowywane w pamięci w następujących formatach:

Rozważ ten punkt odniesienia:

           X1         X2
1   0.7091409 -1.4061361
2  -1.1334614 -0.1973846
3   2.3343391 -0.4385071

W relacyjnym magazynie opartym na wierszach jest przechowywany w następujący sposób:

1, 0.7091409, -1.4061361, 2, -1.1334614, -0.1973846, 3, 2.3343391, -0.4385071 

w formie wierszy.

W magazynie kolumnowym byłby przechowywany w następujący sposób:

1, 2, 3, 0.7091409 ,-1.1334614, 2.3343391, -1.4061361, -0.1973846, -0.4385071

w formie kolumn.

Co to znaczy?

Oznacza to, że wstawianie (i aktualizacja) i usuwanie są szybkie w magazynie kolumn opartym na wierszach, ponieważ jest to tylko usunięcie kilku ostatnich wartości lub kilku pierwszych wartości. Jednak w sklepach kolumnowych tak nie jest, ponieważ wartość w każdym magazynie bloków należy usunąć.

Jednak gdy istnieje potrzeba agregacji kolumnowych i operacji, magazyny kolumnowe mają przewagę nad swoimi odpowiednikami opartymi na wierszach, ponieważ są one przechowywane w kolumnach, w wyniku czego dostęp do poszczególnych kolumn jest bardzo łatwy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.