Ogólnie rzecz biorąc, bazy danych przechowują dane w formacie wiersza i używają SQL jako języka zapytań, aby uzyskać do nich dostęp, ale ta metoda przechowywania nie zawsze jest najlepsza pod względem wydajności, zależy to od samego obciążenia. Jeśli chcesz uzyskać dane statystyczne, prawdopodobnie powinieneś użyć innego rodzaju silnika do przechowywania bazy danych.
W tym blogu zobaczymy, czym jest Columnar Storage, a dokładniej, czym jest MariaDB ColumnStore i jak ją zainstalować, aby móc przetwarzać duże dane w bardziej wydajny sposób dla celów analitycznych.
Przechowywanie kolumnowe
Przechowywanie kolumnowe to rodzaj silnika bazy danych, który przechowuje dane przy użyciu modelu zorientowanego na kolumny.
Na przykład we wspólnej relacyjnej bazie danych moglibyśmy mieć taką tabelę:
id | imię | nazwisko | wiek |
1001 | Oliwer | Kowalski | 23 |
1002 | Harry | Jones | 65 |
1003 | George | Williams | 30 |
1004 | Jack | Taylor | 41 |
W tym miejscu do gry wkracza silnik Columnar Storage. Zamiast przechowywać dane w wierszach, dane są przechowywane w kolumnach. Tak więc, jeśli chcesz znać średni wiek, lepiej będzie z niego skorzystać, ponieważ będziesz mieć taką strukturę:
id | imię | id | nazwisko | id | wiek | ||
1001 | Oliwer | 1001 | Kowalski | 1001 | 23 | ||
1002 | Harry | 1002 | Jones | 1002 | 65 | ||
1003 | George | 1003 | Williams | 1003 | 30 | ||
1004 | Jack | 1004 | Taylor | 1004 | 41 |
z drugiej strony koszt wykonania pojedynczych wstawek jest wyższy niż w przypadku bazy danych zorientowanej na wiersze, i nie jest to najlepsza opcja dla zapytań „SELECT *” lub operacji transakcyjnych, więc możemy powiedzieć, że lepiej pasuje do bazy danych OLAP (Online Analytical Processing) niż do OLTP (Online Transaction Processing).
MariaDB ColumnStore
Jest to kolumnowy mechanizm przechowywania danych, który wykorzystuje masowo równoległą architekturę danych rozproszonych. Jest to osobny plik do pobrania, ale będzie dostępny jako silnik pamięci masowej dla MariaDB Server z MariaDB 10.5.4, który w momencie pisania tego bloga wciąż był w fazie rozwoju.
Zaprojektowano go z myślą o dużych zbiorach danych, wykorzystując zalety pamięci kolumnowej, aby uzyskać doskonałą wydajność z odpowiedzią w czasie rzeczywistym na zapytania analityczne.
Architektura magazynu kolumn MariaDB
Składa się z wielu (lub tylko 1) serwerów MariaDB, działających jako moduły, współpracujących ze sobą. Te moduły obejmują użytkownika, wydajność i pamięć masową.
Moduł użytkownika
Jest to instancja MariaDB Server skonfigurowana do działania jako front-end do ColumnStore.
Moduł użytkownika zarządza i kontroluje działanie zapytań użytkowników końcowych. Gdy klient uruchamia zapytanie, jest ono analizowane i dystrybuowane do co najmniej jednego modułu wydajności w celu przetworzenia zapytania. Moduł użytkownika następnie zbiera wyniki zapytania i składa je w zestaw wyników, aby powrócić do klienta.
Głównym celem modułu użytkownika jest obsługa skalowania współbieżności. Nigdy nie dotyka bezpośrednio plików bazy danych i nie wymaga ich widoczności.
Moduł wydajności
Odpowiada za przechowywanie, pobieranie i zarządzanie danymi, przetwarzanie żądań blokowych dla operacji zapytań oraz za przekazywanie ich z powrotem do modułu lub modułów użytkownika w celu sfinalizowania żądań zapytań. Nie widzi samego zapytania, a jedynie zestaw instrukcji przekazanych mu przez moduł użytkownika.
Moduł wybiera dane z dysku i buforuje je w buforze współdzielonym, który jest częścią serwera, na którym działa.
Mając wiele węzłów Performance Module, mechanizm pulsu zapewnia, że wszystkie węzły są w trybie online i istnieje przejrzyste przełączanie awaryjne w przypadku awarii określonego węzła.
Pamięć
Do przechowywania danych można użyć pamięci lokalnej (moduły wydajności) lub pamięci współdzielonej (SAN).
Gdy tworzysz tabelę w MariaDB ColumnStore, system tworzy co najmniej jeden plik na kolumnę w tabeli. Na przykład tabela utworzona z trzema kolumnami będzie miała minimum trzy oddzielnie adresowalne obiekty logiczne utworzone w sieci SAN lub na dysku lokalnym modułu wydajności.
ColumnStore optymalizuje swoją strategię kompresji pod kątem wydajności odczytu z dysku. Jest dostrojony, aby przyspieszyć tempo dekompresji, maksymalizując korzyści związane z wydajnością podczas odczytu z dysku.
MariaDB ColumnStore używa bufora wersji do przechowywania modyfikowanych bloków dysku, zarządzania wycofywaniem transakcji i obsługi funkcji MVCC (kontrola współbieżności wielu wersji) lub funkcji „odczytu migawki” bazy danych. Dzięki temu może zaoferować spójny widok bazy danych.
Jak działa MariaDB CloumnStore
Teraz zobaczmy, jak MariaDB ColumnStore przetwarza zapytanie użytkownika końcowego, zgodnie z oficjalną dokumentacją MariaDB ColumnStore:
- Klienci wysyłają zapytanie do serwera MariaDB działającego w module użytkownika. Serwer wykonuje operację na tabeli dla wszystkich tabel potrzebnych do spełnienia żądania i uzyskuje początkowy plan wykonania zapytania.
- Korzystając z interfejsu silnika pamięci masowej MariaDB, ColumnStore konwertuje obiekt tabeli serwera na obiekty ColumnStore. Obiekty te są następnie wysyłane do procesów modułu użytkownika.
- Moduł użytkownika konwertuje plan wykonania MariaDB i optymalizuje podane obiekty na plan wykonania ColumnStore. Następnie określa kroki potrzebne do uruchomienia zapytania i kolejność, w jakiej muszą zostać uruchomione.
- Moduł użytkownika konsultuje się następnie z mapą zakresu, aby określić, które moduły wydajności należy skonsultować w celu uzyskania potrzebnych danych, a następnie wykonuje eliminację zakresu, eliminując z listy wszystkie moduły wydajności, które zawierają tylko dane spoza zakresu czego wymaga zapytanie.
- Moduł użytkownika wysyła następnie polecenia do jednego lub więcej modułów wydajności w celu wykonania operacji blokowych we/wy.
- Moduł lub moduły wydajności przeprowadzają filtrowanie predykatów, przetwarzanie łączenia, początkową agregację danych z pamięci lokalnej lub zewnętrznej, a następnie wysyłają dane z powrotem do modułu użytkownika.
- Moduł użytkownika wykonuje ostateczną agregację zestawu wyników i tworzy zestaw wyników dla zapytania.
- Moduł użytkownika / ExeMgr implementuje dowolne obliczenia funkcji okna, a także wszelkie niezbędne sortowanie w zestawie wyników. Następnie zwraca zestaw wyników na serwer.
- Serwer MariaDB wykonuje dowolne funkcje listy wyboru, operacje ORDER BY i LIMIT na zestawie wyników.
- Serwer MariaDB zwraca zestaw wyników do klienta.
Jak zainstalować MariaDB ColumnStore
Teraz zobaczmy, jak go zainstalować. Więcej informacji można znaleźć w oficjalnej dokumentacji MariaDB.
Będziemy używać CentOS 7 jako systemu operacyjnego, ale zamiast tego możesz użyć dowolnego obsługiwanego systemu operacyjnego. Pakiety instalacyjne są dostępne do pobrania tutaj.
Najpierw musisz zainstalować repozytorium dodatkowych pakietów:
$ yum install -y epel-release
Następnie następujące wymagane pakiety:
$ yum install -y boost expect perl perl-DBI openssl zlib snappy libaio perl-DBD-MySQL net-tools wget jemalloc numactl-libs
A teraz pobierzmy najnowszą wersję MariaDB ColumnStore, rozpakuj ją i zainstaluj:
$ wget https://downloads.mariadb.com/ColumnStore/latest/centos/x86_64/7/mariadb-columnstore-1.2.5-1-centos7.x86_64.rpm.tar.gz
$ tar zxf mariadb-columnstore-1.2.5-1-centos7.x86_64.rpm.tar.gz
$ rpm -ivh mariadb-columnstore-1.2.5-1-*.rpm
Po zakończeniu zobaczysz następujący komunikat:
Następny krok to:
If installing on a pm1 node using non-distributed install
/usr/local/mariadb/columnstore/bin/postConfigure
If installing on a pm1 node using distributed install
/usr/local/mariadb/columnstore/bin/postConfigure -d
If installing on a non-pm1 using the non-distributed option:
/usr/local/mariadb/columnstore/bin/columnstore start
Więc w tym przykładzie po prostu uruchommy polecenie:
$ /usr/local/mariadb/columnstore/bin/postConfigure
Teraz zapyta Cię o kilka informacji na temat instalacji:
This is the MariaDB ColumnStore System Configuration and Installation tool.
It will Configure the MariaDB ColumnStore System and will perform a Package
Installation of all of the Servers within the System that is being configured.
IMPORTANT: This tool requires to run on the Performance Module #1
Prompting instructions:
Press 'enter' to accept a value in (), if available or
Enter one of the options within [], if available, or
Enter a new value
===== Setup System Server Type Configuration =====
There are 2 options when configuring the System Server Type: single and multi
'single' - Single-Server install is used when there will only be 1 server configured
on the system. It can also be used for production systems, if the plan is
to stay single-server.
'multi' - Multi-Server install is used when you want to configure multiple servers now or
in the future. With Multi-Server install, you can still configure just 1 server
now and add on addition servers/modules in the future.
Select the type of System Server install [1=single, 2=multi] (2) > 1
Performing the Single Server Install.
Enter System Name (columnstore-1) >
===== Setup Storage Configuration =====
----- Setup Performance Module DBRoot Data Storage Mount Configuration -----
There are 2 options when configuring the storage: internal or external
'internal' - This is specified when a local disk is used for the DBRoot storage.
High Availability Server Failover is not Supported in this mode
'external' - This is specified when the DBRoot directories are mounted.
High Availability Server Failover is Supported in this mode.
Select the type of Data Storage [1=internal, 2=external] (1) >
Enter the list (Nx,Ny,Nz) or range (Nx-Nz) of DBRoot IDs assigned to module 'pm1' (1) >
===== Performing Configuration Setup and MariaDB ColumnStore Startup =====
NOTE: Setting 'NumBlocksPct' to 50%
Setting 'TotalUmMemory' to 25% of total memory.
Running the MariaDB ColumnStore setup scripts
post-mysqld-install Successfully Completed
post-mysql-install Successfully Completed
Starting MariaDB Columnstore Database Platform
Starting MariaDB ColumnStore Database Platform Starting, please wait ....... DONE
System Catalog Successfull Created
MariaDB ColumnStore Install Successfully Completed, System is Active
Enter the following command to define MariaDB ColumnStore Alias Commands
. /etc/profile.d/columnstoreAlias.sh
Enter 'mcsmysql' to access the MariaDB ColumnStore SQL console
Enter 'mcsadmin' to access the MariaDB ColumnStore Admin console
NOTE: The MariaDB ColumnStore Alias Commands are in /etc/profile.d/columnstoreAlias.sh
Uruchom wygenerowany skrypt:
$ . /etc/profile.d/columnstoreAlias.sh
Teraz możesz uzyskać dostęp do bazy danych za pomocą polecenia „mcsmysql”:
$ mcsmysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.3.16-MariaDB-log Columnstore 1.2.5-1
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
To wszystko. Teraz możesz załadować dane do bazy danych MariaDB ColumnStore.
Wnioski
Columnar Storage to doskonała alternatywa dla przechowywania bazy danych do obsługi danych do celów analitycznych. MariaDB ColumnStore to silnik Columnar Storage zaprojektowany do tego zadania i jak mogliśmy zobaczyć, instalacja jest dość łatwa, więc jeśli potrzebujesz bazy danych OLAP lub przetwarzasz duże zbiory danych, powinieneś spróbować.