I allmänhet lagrar databaser data i radformat och använder SQL som frågespråk för att komma åt det, men denna lagringsmetod är inte alltid den bästa när det gäller prestanda, den beror på själva arbetsbelastningen. Om du vill få statistisk data bör du antagligen använda en annan typ av databaslagringsmotor.
I den här bloggen kommer vi att se vad Columnar Storage är och, för att vara mer specifik, vad MariaDB ColumnStore är, och hur man installerar det för att kunna bearbeta din big data på ett mer prestandafullt sätt för analytiska syften.
Kolumnarlagring
Columnar Storage är en typ av databasmotor som lagrar data med en kolumnorienterad modell.
Till exempel, i en vanlig relationsdatabas kan vi ha en tabell som denna:
id | förnamn | efternamn | ålder |
1001 | Oliver | Smith | 23 |
1002 | Harry | Jones | 65 |
1003 | George | Williams | 30 |
1004 | Jack | Taylor | 41 |
Här är en Columnar Storage-motor kommer in i bilden. Istället för att lagra data i rader, lagras data i kolumner. Så om du behöver veta medelåldern är det bättre att använda det, eftersom du kommer att ha en struktur så här:
id | förnamn | id | efternamn | id | ålder | ||
1001 | Oliver | 1001 | Smith | 1001 | 23 | ||
1002 | Harry | 1002 | Jones | 1002 | 65 | ||
1003 | George | 1003 | Williams | 1003 | 30 | ||
1004 | Jack | 1004 | Taylor | 1004 | 41 |
å andra sidan är kostnaden för att göra enstaka insättningar högre än en radorienterad databas, och det är inte det bästa alternativet för "SELECT *"-frågor eller transaktionsoperationer, så vi kan säga att det passar bättre i en OLAP (Online Analytical Processing)-databas än en OLTP (Online Transaction Processing).
MariaDB ColumnStore
Det är en kolumnär lagringsmotor som använder en massivt parallellt distribuerad dataarkitektur. Det är en separat nedladdning, men den kommer att vara tillgänglig som en lagringsmotor för MariaDB Server från MariaDB 10.5.4, som fortfarande är under utveckling när denna blogg skrevs.
Den är designad för big data och använder fördelarna med kolumnlagring för att få enastående prestanda med realtidssvar på analytiska frågor.
MariaDB ColumnStore-arkitektur
Den består av många (eller bara 1) MariaDB-servrar, som fungerar som moduler och arbetar tillsammans. Dessa moduler inkluderar användare, prestanda och lagring.
Användarmodul
Det är en MariaDB Server-instans konfigurerad för att fungera som ett gränssnitt till ColumnStore.
Användarmodulen hanterar och kontrollerar funktionen för slutanvändarfrågor. När en klient kör en fråga analyseras den och distribueras till en eller flera prestandamoduler för att bearbeta frågan. Användarmodulen samlar sedan in frågeresultaten och sätter ihop dem i resultatuppsättningen för att återgå till klienten.
Det primära syftet med användarmodulen är att hantera samtidig skalning. Den berör aldrig databasfiler direkt och kräver inte synlighet för dem.
Prestandamodul
Det är ansvarigt för att lagra, hämta och hantera data, bearbeta blockförfrågningar för frågeoperationer och för att skicka tillbaka det till användarmodulen eller -modulerna för att slutföra frågeförfrågningarna. Den ser inte själva frågan, utan bara en uppsättning instruktioner som ges till den av en användarmodul.
Modulen väljer data från disken och cachar dem i en delad-ingenting-buffert som är en del av servern som den körs på.
Med flera prestandamodulnoder säkerställer en hjärtslagsmekanism att alla noder är online och att det finns en transparent failover i händelse av att en viss nod misslyckas.
Lagring
Du kan använda lokal lagring (Performance Modules) eller delad lagring (SAN) för att lagra data.
När du skapar en tabell på MariaDB ColumnStore, skapar systemet minst en fil per kolumn i tabellen. Så, till exempel, en tabell skapad med tre kolumner skulle ha minst tre, separat adresserbara logiska objekt skapade på ett SAN eller på den lokala disken i en prestandamodul.
ColumnStore optimerar sin komprimeringsstrategi för läsprestanda från disk. Den är inställd för att accelerera dekompressionshastigheten, vilket maximerar prestandafördelarna vid läsning från disk.
MariaDB ColumnStore använder versionsbufferten för att lagra diskblock som håller på att modifieras, hantera återställning av transaktioner och serva MVCC (multi-version concurrency control) eller "snapshot read"-funktionen för databasen. Detta gör att den kan erbjuda en konsekvent vy av databasen.
Så fungerar MariaDB CloumnStore
Låt oss nu se hur MariaDB ColumnStore behandlar en slutanvändarfråga, enligt den officiella MariaDB ColumnStore-dokumentationen:
- Kunder skickar en fråga till MariaDB-servern som körs på användarmodulen. Servern utför en tabelloperation för alla tabeller som behövs för att uppfylla begäran och hämtar den initiala exekveringsplanen för frågeställningar.
- Med hjälp av MariaDB-lagringsmotorns gränssnitt konverterar ColumnStore servertabellobjektet till ColumnStore-objekt. Dessa objekt skickas sedan till användarmodulens processer.
- Användarmodulen konverterar MariaDB-exekveringsplanen och optimerar de givna objekten till en ColumnStore-exekveringsplan. Den bestämmer sedan stegen som behövs för att köra frågan och i vilken ordning de måste köras.
- Användarmodulen konsulterar sedan Extent Map för att avgöra vilka prestandamoduler som ska konsulteras för den data den behöver, den utför sedan Extent Elimination, vilket eliminerar alla prestandamoduler från listan som bara innehåller data utanför intervallet vad frågan kräver.
- Användarmodulen skickar sedan kommandon till en eller flera prestandamoduler för att utföra block I/O-operationer.
- Prestandamodulen eller -modulerna utför predikatfiltrering, sammanfogningsbearbetning, initial aggregering av data från lokal eller extern lagring och skickar sedan tillbaka data till användarmodulen.
- Användarmodulen utför den slutliga resultatuppsättningen och sammanställer resultatuppsättningen för frågan.
- Användarmodulen / ExeMgr implementerar alla fönsterfunktionsberäkningar, såväl som all nödvändig sortering på resultatuppsättningen. Den returnerar sedan resultatuppsättningen till servern.
- MariaDB-servern utför valfria listfunktioner, ORDER BY och LIMIT-operationer på resultatuppsättningen.
- MariaDB-servern returnerar resultatuppsättningen till klienten.
Hur man installerar MariaDB ColumnStore
Nu ska vi se hur du installerar det. För mer information kan du kontrollera MariaDB:s officiella dokumentation.
Vi kommer att använda CentOS 7 som operativsystem, men du kan använda valfritt operativsystem som stöds istället. Installationspaketen finns tillgängliga för nedladdning här.
Först måste du installera extrapaketförrådet:
$ yum install -y epel-release
Sedan, följande obligatoriska paket:
$ yum install -y boost expect perl perl-DBI openssl zlib snappy libaio perl-DBD-MySQL net-tools wget jemalloc numactl-libs
Och nu, låt oss ladda ner den senaste versionen av MariaDB ColumnStore, packa upp och installera den:
$ 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
När det är klart kommer du att se följande meddelande:
Nästa steg är:
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
Så, för det här exemplet, låt oss bara köra kommandot:
$ /usr/local/mariadb/columnstore/bin/postConfigure
Nu kommer det att fråga dig lite information om installationen:
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
Kör det genererade skriptet:
$ . /etc/profile.d/columnstoreAlias.sh
Nu kan du komma åt databasen som kör kommandot "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)]>
Det är allt. Nu kan du ladda data i din MariaDB ColumnStore-databas.
Slutsats
Columnar Storage är ett utmärkt databaslagringsalternativ för att hantera data för analysändamål. MariaDB ColumnStore är en kolumnlagringsmotor designad för denna uppgift, och som vi kunde se är installationen ganska enkel, så om du behöver en OLAP-databas eller bearbetar big data, bör du prova det.