Im Allgemeinen speichern Datenbanken Daten im Zeilenformat und verwenden SQL als Abfragesprache, um darauf zuzugreifen, aber diese Speichermethode ist nicht immer die beste in Bezug auf die Leistung, sie hängt von der Arbeitslast selbst ab. Wenn Sie statistische Daten erhalten möchten, sollten Sie höchstwahrscheinlich eine andere Art von Datenbankspeicher-Engine verwenden.
In diesem Blog werden wir sehen, was Columnar Storage ist und genauer gesagt, was MariaDB ColumnStore ist und wie Sie es installieren, um Ihre Big Data performanter verarbeiten zu können Analysezwecke.
Säulenspeicher
Columnar Storage ist eine Art Datenbank-Engine, die Daten unter Verwendung eines spaltenorientierten Modells speichert.
Zum Beispiel könnten wir in einer gewöhnlichen relationalen Datenbank eine Tabelle wie diese haben:
id | Vorname | Nachname | Alter |
1001 | Oliver | Schmitt | 23 |
1002 | Harry | Jones | 65 |
1003 | Georg | Williams | 30 |
1004 | Jack | Taylor | 41 |
Hier kommt eine Columnar Storage Engine ins Spiel. Anstatt Daten in Zeilen zu speichern, werden die Daten in Spalten gespeichert. Wenn Sie also das Durchschnittsalter wissen müssen, ist es besser, es zu verwenden, da Sie eine Struktur wie diese haben werden:
id | Vorname | id | Nachname | id | Alter | ||
1001 | Oliver | 1001 | Schmitt | 1001 | 23 | ||
1002 | Harry | 1002 | Jones | 1002 | 65 | ||
1003 | Georg | 1003 | Williams | 1003 | 30 | ||
1004 | Jack | 1004 | Taylor | 1004 | 41 |
Auf der anderen Seite sind die Kosten für einzelne Einfügungen höher als bei einer zeilenorientierten Datenbank. und es ist nicht die beste Option für „SELECT *“-Abfragen oder Transaktionsvorgänge, sodass wir sagen können, dass es besser in eine OLAP-Datenbank (Online Analytical Processing) passt als in eine OLTP-Datenbank (Online Transaction Processing).
MariaDB-Spaltenspeicher
Es ist eine spaltenweise Speicher-Engine, die eine massiv parallel verteilte Datenarchitektur verwendet. Es handelt sich um einen separaten Download, der jedoch als Speicher-Engine für MariaDB Server ab MariaDB 10.5.4 verfügbar sein wird, das sich zum Zeitpunkt der Erstellung dieses Blogs noch in der Entwicklung befand.
Es wurde für Big Data entwickelt und nutzt die Vorteile der Spaltenspeicherung, um eine hervorragende Leistung mit Echtzeitantwort auf analytische Abfragen zu erzielen.
MariaDB ColumnStore-Architektur
Es besteht aus vielen (oder nur 1) MariaDB-Servern, die als Module arbeiten und zusammenarbeiten. Diese Module umfassen Benutzer, Leistung und Speicher.
Benutzermodul
Es ist eine MariaDB-Serverinstanz, die so konfiguriert ist, dass sie als Front-End für ColumnStore fungiert.
Das Benutzermodul verwaltet und steuert den Betrieb von Endbenutzerabfragen. Wenn ein Client eine Abfrage ausführt, wird diese analysiert und an ein oder mehrere Leistungsmodule verteilt, um die Abfrage zu verarbeiten. Das Benutzermodul sammelt dann die Abfrageergebnisse und fügt sie in die Ergebnismenge ein, um sie an den Client zurückzugeben.
Der Hauptzweck des Benutzermoduls besteht darin, die Parallelitätsskalierung zu handhaben. Es berührt Datenbankdateien niemals direkt und erfordert keine Sichtbarkeit für sie.
Leistungsmodul
Es ist verantwortlich für das Speichern, Abrufen und Verwalten von Daten, das Verarbeiten von Blockanforderungen für Abfrageoperationen und das Zurückgeben an das Benutzermodul oder die Module, um die Abfrageanforderungen abzuschließen. Es sieht nicht die Abfrage selbst, sondern nur eine Reihe von Anweisungen, die ihm von einem Benutzermodul gegeben werden.
Das Modul wählt Daten von der Festplatte aus und speichert sie in einem Shared-Nothing-Puffer, der Teil des Servers ist, auf dem es läuft.
Bei mehreren Performance Module-Knoten stellt ein Heartbeat-Mechanismus sicher, dass alle Knoten online sind, und es gibt ein transparentes Failover für den Fall, dass ein bestimmter Knoten ausfällt.
Speicherung
Sie können lokalen Speicher (Leistungsmodule) oder gemeinsam genutzten Speicher (SAN) zum Speichern von Daten verwenden.
Wenn Sie eine Tabelle in MariaDB ColumnStore erstellen, erstellt das System mindestens eine Datei pro Spalte in der Tabelle. So würde beispielsweise eine mit drei Spalten erstellte Tabelle mindestens drei separat adressierbare logische Objekte enthalten, die auf einem SAN oder auf der lokalen Festplatte eines Performance-Moduls erstellt wurden.
ColumnStore optimiert seine Komprimierungsstrategie für die Leseleistung von der Festplatte. Es ist darauf abgestimmt, die Dekomprimierungsrate zu beschleunigen und die Leistungsvorteile beim Lesen von der Festplatte zu maximieren.
MariaDB ColumnStore verwendet den Versionspuffer, um geänderte Festplattenblöcke zu speichern, Transaktions-Rollbacks zu verwalten und die MVCC- (Multi-Version Concurrency Control) oder "Snapshot Read"-Funktion der Datenbank zu bedienen. Dadurch kann eine abfragekonsistente Ansicht der Datenbank angeboten werden.
Wie MariaDB CloumnStore funktioniert
Sehen wir uns nun an, wie MariaDB ColumnStore eine Endbenutzeranfrage gemäß der offiziellen MariaDB ColumnStore-Dokumentation verarbeitet:
- Clients senden eine Anfrage an den MariaDB-Server, der auf dem Benutzermodul läuft. Der Server führt eine Tabellenoperation für alle Tabellen durch, die zum Erfüllen der Anforderung erforderlich sind, und erhält den anfänglichen Abfrageausführungsplan.
- Unter Verwendung der MariaDB-Speicher-Engine-Schnittstelle konvertiert ColumnStore das Servertabellenobjekt in ColumnStore-Objekte. Diese Objekte werden dann an die Benutzermodulprozesse gesendet.
- Das Benutzermodul konvertiert den MariaDB-Ausführungsplan und optimiert die angegebenen Objekte in einen ColumnStore-Ausführungsplan. Anschließend bestimmt es die Schritte, die zum Ausführen der Abfrage erforderlich sind, und die Reihenfolge, in der sie ausgeführt werden müssen.
- Das Benutzermodul konsultiert dann die Extent Map, um zu bestimmen, welche Leistungsmodule für die benötigten Daten konsultiert werden sollen, führt dann eine Extent-Eliminierung durch und entfernt alle Leistungsmodule aus der Liste, die nur Daten außerhalb des Bereichs von enthalten was die Abfrage erfordert.
- Das Benutzermodul sendet dann Befehle an ein oder mehrere Performance-Module, um Block-I/O-Vorgänge auszuführen.
- Das Leistungsmodul oder die Leistungsmodule führen Prädikatenfilterung, Join-Verarbeitung, anfängliche Aggregation von Daten aus lokalem oder externem Speicher durch und senden die Daten dann zurück an das Benutzermodul.
- Das Benutzermodul führt die endgültige Aggregation der Ergebnismenge durch und stellt die Ergebnismenge für die Abfrage zusammen.
- Das Benutzermodul / ExeMgr implementiert alle Fensterfunktionsberechnungen sowie alle notwendigen Sortierungen der Ergebnismenge. Es gibt dann die Ergebnismenge an den Server zurück.
- Der MariaDB-Server führt alle Auswahllistenfunktionen, ORDER BY- und LIMIT-Operationen auf der Ergebnismenge aus.
- Der MariaDB-Server gibt die Ergebnismenge an den Client zurück.
So installieren Sie MariaDB ColumnStore
Sehen wir uns nun an, wie es installiert wird. Weitere Informationen finden Sie in der offiziellen MariaDB-Dokumentation.
Wir verwenden CentOS 7 als Betriebssystem, aber Sie können stattdessen jedes unterstützte Betriebssystem verwenden. Die Installationspakete stehen hier zum Download bereit.
Zuerst müssen Sie das Extra Packages-Repository installieren:
$ yum install -y epel-release
Dann die folgenden erforderlichen Pakete:
$ yum install -y boost expect perl perl-DBI openssl zlib snappy libaio perl-DBD-MySQL net-tools wget jemalloc numactl-libs
Und jetzt laden wir die neueste Version von MariaDB ColumnStore herunter, dekomprimieren und installieren sie:
$ 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
Wenn es fertig ist, sehen Sie die folgende Meldung:
Der nächste Schritt ist:
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
Also führen wir für dieses Beispiel einfach den folgenden Befehl aus:
$ /usr/local/mariadb/columnstore/bin/postConfigure
Jetzt werden Sie nach einigen Informationen zur Installation gefragt:
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
Führen Sie das generierte Skript aus:
$ . /etc/profile.d/columnstoreAlias.sh
Jetzt können Sie auf die Datenbank zugreifen, indem Sie den Befehl „mcsmysql“ ausführen:
$ 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)]>
Das ist es. Jetzt können Sie Daten in Ihre MariaDB ColumnStore-Datenbank laden.
Fazit
Columnar Storage ist eine großartige Datenbankspeicheralternative, um Daten für Analysezwecke zu verarbeiten. MariaDB ColumnStore ist eine Columnar Storage-Engine, die für diese Aufgabe entwickelt wurde, und wie wir sehen konnten, ist die Installation ziemlich einfach. Wenn Sie also eine OLAP-Datenbank benötigen oder Big Data verarbeiten, sollten Sie es versuchen.