MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Was ist MariaDB ColumnStore?

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

Dies ist in Ordnung, wenn Sie zum Beispiel das Alter einer bestimmten Person erhalten möchten, wo Sie alle oder fast alle Zeileninformationen benötigen, aber wenn Sie Statistiken zu einer bestimmten Spalte (z. B. Durchschnittsalter) benötigen, ist dies der Fall nicht die beste Struktur.

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

Das bedeutet, dass Sie statt aller Daten nur die ID und das Alter lesen müssen, um das Durchschnittsalter zu kennen.

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.