Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Php et Mariadb dans le libre - JDLL

1,001 views

Published on

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

Published in: Internet
  • Login to see the comments

  • Be the first to like this

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

×