PHP & MariaDB 
dans le libre
Christophe Villeneuve
@hellosct1
Qui... est Christophe Villeneuve ?
<<
afup – lemug.fr – mysql – mariadb – drupal – demoscene – firefoxos – drupagora – php...
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...
PHP
● 2015 : 20 ans
● PHP Tour : 12 & 13 mai 2015
● Forum PHP : 3eme Octobre 2015
● 15 ans AFUP
● PHP 7
   
   
✔ Fondé par
✔ Monty Widenius
✔ David Axmark
✔ 1983 – 1ère idée
✔ Fondé  en 1995 
✔ 2007 Préparation pour 
Nasdaq
✔ 200...
   
✔ N° 1 dans le monde
✔ 500k Download (depuis 
2003)
✔ + 13M installation active
✔ MySQL Oracle
✔ Drizzle
✔ Percona
✔ M...
   
   
✔ Communauté d'amis
✔ 100 % Open source et
compatible MySQL
✔ Plateforme d'innovation
✔ Des commiteurs
✔
Dec 2008 Créa...
   
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 + MyS...
   
Apprentissage
   
✔ Plus de storages
✔ Vitesse
✔ Innodb, replication, stockage...
✔ Nombreuses extensions et fonctionnalités
✔ Colonnes ...
   
https://blog.mariadb.org/performance­evaluation­of­mariadb­10­1­and­mysql­5­7­4­labs­tplc/
Performance MariaDB 10.1 et...
   
✔ PHP (driver natif)   BSD licence→
✔ Python
✔ Perl
✔ Ruby
✔ .NET avec MyODBC 
✔ JDBC (basé sur drizzle driver)
✔ C
✔ ...
   
Solution : Mise à jour 
https://downloads.mariadb.org/mariadb/repositories
✔ Paquet Repositories
   
✔ EasyPHP
✔ Xampp
✔ WampServer
✔ PHPserver
✔ WampMSS
✔ Neard
Outils de dev : Environnement embarqué
3 exemples : 
­ 1 ...
   
