Présentation effectuée à PHP Quebec (Septembre 2014) "MariaDB à l'assaut des developpeurs... PHP, Python,, Ruby, Java..." par Christophe Villeneuve.
Après une présentation générale, nous verrons quelques fonctionnalités de la base de données MariaDB et les principaux Moteurs de Stockages utiles pour les développeurs
3. Sommaire
● Histoire & ses forks
● MySQL 5.x → MariaDB 5.x
● MariaDB 10.x
● Les bases
● MariaDB pour vos développements
4. L'origine Dates importantes
Le 4 sept. 2014
✔ Fondé par
✔ Monty Widenius
✔ David Axmark
✔ 1983 – 1ère idée
✔ Fondé en 1995
✔ 2007 Préparation pour
Nasdaq
✔ 2008 Rachat par Sun
✔ 2009 Sun racheté par
Oracle
✔ Promesse de Oracle sur
5 ans (fin 2014)
Histoire de début
5. Le 4 sept. 2014
✔ De nos jours... MySQL Forks
✔ N° 1 dans le monde
✔ 50k Download (depuis
2003)
✔ + 13M installation active
✔ MySQL Oracle
✔ Drizzle
✔ Percona
✔ MariaDB
Et maintenant
8. Le 4 sept. 2014
Les grandes dates de MySQL
✔ 1983
✔ 1995 Création de MySQL
✔ 1999 MySQL 3.23
✔ 2000 InnoDB
✔ 2003 MySQL 3.23 GA
✔ 2004 MySQL 4.1 GA
✔ 2005 Oracle avec InnoDB
✔ 2005 MySQL 5.0 GA
✔ 2008 MySQL 5.1GA(Sun)
✔ 2010 MySQL 5.5 GA
(Oracle)
✔ 2011 Modules de codes
source fermé
✔ 2013 MySQL 5.6 GA
✔ 2013 (dec) MySQL 5.7
9.
10. Le 4 sept. 2014
✔ Mi 2008 début
✔ Mars 2011 1er GA
✔ Version redessinée de
MySQL 6.0
✔ Basé sur Micro-kernel
+ simple & + léger
✔ En ligne de commande
✔ BDD du coté serveur
✔ GPL v2
Drizzle les points forts
11.
12. Le 4 sept. 2014
Les étapes de Percona Server
✔ Dec 2008 : 1ère released
✔ 2010 Percona 5.5
✔ Juin 2013 Percona 5.6
✔ XtraDB au lieu de InnoDB
✔ Plus d'instrumentation
✔ Nombreux outils
✔ Amélioration Restart
✔ Performance
✔ Statistiques
13.
14. Le 4 sept. 2014
MariaDB : un jeune projet... MATURE
✔ Communauté d'amis
✔ 100 % Open source et
compatible MySQL
✔ Plateforme d'innovation
✔ Des commiteurs
✔ Dec 2008 Création de
Monty Program
→ Monty Widenius
✔ MariaDB 5.1 (Fev 2010)
✔ MariaDB 5.2 (Nov 2010)
✔ MariaDB 5.3 (Avril 2012)
✔ MariaDB 5.5 (Avril 2012)
✔ MariaDB 10.0a (Nov 2012)
1er semestre 2013
✔ 2013 Fondation
Compression Multimaster
Replication
Galera people ✔ 2013 MariaDB 10.0.1
19. Le 4 sept. 2014
En un mot... MariaDB vs MySQL
✔ Plus de storages
✔ Vitesse
✔ Innodb, replication, stockage...
✔ Nombreuses extensions et fonctionnalités
✔ Colonnes virtuelles, colonne dynamique, multi...
✔ Plus de tests
✔ Tests correctifs, réactivités...
✔ Code source ouvert
✔ Développé par la communauté
21. Le 4 sept. 2014
Connecteurs
✔ PHP (driver natif) → BSD licence
✔ Python
✔ Perl
✔ Ruby
✔ .NET avec MyODBC
✔ JDBC (basé sur drizzle driver)
✔ C
✔ Oracle connector (licence GPL)
Tous sont LGPL → Aucune licence commerciale
22. Outils de dev : Environnement embarqué
Le 4 sept. 2014
✔ EasyPHP
✔ Xampp
✔ WampServer
✔ PHPserver
✔ WampMSS
✔ Neard
23. Le 4 sept. 2014
Exemple 1 : wampserver
✔ DL MariaDB (http://mariadb.org)
✔ Installer dans 1 dossier MySQL
✔ Déplacer les BDD sauvegardées data
✔ Lancer Wampserver
24. Exemple 2 : PHPServer
✔ DL PHPServer
http://www.treshaut.net/viewtopic.php?t=28&p=71
Le 4 sept. 2014
✔ Installation
25. Exemple 2 : PHPServer avec phpMyAdmin
Le 4 sept. 2014
26. Exemple 3 : Linux
✔ sudo apt-get install mariadb-server mariadb-client
Le 4 sept. 2014
✔ Vous retrouvez :
✔ /etc/mysql/my.cnf
✔ > mysql
✔ Au final
27. Backup Pour vos requêtes
Le 4 sept. 2014
✔ MySQLdump
✔ XtraBackup
✔ mysqlhotcopy (MyISAM)
✔ XtraBackup manager
(PHP)
✔ ...
✔ MySQL Workbench
✔ SkySQL visual Editor
(SQLYog)
✔ HeidiSQL
✔ PhpMyAdmin
✔ Toad For MySQL
✔ ...
Outils
28. Le 4 sept. 2014
Dispo dans MariaDB 10.0
✔ Moteur de stockage (storages engines) natif
✔ Réplication multisource
✔ NOW() à la place de DATETIME
✔ Amélioration des informations erreurs
✔ Amélioration schéma de performance
✔ InnoDB
✔ Replication
✔ Statistics & Monitoring
✔ Optimizer
✔ Performance
30. ✔ Précision date-heure
Le 4 sept. 2014
✔ Avant
✔ TIME
✔ DATETIME
✔ TIMESTAMP
✔ Dispo MariaDB 5.3+
✔ temporal functions
✔ CAST
✔ dynamic columns
Les fonctions (1/5)
Microseconds
31. Avant MariaDB 5.3+
Le 4 sept. 2014
✔ Create table t1 (d
DATETIME) ;
✔ Insert INTO t1 values....
✔ Select * from t1 ;
✔ Create table t2 (d
DATETIME (6) ) ;
✔ Insert Into t2 values
('2011-03-11'),
('2012-04-19 13:08:22'),
('2013-07-18 13:44:22.123456');
✔ Select * from t2 ;
Exemple (Microseconds)
32. ✔ Dispo MariaDB 5.2+
✔ Colonne dans une table
qui sa valeur calculée
automatiquement
Le 4 sept. 2014
✔ 2 types :
✔ VIRTUAL : sur le
principe d'une vue
✔ PERSISTENT : Calculé
lorsque les données sont
insérées et stockées dans
une table
Les fonctions (2/5)
Microseconds
Colonnes virtuelles
Source : https://mariadb.com/kb/en/virtual-columns/
33. Le 4 sept. 2014
Exemple (Colonnes Virtuelles) (1/2)
✔ CREATE TABLE table1 (
a INT NOT NULL,
b VARCHAR(32),
c INT AS (a mod 10) VIRTUAL,
d VARCHAR(5) AS (left(b,5)) PERSISTENT
);
✔ DESCRIBE table1;
34. Le 4 sept. 2014
Exemple (Colonnes Virtuelles) (2/2)
✔ INSERT INTO table1 VALUES
✔ (1, 'some text',default,default),
✔ (2, 'more text',5,default),
✔ (123, 'even more text',default,'something');
✔ Select * from table1;
36. Le 4 sept. 2014
Exemple (PCRE) (1/2)
✔ Fonction de remplace
✔ SELECT REGEXP_REPLACE('ab12cd','[0-9]','') AS r;
→ abcd
✔ Retourne 1ère position
✔ SELECT REGEXP_INSTR('abc','b') ;
→ 2
✔ SELECT REGEXP_INSTR('hello','o') ;
→ 5
37. Exemple (PCRE) (2/2)
✔ Retourne la partie correspondante d'une chaine
Le 4 sept. 2014
✔ SELECT REGEXP_SUBSTR(
'http://www.phpquebec.org/content/contact',
'https?://[^/]*')
FROM...
→ http://www.phpquebec.org
38. ✔ Dispo MariaDB 10+
✔ Inspiré de PostgreSQL
✔ Supprimer les opérations
qui renvoient un ensemble
de ligne supprimées
Le 4 sept. 2014
Les fonctions (4/5)
Microseconds
Colonnes virtuelles
PCRE
Delete... Returning
40. ✔ Dispo MariaDB 5.3+
✔ Pont entre les BDD
relationnelles et non
relationnelles
✔ Toutes les colonnes
stockées dans un 'blob'
✔ Possibilité de manipuler
✔ Possibilité de créer des
index virtuels
Le 4 sept. 2014
Les fonctions (5/5)
Microseconds
Colonnes virtuelles
REG EXP
Delete... Returning
Colonnes Dynamiques
41. Le 4 sept. 2014
Exemple (colonne dynamique) 1/2
CREATE TABLE t1 (
ID int
auto_increment
primary key,
Type_id int,
Prix decimal(7,2),
extra blob
);
COLUMN_CREATE(
column_nr,
value [as type],
[
column_nr,
value [as type]
],
...)
ID type_id Prix blob
42. INSERT into t1 values (NULL, 1 , 10, COLUMN_CREATE(1, 'bleu', 2 , 'M'));
INSERT into t1 values (NULL, 2 , 400, COLUMN_CREATE(3, 'RAM', 5 , 800));
UPDATE t1 SET extra = COLUMN_ADD(extra, 6 , 2048) WHERE id=2;
C1oloris Taille Materiel Mhz option
Le 4 sept. 2014
Exemple (colonne dynamique) 2/2
ID type_id Prix 1 2 3 4 5 6
1 1 10 bleu M
2 2 400 Ram 800 2048
45. Le 4 sept. 2014
Moteur de stockage : SphinxSE
● Dispo MariaDB 5.2+
● Recherche Full-text
● Ne stocke pas les données
● Client haut pour permettre à MariaDB de parler à
Sphinx searchd
● Installation dans My.cnf
[mysqld]
plugin-load= 'ha_sphinx.so';
46. Entier
Poids
Votre
requete
Group
Indexation
Requete
Le 4 sept. 2014
Exemple SphinxSE
● CREATE TABLE t1 (
id INTEGER UNSIGNED NOT NULL,
weight INTEGER NOT NULL,
query VARCHAR(3072) NOT NULL,
group_id INTEGER,
INDEX(query)
) ENGINE=SPHINX
CONNECTION="sphinx://localhost:9312/test";
● SELECT * FROM t1 WHERE query='test it;mode=any';
47. Le 4 sept. 2014
Moteur de stockage : CassandraSE
● Dispo MariaDB 10.0+
● Brique de Apache Cassandra
● Données non relationnelles (NoSQL)
● Assurer l'intégration des données SQL / NoSQL
● Mapping possible
● Manipulations :
static columns, dynamic columns, rowkey
● Installation dans My.cnf
[mysqld]
plugin-load=ha_cassandra.so
49. Le 4 sept. 2014
CassandraSE : Utilisation (2/2)
> insert into t1 values
('rowkey10', 'data1-value', 123456),
('rowkey11', 'data1-value2', 34543);
> select * from t1 where rowkey='rowkey11';
50. Le 4 sept. 2014
Moteur de stockage : Connect
● Dispo MariaDB 10.0+
● ETL : Extract, transform et 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
51. Le 4 sept. 2014
Connect : exemple CSV
● Fichier
– first,last,birthday
– "Christophe","Villeneuve","Jan 1"
– "PHP","Quebec","Sep 4"
> 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;
> SELECT * FROM users_csv;
| first | last | birthday |
+---------------+---------------+-------------+
| Christophe | Villeneuve | Jan 1 |
| PHP | Quebec | Sep 4 |
+---------------+---------------+-------------+
52. Le 4 sept. 2014
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
Valeur de sum(qt)
53. Le 4 sept. 2014
Moteur de stockage : TokuDB
● Natif dans MariaDB 5.5 & MariaDB 10.0+
● (R)Tokutek & MariaDB
● Technique utilise l'arbre fractal
– Amélioration indexation
– Amélioration des requêtes
● Schéma de vitesse
● Compression
● Réplication
● Souple
55. Le 4 sept. 2014
Moteur de stockage : Spider (v3)
● Dispo MariaDB 10.0+
● Moteur de stockage fédérés comme
– Sharding / partitionnement *
– Transactions *, XA
– Intégré dans le pool de connexion
– Haute disponibilité Cluster SharedNothing
● Load balancing :
– Accès par Spider cluster avec plusieurs serveurs
MariaDB
57. Le 4 sept. 2014
Moteur de stockage : Les autres
● XtraDB (MariaDB 10.0.9)
– Fork de InnoDB (Full compatible)
● Aria appelé Maria (MariaDB 5.1)
– Anciennement MyISAM
● Mroonga (MariaDB 10.0)
– fulltext searches with Chinese, Japanese and Korean languages
● Oqgraph (MariaDB 10.0)
– Utilisé pour mettre en oeuvre des structures d'arbres
● Sequence (MariaDB 10.0)
– Retourne une séquence de nombres comme un jeu de résultats
● FederatedX (MariaDB 10.0)
– Fork de Federated
https://mariadb.com/kb/en/mariadb/documentation/storage-engines/
58. Le 4 sept. 2014
✔ Distributions
✔ OpenSUSE 12.3
✔ Gentoo
✔ FreeBSD
✔ Homebrew
✔ Slackware
✔ ArchLinux
✔ Debian / Ubuntu
✔ Fédora 7.0
✔ Redhat
✔ ...
✔ Dec 2012 Wikipedia
✔ 2013
✔ Blog de Mozilla
✔ Google Developer
Ceux qui ont déjà sauté...