In generale, i database archiviano i dati in formato riga e utilizzano SQL come linguaggio di query per accedervi, ma questo metodo di archiviazione non è sempre il migliore in termini di prestazioni, dipende dal carico di lavoro stesso. Se vuoi ottenere dati statistici, molto probabilmente dovresti usare un altro tipo di motore di archiviazione del database.
In questo blog, vedremo cos'è Columnar Storage e, per essere più specifici, cos'è MariaDB ColumnStore e come installarlo per poter elaborare i tuoi big data in modo più performante per finalità analitiche.
Archiviazione colonne
Columnar Storage è un tipo di motore di database che archivia i dati utilizzando un modello orientato alle colonne.
Ad esempio, in un comune database relazionale, potremmo avere una tabella come questa:
id | nome | cognome | età |
1001 | Oliver | Fabio | 23 |
1002 | Harry | Jones | 65 |
1003 | Giorgio | Williams | 30 |
1004 | Jack | Taylor | 41 |
Ecco dove entra in gioco un motore Columnar Storage. Invece di archiviare i dati in righe, i dati vengono archiviati in colonne. Quindi, se hai bisogno di conoscere l'età media, sarà meglio usarla, poiché avrai una struttura come questa:
id | nome | id | cognome | id | età | ||
1001 | Oliver | 1001 | Fabio | 1001 | 23 | ||
1002 | Harry | 1002 | Jones | 1002 | 65 | ||
1003 | Giorgio | 1003 | Williams | 1003 | 30 | ||
1004 | Jack | 1004 | Taylor | 1004 | 41 |
d'altra parte, il costo per eseguire singoli inserimenti è superiore a un database orientato alla riga, e non è l'opzione migliore per le query "SELECT *" o le operazioni transazionali, quindi possiamo dire che si adatta meglio a un database OLAP (Online Analytical Processing) rispetto a uno OLTP (Online Transaction Processing).
MariaDB ColumnStore
Si tratta di un motore di archiviazione a colonne che utilizza un'architettura di dati distribuiti in maniera massiccia parallela. È un download separato, ma sarà disponibile come motore di archiviazione per MariaDB Server da MariaDB 10.5.4, che è ancora in fase di sviluppo al momento della stesura di questo blog.
È progettato per i big data, sfruttando i vantaggi dell'archiviazione a colonne per offrire prestazioni eccezionali con risposta in tempo reale alle query analitiche.
Architettura ColumnStore di MariaDB
È composto da molti (o solo 1) server MariaDB, che operano come moduli, che lavorano insieme. Questi moduli includono Utente, Prestazioni e Archiviazione.
Modulo utente
Si tratta di un'istanza MariaDB Server configurata per operare come front-end per ColumnStore.
Il modulo utente gestisce e controlla il funzionamento delle query degli utenti finali. Quando un client esegue una query, viene analizzata e distribuita a uno o più Performance Module per elaborare la query. Il modulo Utente raccoglie quindi i risultati della query e li assembla nel set di risultati da restituire al client.
Lo scopo principale del modulo utente è gestire il ridimensionamento della concorrenza. Non tocca mai direttamente i file di database e non richiede visibilità su di essi.
Modulo prestazioni
È responsabile della memorizzazione, del recupero e della gestione dei dati, dell'elaborazione delle richieste di blocco per le operazioni di query e del ritrasmissione al modulo o ai moduli Utente per finalizzare le richieste di query. Non vede la query stessa, ma solo un insieme di istruzioni fornitegli da un Modulo utente.
Il modulo seleziona i dati dal disco e li memorizza nella cache in un buffer non condiviso che fa parte del server su cui viene eseguito.
Avendo più nodi Performance Module, un meccanismo heartbeat assicura che tutti i nodi siano online e che vi sia un failover trasparente nel caso in cui un particolare nodo si guasta.
Archiviazione
Puoi utilizzare l'archiviazione locale (Moduli delle prestazioni) o l'archiviazione condivisa (SAN) per archiviare i dati.
Quando crei una tabella su MariaDB ColumnStore, il sistema crea almeno un file per colonna nella tabella. Ad esempio, una tabella creata con tre colonne dovrebbe avere un minimo di tre oggetti logici indirizzabili separatamente creati su una SAN o sul disco locale di un Performance Module.
ColumnStore ottimizza la sua strategia di compressione per le prestazioni di lettura dal disco. È ottimizzato per accelerare la velocità di decompressione, massimizzando i vantaggi in termini di prestazioni durante la lettura dal disco.
MariaDB ColumnStore utilizza il buffer di versione per archiviare i blocchi del disco che vengono modificati, gestire i rollback delle transazioni e servire la funzione MVCC (controllo della concorrenza multi-versione) o "lettura istantanea" del database. Ciò consente di offrire una visualizzazione coerente della query del database.
Come funziona MariaDB CloumnStore
Ora, vediamo come MariaDB ColumnStore elabora una query dell'utente finale, secondo la documentazione ufficiale di MariaDB ColumnStore:
- I client inviano una query al server MariaDB in esecuzione sul modulo utente. Il server esegue un'operazione di tabella per tutte le tabelle necessarie per soddisfare la richiesta e ottiene il piano di esecuzione della query iniziale.
- Utilizzando l'interfaccia del motore di archiviazione MariaDB, ColumnStore converte l'oggetto tabella del server in oggetti ColumnStore. Questi oggetti vengono quindi inviati ai processi del modulo utente.
- Il modulo utente converte il piano di esecuzione di MariaDB e ottimizza gli oggetti dati in un piano di esecuzione ColumnStore. Determina quindi i passaggi necessari per eseguire la query e l'ordine in cui devono essere eseguiti.
- Il Modulo Utente consulta quindi la Mappa Extent per determinare quali Performance Module consultare per i dati di cui ha bisogno, quindi esegue Extent Elimination, eliminando dall'elenco eventuali Performance Module che contengono solo dati al di fuori dell'intervallo di cosa richiede la query.
- Il modulo utente invia quindi comandi a uno o più moduli prestazioni per eseguire operazioni di I/O a blocchi.
- Il modulo o i moduli delle prestazioni eseguono il filtraggio dei predicati, l'elaborazione dei join, l'aggregazione iniziale dei dati dall'archiviazione locale o esterna, quindi inviano i dati al modulo utente.
- Il modulo utente esegue l'aggregazione del set di risultati finale e compone il set di risultati per la query.
- Il modulo utente / ExeMgr implementa qualsiasi calcolo delle funzioni della finestra, nonché qualsiasi ordinamento necessario sul set di risultati. Quindi restituisce il set di risultati al server.
- Il server MariaDB esegue tutte le funzioni dell'elenco di selezione, le operazioni ORDER BY e LIMIT sul set di risultati.
- Il server MariaDB restituisce il set di risultati al client.
Come installare MariaDB ColumnStore
Ora vediamo come installarlo. Per ulteriori informazioni, puoi consultare la documentazione ufficiale di MariaDB.
Utilizzeremo CentOS 7 come sistema operativo, ma puoi invece utilizzare qualsiasi sistema operativo supportato. I pacchetti di installazione sono disponibili per il download qui.
Per prima cosa, dovrai installare il repository Extra Packages:
$ yum install -y epel-release
Quindi, i seguenti pacchetti richiesti:
$ yum install -y boost expect perl perl-DBI openssl zlib snappy libaio perl-DBD-MySQL net-tools wget jemalloc numactl-libs
E ora, scarichiamo l'ultima versione di MariaDB ColumnStore, decomprimiamola e installiamola:
$ 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
Al termine, vedrai il seguente messaggio:
Il passaggio successivo è:
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
Quindi, per questo esempio, eseguiamo semplicemente il comando:
$ /usr/local/mariadb/columnstore/bin/postConfigure
Ora ti chiederà alcune informazioni sull'installazione:
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
Esegui lo script generato:
$ . /etc/profile.d/columnstoreAlias.sh
Ora puoi accedere al database eseguendo il comando "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)]>
Ecco fatto. Ora puoi caricare i dati nel database ColumnStore di MariaDB.
Conclusione
Columnar Storage è un'ottima alternativa di archiviazione del database per gestire i dati a fini di analisi. MariaDB ColumnStore è un motore di archiviazione a colonne progettato per questa attività e, come abbiamo potuto vedere, l'installazione è piuttosto semplice, quindi se hai bisogno di un database OLAP o di elaborare big data, dovresti provarlo.