Présentation effectuée pendant la piscine du POC Innovation de Epitech (15 février 2022) par Christophe Villeneuve avec Sébastien "MariaDB : une base de données NewSQL".
Après un tour d'horizon de l'évolution des bases de données, nous nous intéresserons sur la base de données MariaDB qui propose le NewSQL (NoSQL + SQL) et ces différents storages engines disponibles. Ainsi chaque problématique projet peut être couverte par celle-ci.
4. ● Les bases de données
● Pourquoi MariaDB ?
● Que fait-on avec MariaDB ?
5. Qu’est ce ?
Une base données permet de stocker et de retrouver
● Données structurées
● Données semi-structurées
● Données brutes
● De l'information Les grandes familles :
● Relationel, Multi-modèle
● Document
● Key-value
● Relationel, Multi-colonne
6. SGBD
● = Système de gestion de base de
données
● Système servant
○ à stocker
○ à manipuler
○ à partager des données
dans une base de données
● Garantir
○ la qualité
○ la pérennité
○ la cohérence
○ la confidentialité des informations
tout en masquant la complexité des
opérations.
9. ● Les bases de données
● Pourquoi MariaDB ?
● Que fait-on de MariaDB ?
10. Histoire de MariaDB
L’origine
Fondé par
● Michael Monty Widenius
● David Axmark
● 1983 - 1ères idées
● Fondé en 1995
● 2007 Préparation pour Nasdaq
● 2008 Rachat par Sun
● 2009 Sun racheté par Oracle
Dates importantes
11. MariaDB Corp and Foundation
● Protège et garantie la liberté
du code source
● MariaDB restera Open Source
● De plus en plus de moteur
disponibles
● Alimenté par la communauté
et MariaDB Corp
● https://mariadb.org
Foundation
● Propose l'expérience requise et
attendue par les entreprises
● Fournit un support 24/7
● Offre des hotfix en cas de
besoins à chaque clients
● Fournit un accès illimité aux
ingénieurs de MariaDB
● https://mariadb.com
Corporation
12. What is MariaDB value added
What is MariaDB
MariaDB release the power of several storage engine simultaneously
● Choose the storage engine per table
○ One database can be splitted on several storage engines simultaneously
○ Use of Smart router allow several storage usage for one single query
● Allow to perform join on several storage engines
● Some awesome new storage engines
○ MariaDB ColumnStore for very fast analytics
○ MariaDB Xpand for distributed transaction SQL and analytic capabilities
● Plenty of possible architectures
13. MariaDB : Un projet mature
● Communauté d’amis
● 100 % Open source
● Plateforme innovation
● Modèle de gouvernance
○ Free Software Foundation
○ pour le projet GNU.
● 2008 Création de Monty
Program
● 2010 MariaDB 5
● 2012 MariaDB 10
● 2013 Fondation
● 2013 NewSQL (NoSQL + SQL)
● 2015 MaxScale
● …
16. MariaDB 10.6
● Atomic DDL (modification de schéma effectué en une seule opération)
https://mariadb.com/kb/en/atomic-ddl/
● IPv6 by Default
● JSON_TABLE() returns a table from JSON data.
● XA Transactions are supported on Galera
● Oracle compatibility increased
17. MariaDB 10.6
New release, new release number
● MariaDB Enterprise Server and Community Server 10.6
● MariaDB MaxScale 6.1
● MariaDB ColumnStore 6.1
● MariaDB Xpand 6.0 (with Columnar index)
○ First step towards a distributed HTAP DB
○ Preliminary benchmarks show a gain of 3x-50x for analytics (aggregations)
18. MariaDB Community Server 10.6.4
● JSON_TABLE
● SYS_SCHEMA
● Ignore Index
● Atomic DDL
● Compatibility enhancements
Features also included in MariaDB Enterprise 10.6 release
19. https://mariadb.com/docs/features/mariadb-enterprise-server/
MariaDB Enterprise server 10.6
● Galera XA support
● Sybase compatibility
● Oracle compatibility (ROWNUM, ADD_MONTHS, TO_CHAR)
● ARM support
● Object filters for Enterprise Audit (backport on 10.4+)
● Sybase SQL Anywhere compatible alias handling (backport on 10.5)
● Enhanced consistency for Semi-Sync Replication (backport on 10.3+)
● MariaDB Global Transaction ID replication to other Galera nodes (backport on
10.4 from 10.5)
22. SkySQL FIRSTS
Smart Transactions
The first DBaaS to support
transactional (OLTP),
analytical (OLAP) and hybrid
(HTAP) workloads for Smart
Transactions.
From the Source
A DBaaS architected,
engineered, and supported
by database architects,
engineers, and extraordinary
support.
Community to
Mission Critical
Expansive Topologies for all
Applications Tiers.
SkySQL
Always On,
Always Ready
The cloud offering the latest
bug fixes and security
updates, always.
23. Le cloud version MariaDB
● Kubernetes for databases
● ServiceNow for the portal
● Prometheus and Grafana for
the monitoring dashboard
● Deep learning for the
workload analysis
Platform
● MariaDB Platform
● MariaDB Enterprise Server
● MariaDB MaxScale
● MariaDB ColumnStore
Database
● Database bug fixes and
security patches (code)
● Database administration
with SkyDBA
Support
● Databases for transactions
● Data warehouses for analytics (columnar)
● Databases for smart transactions (row + columnar)
● Transparent query routing
Features
24.
25. MariaDB SkySQL – Use it, don’t manage it
● Automated
● Automatic backups
● Restore on demand
● Automatic scaling
● Monitoring included
● Backed and supported by the team that built MariaDB
● SkyDBA – Your SkySQL DBA
26. ● Les bases de données
● Pourquoi MariaDB ?
● Que fait-on de MariaDB ?
27. https://mariadb.com/kb/en/storage-engines/
No SQL
- MongoDB
- Cassandra
- …
DBA
- InnoDB
- MyISAM
- XtraDB
Alias / Migration
- Connect
- SQL_mode
Autre
- Memory
- Merge
- OQGraph
- S3
- TokuDB
- SphinxSE
- …
Front
- MaxScale
Big Data
- Colonnes
Dynamiques
Développeur
- PCRE
- Microseconds
- Colonnes Virtuelles
- Sequence engine
- …
28. MariaDB ColumnStore (⅓)
Moteur de stockage orienté en colonnes
● Utilise une architecture de données distribuées massivement parallèle
● Système de stockage en colonnes
● Utile pour le Big Data
● Architecture (en parallèle)
○ Exécution de requêtes distribuée
○ Chargement de données
Depuis la version 10.5.4
● Disponible en tant que moteur de stockage pour le serveur MariaDB
○ Avant cela, il est uniquement disponible en téléchargement séparé.
31. New Storage engines - ColumnStore
MariaDB Enterprise ColumnStore is a columnar storage engine for
● online analytical processing (OLAP)
● data warehousing
● business intelligence
● hybrid transactional-analytical processing (HTAP)
MariaDB Enterprise ColumnStore is included with MariaDB Enterprise Server.
32. New Storage engines - ColumnStore
MariaDB Enterprise ColumnStore is included with MariaDB Enterprise Server.
● Increased maximum DECIMAL precision to 38
● Disk-based aggregation allows larger aggregated result sets than can fit in
memory (for queries on billions rows)
● Transactional tables can be updated with data from ColumnStore tables
● Multi user / Concurrency Architectural Change
● Circular Join Support
● Automatic Select Handler (Server vs Engine)
● Added LZ4 compression
● Added encrypted password support for config files
● Dozens of performance and compatibility improvements
33. Colonne dynamique
● Pont entre les BDD relationnelles et non relationnelles
● Toutes les colonnes stockées dans un « blob »
● Possibilité de le manipuler
● Possibilité de créer des index Virtuels
10
34. Colonnes Dynamiques (¼)
create table newsql(
id int
auto_increment
primary key,
nom varchar(40),
type enum
('animal',
'ordinateur'),
prix int,
nosql blob);
COLUMN_CREATE(
column_nr,
value [as type],
[
column_nr,
value [as type]
],
...)
10
37. Colonnes Dynamiques (4/4)
>SELECT nom, COLUMN_JSON(nosql) FROM newsql;
>SELECT id,type,nom,
COLUMN_GET(nosql, 'couleur' as char) AS couleur,prix FROM newsql;
10
38. Connect
● ETL : Extract Transform Load
● Lecture / Ecriture / MAJ
○ TXT, DBF, INI, XML
○ MS Access, MS Excel, TBL (similaire à MERGE)
○ ODBC, MySQL,SQLite, Oracle, DB2, WMI...
● Locale ou distant
● Custom possible
● Accès en parallèle sur multitables Installation dans My.cnf
[mysqld]
plugin-load=ha_connect.so
39. Connect : exemple CSV
Fichier
first,last,birthday
"Christophe","Villeneuve","Jan 1"
"PHP","ODBC","Nov 22"
> CREATE TABLE users_csv (
first varchar(32) NOT NULL,
last varchar(32) NOT NULL,
birthday varchar(50) NOT NULL
) ENGINE=CONNECT TABLE_TYPE =CSV FILE_NAME ='/var/lib/mysql/users.csv'
HEADER=1 SEP_CHAR=',' QUOTED=1;
40. Connect : exemple ODBC
> create Table table2
ENGINE=CONNECT TABLE_TYPE=ODBC
SRCDEF='select key, sum(l_quantity) qt from dbt3.table1 group by key'
CONNECTION='DSN=oracle;UID=login;PWD=password';
> MariaDB [dbt3]> select sum(qt) from (select qt from table2) as result;
→ 31444
42. JSON en fonctions (⅓)
> CREATE TABLE products(
id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
name
VARCHAR(255) NOT NULL,
price
DECIMAL(9,2) NOT NULL,
stock
INTEGER NOT NULL,
attr
VARCHAR(1024),
CHECK (
attr IS NULL OR JSON_VALID(attr))
);
43. JSON en fonctions (⅔)
● Ajoute une nouvelle colonne et extrait les attributs ‘colour’
> ALTER TABLE products ADD attr_colour VARCHAR(32) AS (JSON_VALUE(attr, '$.colour'));
> CREATE INDEX products_attr_colour_ix ON products(attr_colour);
> INSERT INTO products VALUES(NULL, 'Jeans', 10.5, 165, NULL);
Query OK, 1 row affected (0.01 sec)
> INSERT INTO products VALUES(NULL, 'Shirt', 10.5, 78, '{"size": 42, "colour": "white"}');
Query OK, 1 row affected (0.01 sec)
> INSERT INTO products VALUES(NULL, 'Blouse', 17, 15, '{"colour": "white"}');
Query OK, 1 row affected (0.01 sec)
44. JSON en fonctions (3/3)
> SELECT * FROM products WHERE attr_colour = 'white';
45. JSON en table (¼)
> CREATE TABLE people (
id INT NOT NULL,
name VARCHAR(50) NOT NULL,
pets JSON
);
46. JSON en table (2/4)
> SELECT
id,
JSON_VALUE(JSON_QUERY(pets, CONCAT('$[', ind.ind, ']')), '$.type') pet_type,
JSON_VALUE(JSON_QUERY(pets, CONCAT('$[', ind.ind, ']')), '$.name') pet_name
FROM
people CROSS JOIN
(SELECT 0 AS ind UNION ALL SELECT 1 AS ind) ind;
50. Spider (½)
● Moteur de stockage fédérés comme
○ Sharding / partitionnement
○ Transactions
● Intégré dans le pool de connexion
● Haute disponibilité Cluster Shared-Nothing
● Load balancing :
○ Accès par Spider cluster avec plusieurs serveurs MariaDB
10.5
53. https://mariadb.com/products/enterprise/xpand/
New Storage engines - Xpand
● Shared-nothing architecture
● Elasticity (i.e., add/remove nodes on demand)
● Self-managing (i.e., automatic rebalancing)
● ACID transactions
● Standard SQL (including JOINs)
● Continuous availability (i.e., automatic failover)
● MariaDB/MySQL or Postgres clients
● Session failover
● Dynamic load balancing
● Allow transactions AND analytics queries on one single dataset
54. https://mariadb.com/products/enterprise/xpand/
New Storage engines - Xpand workloads
● Need very fast reads and writes
○ Customers expect an instant response
○ Scaling out in order to operate at the speed of memory
● Need to support lots of concurrent queries
○ Many customer interactions, each one results in multiple queries
○ Scaling out to support more concurrent processing
● Need to sustain lots of writes
○ More writes than reads, write needs to be very fast
○ Scaling out to increase disk IO
● Need to store a lot of data
○ Lots of customers, sessions, shopping carts and so on
○ Scaling out to increase storage capacity
55. https://github.com/mariadb-corporation/MaxScale
MariaDB MaxScale
● Proxy de base de données qui étend
○ la haute disponibilité
○ l'évolutivité
○ la sécurité du serveur MariaDB
○ permet le routage transparent des requêtes
● Simplifie le développement des applications
○ En les découplant de l'infrastructure de base de données sous-jacente.
● NoSQL
○ MongoDB / Cassandra…
57. https://mariadb.com/docs/features/mariadb-maxscale/
MariaDB MaxScale 6
Maxscale introduced some exciting new features
● NoSQL protocol (Mongo API) support and compatibility
● Kafka Importer
● Allows user to stream data from a Kafka broker into MariaDB
● Kafka authentication and failover
● Visual Client/Query Editor
● MaxScale cluster configuration sync
● Increased log visibility through GUI and API
● Added prepared statement support to causal reads
● Several monitoring/UI related improvements
59. KAFKA IMPORTER
MariaDB MaxScale
Kafka
Le module KafkaImporter lit
les messages de Kafka et les diffuse dans un serveur MariaDB.
Les messages sont insérés dans une table désignée
soit par le nom du sujet, soit par la clé du message
60. NOSQL DOCUMENT PROTOCOL
MariaDB
MaxScale
id doc
App
MaxScale 6 - https://mariadb.com/developers/
Le module nosqlprotocol permet d'utiliser un serveur ou un cluster MariaDB
comme backend d'une application utilisant une bibliothèque client MongoDB®.
En interne, tous les documents sont stockés dans une table
contenant deux colonnes :
- une colonne id pour l'identifiant de l'objet
- une colonne doc pour le document lui-même.
64. Advice and examples of easy Oracle migration
● Syntaxe supportée en mode compatibilité Oracle pour les procédures stockées, les
fonctions, les curseurs, les boucles, variables, fonctions, requêtes préparés, etc :
https://mariadb.com/kb/en/sql_modeoracle/
● Compatibilité avec les packages
https://mariadb.com/kb/en/create-package/
● Quelques exemples de migrations sans refactorisation du code de l’application
○ Migration depuis Oracle vers MariaDB sans changement majeurs dans l’application -
Pickup Li - FOSDEM 2021 : https://www.youtube.com/watch?v=kQXpjCSt1So
○ Migration depuis Oracle vers MariaDB - Lixun Peng - MariaDB Server Fest 2020
https://www.youtube.com/watch?v=5pqEZ91zHsA
○ Un autre apercu de comment migrer depuis Oracle sans changement dans l’application
https://mariadb.com/fr/resources/blog/a-typical-journey-migrating-to-mariadb-from-oracle/
65. https://www.youtube.com/watch?v=hpxeaS7jlnk
En résumé
● MariaDB est fait pour vous, mais aussi pour tous
https://www.youtube.com/watch?v=hpxeaS7jlnk
● Il répond à toutes les attentes
● Avec des architectures simple, répliqués, distribuées
○ À chaud ou à froid
66. Merci
Nous retrouver :
● Slack https://r.mariadb.com/join-community-slack
● Twitter : https://twitter.com/lemug_fr
● Linkedin : https://www.linkedin.com/groups/1627237/
● Site web https://www.le-mug.fr
67. Quelques liens
● https://mariadb.com/developers/
● https://github.com/mariadb-corporation/mariadb-server-docker
● https://github.com/mariadb-corporation/MaxScale
● https://github.com/mariadb-corporation/maxscale-docker
● https://github.com/mariadb-corporation/MaxGui
● https://mariadb.com
● https://mariadb.org