php et mariadb dans le libre - jdll

56
 PHP & MariaDB dans le libre Christophe Villeneuve @hellosct1

Upload: christophe-villeneuve

Post on 18-Jul-2015

260 views

Category:

Internet


7 download

TRANSCRIPT

Page 1: Php et Mariadb dans le libre - JDLL

   

PHP & MariaDB dans le libre

Christophe Villeneuve@hellosct1

Page 2: Php et Mariadb dans le libre - JDLL

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

Page 3: Php et Mariadb dans le libre - JDLL

Les points d'aujourd'hui● Une histoire simple 

d'un langage et d'une BDD

● MySQL 5.x   MariaDB 5.x←→

● MariaDB 10.x● Les bases● MariaDB dans vos développements

Page 4: Php et Mariadb dans le libre - JDLL

PHP● 2015 : 20 ans● PHP Tour : 12 & 13 mai 2015● Forum PHP : 3eme Octobre 2015● 15 ans AFUP● PHP 7

Page 5: Php et Mariadb dans le libre - JDLL

   

Page 6: Php et Mariadb dans le libre - JDLL

   

✔ 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

Page 7: Php et Mariadb dans le libre - JDLL

   

✔ N° 1 dans le monde

✔ 500k Download (depuis 2003)

✔ + 13M installation active

✔ MySQL Oracle

✔ Drizzle

✔ Percona

✔ MariaDB

✔ De nos jours... MySQL Forks

Et maintenant

Page 8: Php et Mariadb dans le libre - JDLL

   

Page 9: Php et Mariadb dans le libre - JDLL

   

✔ 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.0 (Nov 2012)✔ 2013 Fondation✔ MariaDB 10.0.17 (Mars 15)✔ MariaDB 10.1Galera people

Compression Multimaster Replication

MariaDB : un projet mature

Page 10: Php et Mariadb dans le libre - JDLL

   

GO     MariaDB

Page 11: Php et Mariadb dans le libre - JDLL

   

5.x 5.x

Compatibilité

Page 12: Php et Mariadb dans le libre - JDLL

   

✔ 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→

2015

✔ MariaDB 10.1   MariaDB 10.0 + MySQL 5.6/5.7→

Repère des versions

Page 13: Php et Mariadb dans le libre - JDLL

   

Apprentissage

Page 14: Php et Mariadb dans le libre - JDLL

   

✔ 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

Page 15: Php et Mariadb dans le libre - JDLL

   

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

Page 16: Php et Mariadb dans le libre - JDLL

   

✔ 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→

Différents connecteurs avec MariaDB

Page 17: Php et Mariadb dans le libre - JDLL

   

Solution : Mise à jour 

https://downloads.mariadb.org/mariadb/repositories

✔ Paquet Repositories

Page 18: Php et Mariadb dans le libre - JDLL

   

✔ EasyPHP

✔ Xampp

✔ WampServer

✔ PHPserver

✔ WampMSS

✔ Neard

Outils de dev : Environnement embarqué

3 exemples : ­ 1 environnement déjà existant (Wampserver)­ 1 nouvel environnement (Neard)­ Linux

Page 19: Php et Mariadb dans le libre - JDLL

   

✔ DL MariaDB (http://mariadb.org)

✔ Installer dans 1 dossier MySQL

✔ Déplacer les BDD sauvegardées \data\

✔ Lancer Wampserver

Exemple 1 : wampserver (1/2)

Page 20: Php et Mariadb dans le libre - JDLL

   

Exemple 1 : Wampserver (2/2) avec phpMyAdmin 

Page 21: Php et Mariadb dans le libre - JDLL

   

✔ DL Neard✔ http://sourceforge.net/projects/neard✔ Installation

Exemple 2 : Neard

MySQL

MariaDB

Page 22: Php et Mariadb dans le libre - JDLL

   

✔ sudo apt-get install mariadb-server mariadb-client

✔ Vous retrouvez :✔ /etc/mysql/my.cnf✔ > mysql

✔ Au final

Exemple 3 : Linux

Page 23: Php et Mariadb dans le libre - JDLL

   

Au final par le code

<?php

echo phpinfo() ;

?>

Page 24: Php et Mariadb dans le libre - JDLL

   

Outils

✔ MySQL Workbench

✔ SkySQL visual Editor (SQLYog)

✔ HeidiSQL

✔ PhpMyAdmin

✔ Toad For MySQL

✔ ...

Pour vos requêtes

✔ MySQLdump

✔ XtraBackup

✔ mysqlhotcopy (MyISAM)

✔ XtraBackup manager (PHP)

✔ ...

Backup

Page 25: Php et Mariadb dans le libre - JDLL

   

 

Page 26: Php et Mariadb dans le libre - JDLL

   

✔ Précision date-heure✔ Avant

✔ TIME ✔ DATETIME✔ TIMESTAMP

✔ Dispo MariaDB 5.3+✔ temporal functions✔ CAST✔ dynamic columns

Microseconds

Les fonctions (1/5)

Page 27: Php et Mariadb dans le libre - JDLL

   

✔ 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)

