Upload
christophe-villeneuve
View
881
Download
6
Embed Size (px)
DESCRIPTION
Présentation effectuée à l'Open Source Developers Conference (OSDC.fr) 2014 sur "Mariadb pour les développeurs" par Christophe Villeneuve
Citation preview
MariaDB pour les développeurs
Christophe Villeneuve@hellosct1
Qui... est Christophe Villeneuve ?
<<
afup – lemug.fr – mysql – mariadb – drupal – demoscene – firefoxos – drupagora – phptour – forumphp – solutionlinux – demoinparis – ici et maintenant – eyrolles – editions eni – programmez – linux pratique – webriver – phptv – neuros - elephpant
Les points d'aujourd'hui
● Une histoire simple● MySQL 5.x ←→ MariaDB 5.x● MariaDB 10.x● Les bases● MariaDB dans vos développements
✔ 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)
L'origine Dates importantes
Une histoire simple
✔ N° 1 dans le monde
✔ 500k Download (depuis 2003)
✔ + 13M installation active
✔ MySQL Oracle
✔ Drizzle
✔ Percona
✔ MariaDB
✔ De nos jours... MySQL Forks
Et maintenant
✔ 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✔ MariaDB 10.0.14 (Sept 14)Galera people
Compression Multimaster Replication
MariaDB : un jeune projet... MATURE
GO MariaDB
5.x 5.x
Compatibilité
✔ MariaDB 5.1 → MySQL 5.1
✔ MariaDB 5.2 → MariaDB 5.1
✔ MariaDB 5.3 → MariaDB 5.2
✔ MariaDB 5.5 → MariaDB 5.3 + MySQL 5.5
✔ MariaDB 10.0 → MariaDB 5.5 + MySQL 5.6
✔ MariaDB 5.6 → MariaDB 5.5 + MySQL 5.6
Fin 2014 ou début 2015
✔ MariaDB 10.1 → MariaDB 10.0 + MySQL 5.6/5.7
Repère des versions
Apprentissage
✔ 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é
En un mot... MariaDB vs MySQL
https://blog.mariadb.org/performance-evaluation-of-mariadb-10-1-and-mysql-5-7-4-labs-tplc/
Performance MariaDB 10.1 et MySQL 5.7.4
✔ 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
Connecteurs
✔ EasyPHP
✔ Xampp
✔ WampServer
✔ PHPserver
✔ WampMSS
✔ Neard
Outils de dev : Environnement embarqué
✔ DL MariaDB (http://mariadb.org)
✔ Installer dans 1 dossier MySQL
✔ Déplacer les BDD sauvegardées \data\
✔ Lancer Wampserver
Exemple 1 : wampserver
✔ DL PHPServer
http://www.treshaut.net/viewtopic.php?t=28&p=71✔ Installation
Exemple 2 : PHPServer
Exemple 2 : PHPServer avec phpMyAdmin
✔ sudo apt-get install mariadb-server mariadb-client
✔ Vous retrouvez :✔ /etc/mysql/my.cnf✔ > mysql
✔ Au final
Exemple 3 : Linux
✔ MySQLdump
✔ XtraBackup
✔ mysqlhotcopy (MyISAM)
✔ XtraBackup manager (PHP)
✔ ...
✔ MySQL Workbench
✔ SkySQL visual Editor (SQLYog)
✔ HeidiSQL
✔ PhpMyAdmin
✔ Toad For MySQL
✔ ...
Backup Pour vos requêtes
Outils
✔ 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
Dispo dans MariaDB 10.0
5.x10.x
✔ Précision date-heure✔ Avant
✔ TIME ✔ DATETIME✔ TIMESTAMP
✔ Dispo MariaDB 5.3+✔ temporal functions✔ CAST✔ dynamic columns
Microseconds
Les fonctions (1/5)
✔ 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 ;
Avant MariaDB 5.3+
Exemple (Microseconds)
✔ Dispo MariaDB 5.2+✔ Colonne dans une table qui sa valeur calculée automatiquement✔ 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
Microseconds
Colonnes virtuelles
Les fonctions (2/5)
Source : https://mariadb.com/kb/en/virtual-columns/
✔ 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;
Exemple (Colonnes Virtuelles) (1/2)
✔ INSERT INTO table1 VALUES ✔ (1, 'some text',default,default),✔ (2, 'more text',5,default),✔ (123, 'even more text',default,'something');
✔ Select * from table1;
Exemple (Colonnes Virtuelles) (2/2)
✔ Dispo MariaDB 10.0+✔ Expressions régulières✔ Compatible
✔ REGEXP✔ RLIKE operator
✔ Fonctionne✔ Multi caractères
Microseconds
Colonnes Virtuelles
PCRE
Les fonctions (3/5)
Source : https://mariadb.com/kb/en/pcre-regular-expressions/
✔ Fonction de remplace ✔ SELECT REGEXP_REPLACE('ab12cd','[0-9]','') AS r;
→ abcd
Exemple (PCRE) (1/2)
✔ Retourne 1ère position✔ SELECT REGEXP_INSTR('abc','b') ;
→ 2✔ SELECT REGEXP_INSTR('hello','o') ;
→ 5
✔ Retourne la partie correspondante d'une chaine✔ SELECT REGEXP_SUBSTR(
'https://www.osdc.fr/content/contact',
'https?://[^/]*')✔
→ https://www.osdc.fr
Exemple (PCRE) (2/2)
✔ Dispo MariaDB 10+✔ Inspiré de PostgreSQL✔ Supprimer les opérations qui renvoient un ensemble de ligne supprimées
Microseconds
Colonnes virtuelles
PCRE
Delete... Returning
Les fonctions (4/5)
✔ DELETE FROM tests WHERE status = 'DONE' RETURNING *;
✔ → 5
Exemple (Delete...returning)
✔ 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
Microseconds
Colonnes virtuelles
REG EXP
Delete... Returning
Les fonctions (5/5)
Colonnes Dynamiques
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]
],
...)
Exemple (colonne dynamique) 1/2
ID type_id Prix blob
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;
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
1 Taille MaterielColoris Mhz option
Exemple2 (colonne dynamique)
Moteur de stockagestorage engine
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';
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';
Poids
Entier
Votre requete
Indexation Requete
Group
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
CassandraSE : Utilisation (1/2)
> create table t2 (rowkey varchar(36) primary key,
data1 varchar(60),data2 varchar(60)) engine=cassandrakeyspace='mariadbtest'thrift_host='localhost'column_family='cf1';
Clé primaire obligatoire
Colonnes statiques
Sous ensemble des colonnes CF
CassandraSE : Utilisation (2/2)
> insert into t1 values
('rowkey10', 'data1-value', 123456),
('rowkey11', 'data1-value2', 34543);
> select * from t1 where rowkey='rowkey11';
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
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;
> SELECT * FROM users_csv;
| first | last | birthday |
+---------------+---------------+-------------+
| Christophe | Villeneuve | Jan 1 |
| PHP | ODBC | Nov 22 |
+---------------+---------------+-------------+
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)
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
TokuDB : exemple
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
Spider : Exemple
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 œuvre 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 Federatedhttps://mariadb.com/kb/en/mariadb/documentation/storage-engines/
Merci
● MariaDB : https://mariadb.com/kb/en/
● Planet mariaDB : http://planetmariadb.org/
● Blog http://serge.frezefond.com/
Ressources