✔ DL MariaDB (http://mariadb.org)
✔ Installer dans 1 dossier MySQL
✔ Déplacer les BDD sauvegardées data
✔ Lancer Wamps...
   
Exemple 1 : Wampserver (2/2) avec phpMyAdmin 
   
✔
DL Neard
✔
http://sourceforge.net/projects/neard
✔
Installation
Exemple 2 : Neard
MySQL
MariaDB
   
✔ sudo apt-get install mariadb-server mariadb-client
✔ Vous retrouvez :
✔ /etc/mysql/my.cnf
✔ > mysql
✔ Au final
Exemp...
   
Au final par le code
<?php
echo phpinfo() ;
?>
   
Outils
✔ MySQL Workbench
✔ SkySQL visual Editor 
(SQLYog)
✔ HeidiSQL
✔ PhpMyAdmin
✔ Toad For MySQL
✔ ...
Pour vos requ...
   
 
   
✔ Précision date-heure
✔ Avant
✔ TIME
✔ DATETIME
✔ TIMESTAMP
✔ Dispo MariaDB 5.3+
✔ temporal functions
✔ CAST
✔ dynami...
   
✔ Create table t1 (d
DATETIME) ;
✔ Insert INTO t1 values....
✔ Select * from t1 ;
✔ Create table t2 (d
DATETIME (6) ) ...
   
✔ Dispo MariaDB 5.2+
✔ Colonne dans une table
qui sa valeur calculée
automatiquement
✔ 2 types :
✔ VIRTUAL : sur le
pr...
   
✔ CREATE TABLE table1 (
a INT NOT NULL,
b VARCHAR(32),
c INT AS (a mod 10) VIRTUAL,
d VARCHAR(5) AS (left(b,5)) PERSIS...
   
✔ INSERT INTO table1 VALUES
✔ (1, 'some text',default,default),
✔ (2, 'more text',5,default),
✔ (123, 'even more text'...
   
✔ Dispo MariaDB 10.0+
✔ Expressions régulières
✔ Compatible
✔ REGEXP
✔ RLIKE operator
✔ Fonctionne
✔ Multi caractères
...
   
✔ Fonction de remplace
✔ SELECT REGEXP_REPLACE('ab12cd','[0-9]','') AS r;
→ abcd
Exemple (PCRE) (1/2)
✔ Retourne 1ère ...
   
✔ Retourne la partie correspondante d'une chaine
✔ SELECT REGEXP_SUBSTR(
'http://www.jdll.org/pratique/#Train',
'https...
   
✔ Dispo MariaDB 5.3+
✔ Pont entre les BDD
relationnelles et non
relationnelles
✔ Toutes les colonnes
stockées dans un ...
   
create table newsql( 
id int 
    auto_increment    
    primary key,
nom varchar(40),
type enum 
     ('animal',
    ...
   
Exemple (colonne dynamique) 2/3
>INSERT into newsql values (NULL, 'Atari' ,'ordinateur',500, 
COLUMN_CREATE('couleur',...
   
Exemple (colonne dynamique) 3/3
>SELECT nom, COLUMN_JSON(nosql) FROM newsql;
>SELECT id,type,nom,
COLUMN_GET(nosql, 'c...
   
✔ Dispo MariaDB 10.0.3+
✔ Une fonction en Storage
Engine
✔ Pas de création & pas de
lecture de table
✔ Principe
✔ Génè...
   
Exemple (Sequence Engine) 1/2
> select * FROM seq_1_to_3;
> select * FROM seq_5_to_1_step_2;
   
Exemple (Sequence Engine) 2/2
✔ Calcul de date
Ex : Connaître le jour de la semaine d'une date
donnée :
✔ exemple : Le...
   
Moteur de stockage
storage engine
   
Insertion de données : TokuDB
● Moteur de stockage
● Natif dans MariaDB 5.5 & MariaDB 10.0+
●
(R)Tokutek & MariaDB
● T...
   
TokuDB : exemple
   
Manipuler les données : Connect
● Dispo MariaDB 10.0+
● ETL : Extract, transform et Load
● Lecture / Ecriture / MAJ
– ...
   
Connect : exemple CSV
● Fichier
– first,last,birthday
– "Christophe","Villeneuve","Jan 1"
– "PHP","ODBC","Nov 22"
> CR...
   
Connect : exemple ODBC
> create Table table2   
ENGINE=CONNECT TABLE_TYPE=ODBC
SRCDEF='select key, sum(l_quantity) qt ...
   
Recherche SphinxSE
● Dispo MariaDB 5.2+
● Recherche Full­text
● Ne stocke pas les données
● Client haut pour permettre...
   
Exemple SphinxSE
● CREATE TABLE t1 ( 
  id INTEGER UNSIGNED NOT NULL, 
  weight INTEGER NOT NULL, 
  query VARCHAR(307...
   
Ouverture vers le NewSQL
● Moteur de stockage : CassandraSE 
● Dispo MariaDB 10.0+
● Brique de Apache Cassandra
● Donn...
   
CassandraSE : Utilisation (1/2)
> create table t2 (rowkey varchar(36) primary key,
data1 varchar(60),
data2 varchar(60...
   
CassandraSE : Utilisation (2/2)
> insert into t1 values 
('rowkey10', 'data1­value', 123456), 
('rowkey11', 'data1­val...
   
XA en Spider
● Dispo MariaDB 10.0+
●
Moteur de stockage fédérés comme
– Sharding / partitionnement *
– Transactions *
...
   
Spider : Exemple
   
Moteur de stockage : Les autres
● XtraDB (MariaDB 10.0.9)
– Fork de InnoDB (Full compatible)
● Aria appelé Maria (Mari...
   
Futur
● Version majeure 10.1
● Plus de storages
● Encore plus de jSON
● Réplication : Galera Cluster
   
Merci
Prochain SlideShare
Chargement dans…5
×

Php et Mariadb dans le libre - JDLL

743 vues

Publié le

Conférence ' PHP et MariaDB dans le libre' présentée au JDLL (Journées du Logiciel Libre) 2015 à Lyon par Christophe Villeneuve

Publié dans : Internet
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
743
Sur SlideShare
0
Issues des intégrations
0
Intégrations
42
Actions
Partages
0
Téléchargements
4
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Php et Mariadb dans le libre - JDLL

  1. 1.     PHP & MariaDB  dans le libre Christophe Villeneuve @hellosct1
  2. 2. 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
  3. 3. 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
  4. 4. PHP ● 2015 : 20 ans ● PHP Tour : 12 & 13 mai 2015 ● Forum PHP : 3eme Octobre 2015 ● 15 ans AFUP ● PHP 7
  5. 5.    
  6. 6.     ✔ 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
  7. 7.     ✔ N° 1 dans le monde ✔ 500k Download (depuis  2003) ✔ + 13M installation active ✔ MySQL Oracle ✔ Drizzle ✔ Percona ✔ MariaDB ✔ De nos jours... MySQL Forks Et maintenant
  8. 8.    
  9. 9.     ✔ 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
  10. 10.     GO     MariaDB
  11. 11.     5.x 5.x Compatibilité
  12. 12.     ✔ 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
  13. 13.     Apprentissage
  14. 14.     ✔ 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
  15. 15.     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
  16. 16.     ✔ 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
  17. 17.     Solution : Mise à jour  https://downloads.mariadb.org/mariadb/repositories ✔ Paquet Repositories
  18. 18.     ✔ EasyPHP ✔ Xampp ✔ WampServer ✔ PHPserver ✔ WampMSS ✔ Neard Outils de dev : Environnement embarqué 3 exemples :  ­ 1 environnement déjà existant (Wampserver) ­ 1 nouvel environnement (Neard) ­ Linux
  19. 19.     ✔ DL MariaDB (http://mariadb.org) ✔ Installer dans 1 dossier MySQL ✔ Déplacer les BDD sauvegardées data ✔ Lancer Wampserver Exemple 1 : wampserver (1/2)
  20. 20.     Exemple 1 : Wampserver (2/2) avec phpMyAdmin 
  21. 21.     ✔ DL Neard ✔ http://sourceforge.net/projects/neard ✔ Installation Exemple 2 : Neard MySQL MariaDB
  22. 22.     ✔ sudo apt-get install mariadb-server mariadb-client ✔ Vous retrouvez : ✔ /etc/mysql/my.cnf ✔ > mysql ✔ Au final Exemple 3 : Linux
  23. 23.     Au final par le code <?php echo phpinfo() ; ?>
  24. 24.     Outils ✔ MySQL Workbench ✔ SkySQL visual Editor  (SQLYog) ✔ HeidiSQL ✔ PhpMyAdmin ✔ Toad For MySQL ✔ ... Pour vos requêtes ✔ MySQLdump ✔ XtraBackup ✔ mysqlhotcopy (MyISAM) ✔ XtraBackup manager (PHP) ✔ ... Backup
  25. 25.      
  26. 26.     ✔ Précision date-heure ✔ Avant ✔ TIME ✔ DATETIME ✔ TIMESTAMP ✔ Dispo MariaDB 5.3+ ✔ temporal functions ✔ CAST ✔ dynamic columns Microseconds Les fonctions (1/5)
  27. 27.     ✔ 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)
  28. 28.     ✔ 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/
  29. 29.     ✔ 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)
  30. 30.     ✔ 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)
  31. 31.     ✔ 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/
  32. 32.     ✔ 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
  33. 33.     ✔ 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)
  34. 34.     ✔ 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
  35. 35.     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
  36. 36.     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
  37. 37.     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
  38. 38.     ✔ 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
  39. 39.     Exemple (Sequence Engine) 1/2 > select * FROM seq_1_to_3; > select * FROM seq_5_to_1_step_2;
  40. 40.     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;
  41. 41.     Moteur de stockage storage engine
  42. 42.     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
  43. 43.     TokuDB : exemple
  44. 44.     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
  45. 45.     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     | +­­­­­­­­­­­­­­­+­­­­­­­­­­­­­­­+­­­­­­­­­­­­­+
  46. 46.     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)
  47. 47.     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';
  48. 48.     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
  49. 49.     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
  50. 50.     CassandraSE : Utilisation (1/2) > create table t2 (rowkey varchar(36) primary key, data1 varchar(60), data2 varchar(60) ) engine=cassandra keyspace='mariadbtest' thrift_host='localhost' column_family='cf1';  Clé  primaire  obligatoire  Colonnes  statiques  Sous ensemble  des colonnes CF
  51. 51.     CassandraSE : Utilisation (2/2) > insert into t1 values  ('rowkey10', 'data1­value', 123456),  ('rowkey11', 'data1­value2', 34543); > select * from t1 where rowkey='rowkey11';
  52. 52.     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
  53. 53.     Spider : Exemple
  54. 54.     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 Federated https://mariadb.com/kb/en/mariadb/documentation/storage­engines/
  55. 55.     Futur ● Version majeure 10.1 ● Plus de storages ● Encore plus de jSON ● Réplication : Galera Cluster
  56. 56.     Merci

×