Page 28: Php et Mariadb dans le libre - JDLL

   

✔ 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/

Page 29: Php et Mariadb dans le libre - JDLL

   

✔ 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)

Page 30: Php et Mariadb dans le libre - JDLL

   

✔ 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)

Page 31: Php et Mariadb dans le libre - JDLL

   

✔ 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/

Page 32: Php et Mariadb dans le libre - JDLL

   

✔ 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

Page 33: Php et Mariadb dans le libre - JDLL

   

✔ Retourne la partie correspondante d'une chaine✔ SELECT REGEXP_SUBSTR(

'http://www.jdll.org/pratique/#Train', 'https?://[^/]*')

→ https://www.jdll.org

Exemple (PCRE) (2/2)

Page 34: Php et Mariadb dans le libre - JDLL

   

✔ 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

Les fonctions (4/5)

Colonnes Dynamiques

Page 35: Php et Mariadb dans le libre - JDLL

   

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]

], 

...)

Exemple (colonne dynamique) 1/3

ID nom type Prix blob

Multi produits

Page 36: Php et Mariadb dans le libre - JDLL

   

Exemple (colonne dynamique) 2/3

>INSERT into newsql values (NULL, 'Atari' ,'ordinateur',500, COLUMN_CREATE('couleur', 'Noir', 'type' , 'STe'));

>INSERT into newsql values (NULL, 'elePHPant','animal',20, COLUMN_CREATE('taille', 'normal', 'description' , 'peluche'));

>UPDATE newsql SET nosql = COLUMN_ADD(nosql, 'couleur' , 'blue') WHERE id=2;

ID Nom type prix couleur type taille description

1 Atari Ordinateur 500 Noir Ste

2 elePHPant animal 20 bleu normal peluche

>SELECT nom, column_list (nosql) FROM newsql;

Multi produits

Page 37: Php et Mariadb dans le libre - JDLL

   

Exemple (colonne dynamique) 3/3>SELECT nom, COLUMN_JSON(nosql) FROM newsql;

>SELECT id,type,nom,

COLUMN_GET(nosql, 'couleur' as char) AS couleur,prix FROM newsql;

Multi produits

Page 38: Php et Mariadb dans le libre - JDLL

   

✔ Dispo MariaDB 10.0.3+✔ Une fonction en Storage Engine✔ Pas de création & pas de lecture de table✔ Principe

✔ Génère à la volée une séquence de nombres entiers

✔ Retourne le résultat✔ Fonction Disparait

✔Plugin : ha_sequence

Microseconds

Colonnes virtuelles

REG EXP

Les fonctions (5/5)

Sequence Engine

REG EXP

Colonnes Dynamiques

Page 39: Php et Mariadb dans le libre - JDLL

   

Exemple (Sequence Engine) 1/2

> select * FROM seq_1_to_3;

> select * FROM seq_5_to_1_step_2;

Page 40: Php et Mariadb dans le libre - JDLL

   

Exemple (Sequence Engine) 2/2✔ Calcul de date

Ex : Connaître le jour de la semaine d'une date donnée :

✔ exemple : Le 1er Janvier tombe… Quand ?

> SELECT DAYNAME('2015-01-01' + INTERVAL (seq) YEAR) day, '2015-01-01' + INTERVAL (seq) YEAR date FROM seq_0_to_10;

Page 41: Php et Mariadb dans le libre - JDLL

   

Moteur de stockagestorage engine

Page 42: Php et Mariadb dans le libre - JDLL

   

Insertion de données : TokuDB

● Moteur de stockage

● 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

Page 43: Php et Mariadb dans le libre - JDLL

   

TokuDB : exemple

Page 44: Php et Mariadb dans le libre - JDLL

   

Manipuler les données : 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

Page 45: Php et Mariadb dans le libre - JDLL

   

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     |

+­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­­+­­­­­­­­­­­­­+

Page 46: Php et Mariadb dans le libre - JDLL

   

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)

Page 47: Php et Mariadb dans le libre - JDLL

   

Recherche 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';

Page 48: Php et Mariadb dans le libre - JDLL

   

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

Page 49: Php et Mariadb dans le libre - JDLL

   

Ouverture vers le NewSQL

● 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

Page 50: Php et Mariadb dans le libre - JDLL

   

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

Page 51: Php et Mariadb dans le libre - JDLL

   

CassandraSE : Utilisation (2/2)

> insert into t1 values 

('rowkey10', 'data1­value', 123456), 

('rowkey11', 'data1­value2', 34543);

> select * from t1 where rowkey='rowkey11';

Page 52: Php et Mariadb dans le libre - JDLL

   

XA en Spider

● Dispo MariaDB 10.0+

● 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

Page 53: Php et Mariadb dans le libre - JDLL

   

Spider : Exemple

Page 54: Php et Mariadb dans le libre - JDLL

   

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/

Page 55: Php et Mariadb dans le libre - JDLL

   

Futur● Version majeure 10.1● Plus de storages● Encore plus de jSON● Réplication : Galera Cluster

Page 56: Php et Mariadb dans le libre - JDLL

   

Merci