Over het algemeen slaan databases gegevens op in rij-indeling en gebruiken ze SQL als querytaal om toegang te krijgen, maar deze opslagmethode is niet altijd de beste in termen van prestaties, het hangt af van de werkbelasting zelf. Als u statistische gegevens wilt krijgen, moet u hoogstwaarschijnlijk een ander soort database-opslagengine gebruiken.
In deze blog zullen we zien wat Columnar Storage is en, om specifieker te zijn, wat MariaDB ColumnStore is, en hoe het te installeren om uw big data op een meer performante manier te kunnen verwerken voor analytische doeleinden.
Kolomopslag
Kolomopslag is een type database-engine die gegevens opslaat met behulp van een kolomgericht model.
In een algemene relationele database zouden we bijvoorbeeld een tabel als deze kunnen hebben:
id
voornaam
achternaam
leeftijd
1001
Oliver
Smith
23
1002
Harry
Jones
65
1003
George
Williams
30
1004
Jack
Taylor
41
Hier komt een Columnar Storage-engine om de hoek kijken. In plaats van gegevens in rijen op te slaan, worden de gegevens in kolommen opgeslagen. Dus als je de gemiddelde leeftijd wilt weten, is het beter om die te gebruiken, omdat je een structuur als deze hebt:
id
voornaam
id
achternaam
id
leeftijd
1001
Oliver
1001
Smith
1001
23
1002
Harry
1002
Jones
1002
65
1003
George
1003
Williams
1003
30
1004
Jack
1004
Taylor
1004
41
Anderzijds zijn de kosten van het doen van enkele invoegingen hoger dan bij een rij-georiënteerde database, en het is niet de beste optie voor "SELECT *"-query's of transactiebewerkingen, dus we kunnen zeggen dat het beter past in een OLAP-database (Online Analytical Processing) dan een OLTP-database (Online Transaction Processing).
MariaDB ColumnStore
Het is een zuilvormige opslagengine die gebruikmaakt van een massaal parallel gedistribueerde gegevensarchitectuur. Het is een aparte download, maar het zal beschikbaar zijn als een opslagengine voor MariaDB Server vanaf MariaDB 10.5.4, die nog in ontwikkeling is op het moment dat deze blog werd geschreven.
Het is ontworpen voor big data en maakt gebruik van de voordelen van opslag in kolommen voor geweldige prestaties met realtime respons op analytische vragen.
MariaDB ColumnStore-architectuur
Het is samengesteld uit vele (of slechts 1) MariaDB-servers, die als modules werken en samenwerken. Deze modules omvatten Gebruiker, Prestaties en Opslag.
Gebruikersmodule
Het is een MariaDB Server-instantie die is geconfigureerd om als front-end voor ColumnStore te werken.
De gebruikersmodule beheert en controleert de werking van zoekopdrachten van eindgebruikers. Wanneer een client een query uitvoert, wordt deze geparseerd en gedistribueerd naar een of meer prestatiemodules om de query te verwerken. De gebruikersmodule verzamelt vervolgens de queryresultaten en voegt ze samen in de resultatenset om terug te keren naar de klant.
Het primaire doel van de gebruikersmodule is om gelijktijdigheidsschaling af te handelen. Het raakt nooit rechtstreeks databasebestanden en vereist geen zichtbaarheid voor hen.
Prestatiemodule
Het is verantwoordelijk voor het opslaan, ophalen en beheren van gegevens, het verwerken van blokverzoeken voor querybewerkingen en voor het terugsturen naar de gebruikersmodule of -modules om de queryverzoeken af te ronden. Het ziet de vraag zelf niet, maar alleen een reeks instructies die eraan worden gegeven door een gebruikersmodule.
De module selecteert gegevens van schijf en slaat deze op in een gedeelde-niets-buffer die deel uitmaakt van de server waarop hij draait.
Met meerdere Performance Module-knooppunten zorgt een hartslagmechanisme ervoor dat alle knooppunten online zijn en is er een transparante failover in het geval dat een bepaald knooppunt uitvalt.
Opslag
U kunt lokale opslag (Performance Modules) of gedeelde opslag (SAN) gebruiken om gegevens op te slaan.
Als u een tabel maakt op MariaDB ColumnStore, maakt het systeem ten minste één bestand per kolom in de tabel aan. Een tabel gemaakt met drie kolommen zou bijvoorbeeld minimaal drie afzonderlijk adresseerbare logische objecten hebben die zijn gemaakt op een SAN of op de lokale schijf van een prestatiemodule.
ColumnStore optimaliseert zijn compressiestrategie voor leesprestaties vanaf schijf. Het is afgestemd om de decompressiesnelheid te versnellen, waardoor de prestatievoordelen worden gemaximaliseerd bij het lezen van schijf.
MariaDB ColumnStore gebruikt de versiebuffer om schijfblokken op te slaan die worden gewijzigd, het terugdraaien van transacties te beheren en de MVCC (multi-version concurrency control) of "snapshot read"-functie van de database te onderhouden. Hierdoor kan het een consistente queryweergave van de database bieden.
Hoe MariaDB CloumnStore werkt
Laten we nu eens kijken hoe MariaDB ColumnStore een zoekopdracht van een eindgebruiker verwerkt, volgens de officiële MariaDB ColumnStore-documentatie:
- Klanten sturen een query naar de MariaDB-server die op de gebruikersmodule draait. De server voert een tabelbewerking uit voor alle tabellen die nodig zijn om aan het verzoek te voldoen en verkrijgt het initiële plan voor het uitvoeren van de query.
- Met behulp van de MariaDB-opslagengine-interface converteert ColumnStore het servertabelobject naar ColumnStore-objecten. Deze objecten worden vervolgens verzonden naar de processen van de gebruikersmodule.
- De gebruikersmodule converteert het MariaDB-uitvoeringsplan en optimaliseert de gegeven objecten in een ColumnStore-uitvoeringsplan. Het bepaalt vervolgens de stappen die nodig zijn om de query uit te voeren en de volgorde waarin ze moeten worden uitgevoerd.
- De gebruikersmodule raadpleegt vervolgens de omvangkaart om te bepalen welke prestatiemodules moeten worden geraadpleegd voor de gegevens die hij nodig heeft, en voert vervolgens de omvangeliminatie uit, waarbij alle prestatiemodules uit de lijst worden verwijderd die alleen gegevens bevatten buiten het bereik van wat de zoekopdracht vereist.
- De gebruikersmodule stuurt vervolgens opdrachten naar een of meer prestatiemodules om blok-I/O-bewerkingen uit te voeren.
- De prestatiemodule of -modules voeren predikaatfiltering, join-verwerking, initiële aggregatie van gegevens uit lokale of externe opslag uit en sturen de gegevens vervolgens terug naar de gebruikersmodule.
- De gebruikersmodule voert de uiteindelijke aggregatie van de resultatenset uit en stelt de resultaatset voor de query samen.
- De gebruikersmodule / ExeMgr implementeert alle vensterfunctieberekeningen, evenals elke noodzakelijke sortering op de resultatenset. Het retourneert vervolgens de resultatenset naar de server.
- De MariaDB-server voert alle geselecteerde lijstfuncties, ORDER BY- en LIMIT-bewerkingen uit op de resultatenset.
- De MariaDB-server retourneert de resultatenset naar de client.
Hoe MariaDB ColumnStore te installeren
Laten we nu eens kijken hoe we het kunnen installeren. Voor meer informatie kunt u de officiële MariaDB-documentatie raadplegen.
We gebruiken CentOS 7 als besturingssysteem, maar je kunt in plaats daarvan elk ondersteund besturingssysteem gebruiken. De installatiepakketten kunnen hier worden gedownload.
Eerst moet u de Extra Packages-repository installeren:
$ yum install -y epel-release
Vervolgens de volgende vereiste pakketten:
$ yum install -y boost expect perl perl-DBI openssl zlib snappy libaio perl-DBD-MySQL net-tools wget jemalloc numactl-libs
Laten we nu de nieuwste versie van MariaDB ColumnStore downloaden, decomprimeren en installeren:
$ 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
Als het klaar is, ziet u het volgende bericht:
De volgende stap is:
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
Dus laten we voor dit voorbeeld gewoon het commando uitvoeren:
$ /usr/local/mariadb/columnstore/bin/postConfigure
Nu zal het je wat informatie vragen over de installatie:
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
Voer het gegenereerde script uit:
$ . /etc/profile.d/columnstoreAlias.sh
Je hebt nu toegang tot de database met de opdracht "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)]>
Dat is het. Nu kunt u gegevens in uw MariaDB ColumnStore-database laden.
Conclusie
Columnar Storage is een geweldig alternatief voor databaseopslag om gegevens voor analytische doeleinden te verwerken. MariaDB ColumnStore is een Columnar Storage-engine die voor deze taak is ontworpen, en zoals we konden zien, is de installatie vrij eenvoudig, dus als u een OLAP-database nodig heeft of big data verwerkt, moet u het eens proberen.