En général, les bases de données stockent les données au format ligne et utilisent SQL comme langage de requête pour y accéder, mais cette méthode de stockage n'est pas toujours la meilleure en termes de performances, cela dépend de la charge de travail elle-même. Si vous souhaitez obtenir des données statistiques, vous devriez très probablement utiliser un autre type de moteur de stockage de base de données.
Dans ce blog, nous verrons ce qu'est Columnar Storage et, pour être plus précis, ce qu'est MariaDB ColumnStore, et comment l'installer pour pouvoir traiter vos big data de manière plus performante pour à des fins analytiques.
Stockage en colonnes
Columnar Storage est un type de moteur de base de données qui stocke les données à l'aide d'un modèle orienté colonne.
Par exemple, dans une base de données relationnelle commune, nous pourrions avoir une table comme celle-ci :
id | prénom | nom | âge |
1001 | Olivier | Smith | 23 |
1002 | Harry | Jones | 65 |
1003 | Georges | Williams | 30 |
1004 | Jack | Taylor | 41 |
C'est ici qu'un moteur de stockage en colonne entre en jeu. Au lieu de stocker des données dans des lignes, les données sont stockées dans des colonnes. Donc, si vous avez besoin de connaître l'âge moyen, il sera préférable de l'utiliser, car vous aurez une structure comme celle-ci :
id | prénom | id | nom | id | âge | ||
1001 | Olivier | 1001 | Smith | 1001 | 23 | ||
1002 | Harry | 1002 | Jones | 1002 | 65 | ||
1003 | Georges | 1003 | Williams | 1003 | 30 | ||
1004 | Jack | 1004 | Taylor | 1004 | 41 |
d'un autre côté, le coût de faire des insertions simples est plus élevé qu'une base de données orientée ligne, et ce n'est pas la meilleure option pour les requêtes "SELECT *" ou les opérations transactionnelles, nous pouvons donc dire qu'elle s'intègre mieux dans une base de données OLAP (Online Analytical Processing) qu'une base de données OLTP (Online Transaction Processing).
MariaDB ColumnStore
Il s'agit d'un moteur de stockage en colonnes qui utilise une architecture de données distribuée massivement parallèle. Il s'agit d'un téléchargement séparé, mais il sera disponible en tant que moteur de stockage pour MariaDB Server à partir de MariaDB 10.5.4, qui est toujours en développement au moment de la rédaction de ce blog.
Il est conçu pour le Big Data, en utilisant les avantages du stockage en colonnes pour avoir une excellente performance avec une réponse en temps réel aux requêtes analytiques.
Architecture MariaDB ColumnStore
Il est composé de plusieurs (ou juste 1) serveurs MariaDB, fonctionnant comme des modules, travaillant ensemble. Ces modules incluent Utilisateur, Performances et Stockage.
Module utilisateur
Il s'agit d'une instance de MariaDB Server configurée pour fonctionner comme une interface pour ColumnStore.
Le module utilisateur gère et contrôle le fonctionnement des requêtes des utilisateurs finaux. Lorsqu'un client exécute une requête, elle est analysée et distribuée à un ou plusieurs modules de performance pour traiter la requête. Le module Utilisateur collecte ensuite les résultats de la requête et les assemble dans le jeu de résultats à renvoyer au client.
L'objectif principal du module utilisateur est de gérer la mise à l'échelle de la concurrence. Il ne touche jamais directement les fichiers de base de données et ne nécessite pas de visibilité sur eux.
Module de performances
Il est responsable du stockage, de la récupération et de la gestion des données, du traitement des requêtes de bloc pour les opérations de requête et de leur transmission au ou aux modules utilisateur pour finaliser les requêtes de requête. Il ne voit pas la requête elle-même, mais seulement un ensemble d'instructions qui lui sont données par un module utilisateur.
Le module sélectionne les données du disque et les met en cache dans un tampon partagé qui fait partie du serveur sur lequel il s'exécute.
Ayant plusieurs nœuds de module de performance, un mécanisme de pulsation garantit que tous les nœuds sont en ligne et qu'il y a un basculement transparent en cas de défaillance d'un nœud particulier.
Stockage
Vous pouvez utiliser le stockage local (modules de performance) ou le stockage partagé (SAN) pour stocker les données.
Lorsque vous créez une table sur MariaDB ColumnStore, le système crée au moins un fichier par colonne dans la table. Ainsi, par exemple, une table créée avec trois colonnes aurait un minimum de trois objets logiques adressables séparément créés sur un SAN ou sur le disque local d'un module de performance.
ColumnStore optimise sa stratégie de compression pour les performances de lecture à partir du disque. Il est réglé pour accélérer le taux de décompression, maximisant les avantages en termes de performances lors de la lecture à partir du disque.
MariaDB ColumnStore utilise le Version Buffer pour stocker les blocs de disque en cours de modification, gérer les annulations de transactions et entretenir la fonction MVCC (contrôle de concurrence multi-version) ou "lecture d'instantané" de la base de données. Cela lui permet d'offrir une vue cohérente des requêtes de la base de données.
Fonctionnement de MariaDB CloumnStore
Voyons maintenant comment MariaDB ColumnStore traite une requête d'utilisateur final, selon la documentation officielle de MariaDB ColumnStore :
- Les clients envoient une requête au serveur MariaDB exécuté sur le module utilisateur. Le serveur effectue une opération de table pour toutes les tables nécessaires pour répondre à la requête et obtient le plan d'exécution de requête initial.
- À l'aide de l'interface du moteur de stockage MariaDB, ColumnStore convertit l'objet table serveur en objets ColumnStore. Ces objets sont ensuite envoyés aux processus du module utilisateur.
- Le module utilisateur convertit le plan d'exécution MariaDB et optimise les objets donnés en un plan d'exécution ColumnStore. Il détermine ensuite les étapes nécessaires pour exécuter la requête et l'ordre dans lequel elles doivent être exécutées.
- Le module utilisateur consulte ensuite la carte d'étendue pour déterminer quels modules de performance consulter pour les données dont il a besoin, il effectue ensuite l'élimination de l'étendue, en éliminant tous les modules de performance de la liste qui ne contiennent que des données en dehors de la plage de ce que la requête requiert.
- Le module utilisateur envoie ensuite des commandes à un ou plusieurs modules de performance pour effectuer des opérations d'E/S de bloc.
- Le ou les modules de performance effectuent le filtrage des prédicats, le traitement des jointures, l'agrégation initiale des données à partir du stockage local ou externe, puis renvoient les données au module utilisateur.
- Le module utilisateur effectue l'agrégation finale de l'ensemble de résultats et compose l'ensemble de résultats pour la requête.
- Le module utilisateur / ExeMgr implémente tous les calculs de fonction de fenêtre, ainsi que tout tri nécessaire sur le jeu de résultats. Il renvoie ensuite le jeu de résultats au serveur.
- Le serveur MariaDB exécute toutes les fonctions de liste de sélection, les opérations ORDER BY et LIMIT sur l'ensemble de résultats.
- Le serveur MariaDB renvoie le jeu de résultats au client.
Comment installer MariaDB ColumnStore
Maintenant, voyons comment l'installer. Pour plus d'informations, vous pouvez consulter la documentation officielle de MariaDB.
Nous utiliserons CentOS 7 comme système d'exploitation, mais vous pouvez utiliser n'importe quel système d'exploitation pris en charge à la place. Les packages d'installation sont disponibles en téléchargement ici.
Tout d'abord, vous devrez installer le référentiel Extra Packages :
$ yum install -y epel-release
Ensuite, les packages requis suivants :
$ yum install -y boost expect perl perl-DBI openssl zlib snappy libaio perl-DBD-MySQL net-tools wget jemalloc numactl-libs
Et maintenant, téléchargeons la dernière version de MariaDB ColumnStore, décompressez-la et installez-la :
$ 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
Lorsqu'il est terminé, vous verrez le message suivant :
La prochaine étape est :
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
Donc, pour cet exemple, exécutons simplement la commande :
$ /usr/local/mariadb/columnstore/bin/postConfigure
Maintenant, il vous demandera quelques informations sur l'installation :
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
Exécutez le script généré :
$ . /etc/profile.d/columnstoreAlias.sh
Vous pouvez maintenant accéder à la base de données en exécutant la commande "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)]>
C'est tout. Maintenant, vous pouvez charger des données dans votre base de données MariaDB ColumnStore.
Conclusion
Columnar Storage est une excellente alternative de stockage de base de données pour gérer les données à des fins d'analyse. MariaDB ColumnStore est un moteur de stockage en colonnes conçu pour cette tâche, et comme nous avons pu le voir, l'installation est assez simple, donc si vous avez besoin d'une base de données OLAP ou traitez des données volumineuses, vous devriez l'essayer.