SlideShare une entreprise Scribd logo
1  sur  32
Base de données relationnelles orientée
documents
Projet Gestion Scolaire
Solofo / TechZara
Janvier 2018
À propos
Solofo
PHP, MySQL & PostgreSQL depuis 2006
Gestion Scolaire : https://github.com/solofo-ralitera/open-schedule
Orientée documents VS relationnelle
Informations sous forme de JSON
ou XML
Informations en colonnes
Orientée documents
- pas de schéma
- pas de jointure
- indexable
- données dénormaliser
- structure de données liés au
schéma de la BDD
- pas de redondance
- jointure pour reconstituer
l’information
Relationnelle
MySQL & documents
- nouveau type JSON en mysql 5.7.X
- structure hybride : une partie de la BDD structurée et un autre flexible
MySQL & documents
Schéma
Exploitation
Exploitation
SELECT params->'$.icon' FROM os_resources
SELECT * FROM os_resources WHERE params->'$.icon' LIKE '%home%'
….
cf doc
Exploitation
Ce qu’il faut retenir
- Disponible sur MySQL et PostgreSQL
- Structure hybride
- Avantage du relationnel et du document
- Schéma flexible
- Rattraper une erreur de conception
- Indexable
- Requêtable
- JSON directement exploitable
- ORM type JSON ?
QUESTIONS ?
PHP en Production
Solofo / TechZara
Janvier 2018
À propos
Solofo
PHP depuis 2006
PHP 7 - quelques dates
- Sortie du 7.0 fin 2015
- 7.1 fin 2016
- 7.2 fin 2017
Support
- 5.6 : fin support sécurité : décembre 2018
- 7.0 : fin support actif : décembre 2017, fin support sécurité : décembre 2018
- 7.1 : fin support actif : décembre 2018, fin support sécurité : décembre 2019
- 7.2 : fin support actif : nov 2019, fin support sécurité : nov 2020
-50% mémoire
-50% execution
7.0 # 7.1 => 4 - 5% plus rapide
7.1 # 7.2 => 4 - 5% plus rapide
~ HHVM
PHP 7 vs 5.6
Migration
- Par version mineure :
- 5.4 => 5.5
- 5.5 => 5.6
- 5.6 => 7.0
- ….
- Corriger les Deprecated Message
- En prod : Désactiver les message d’erreur
- En dev : activer tous les messages : NOTICE, WARNING, DEPRECATED...
Apache / mod_php
- Module d’Apache
- Paquet libapache2-mod-php5
- Configuration:
- LoadModule php_module modules/libphp.so
SetHandler application/x-httpd-php
- !!!!!! A NE PLUS UTILISER, OBSOLÈTE !!!!!!!!
- pas optimiser
- plus maintenu
PHP-FPM
- FastCGI Process Manager
- Service indépendant
- Gestion de plusieurs pool
- Paquet : php7.1-fpm…
- Load balancer
Cache d’OpCode : OPcache
Précompilation sans OPcache
1 - Parsing => Compilation (Zend opcode) => Exécution
Avec OPcache
1 - Parsing => Compilation (Zend opcode) => mise en cache => Exécution
2 - Vérification dans le cache / mis à jour => Exécution
En prod : opcache.validate_timestamps = 0
OPcache / Monitoring
Cache mémoire / Cache utilisateur
- Persister les sessions en cache mémoire au lieu du file system
- Cache partagé pour le load balancing
- Eviter d’utiliser le file system
- memcached, redis, APCu
composer / symfony
- php composer.phar dump-autoload --optimize
- En prod,ajouter l’option --no-dev
- En prod, exclure les répertoires/classes de tests (autoload : exlude-from-
classmap)
- Doctrine
- query cache : query_cache_driver: memcached
- annotation cache : metadata_cache_driver: memcached
- gain >>>>100%
- Twig : utiliser l'extension C fourni par SensioLabs
Autres
- HTTP2
- Deflate / Gzip
- Cache http en reverse proxy, ex varnish - surtout pour les CMS
- Ne pas utiliser PHP pour faire tout :
- Moteur de recherche spécialisé, ex SOLR ou ElasticSearch
- Reporting (pdf, xlsx, doc...)
- Images
- Temps réel
- ...
- Malgré tout si votre application est lente, peut être que votre code et #%$”*
PHP performance & optimisation
Solofo / TechZara
Janvier 2018
PHP - Sécurité Web
Solofo / TechZara
Janvier 2018
À propos
Solofo
PHP depuis 2006
- Injecction SQL
- Injection de Code (XSS)

Contenu connexe

Similaire à Presentation tz2018

Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2Hugo Hamon
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensionsjulien pauli
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.pptadiouf2
 
Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Les-Tilleuls.coop
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPJean-Marc Fontaine
 
PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005Eric D.
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement webHouda TOUKABRI
 
Optimiser WordPress
Optimiser WordPressOptimiser WordPress
Optimiser WordPressChi Nacim
 
Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another frameworkLAHAXE Arnaud
 
Seocamp Nantes 2011 : CMS Open-Source Drupal
Seocamp Nantes 2011 : CMS Open-Source Drupal Seocamp Nantes 2011 : CMS Open-Source Drupal
Seocamp Nantes 2011 : CMS Open-Source Drupal olivierpierre
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
ppt1.pptx
ppt1.pptxppt1.pptx
ppt1.pptxadiouf2
 
Synchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplementSynchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplementgplanchat
 
PHP/ExtJs experience feedback - IAV case - 1
PHP/ExtJs experience feedback - IAV case - 1PHP/ExtJs experience feedback - IAV case - 1
PHP/ExtJs experience feedback - IAV case - 1fayway
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Alexandre Touret
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPrestaShop
 
Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)Christophe Villeneuve
 

Similaire à Presentation tz2018 (20)

Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
PHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_ExtensionsPHPTour-2011-PHP_Extensions
PHPTour-2011-PHP_Extensions
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.ppt
 
Lp web tp3_idse
Lp web tp3_idseLp web tp3_idse
Lp web tp3_idse
 
Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014
 
Utilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHPUtilisation optimale et professionnelle de PHP
Utilisation optimale et professionnelle de PHP
 
PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
Optimiser wordpress
Optimiser wordpressOptimiser wordpress
Optimiser wordpress
 
Optimiser WordPress
Optimiser WordPressOptimiser WordPress
Optimiser WordPress
 
Laravel yet another framework
Laravel  yet another frameworkLaravel  yet another framework
Laravel yet another framework
 
Seocamp Nantes 2011 : CMS Open-Source Drupal
Seocamp Nantes 2011 : CMS Open-Source Drupal Seocamp Nantes 2011 : CMS Open-Source Drupal
Seocamp Nantes 2011 : CMS Open-Source Drupal
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
ppt1.pptx
ppt1.pptxppt1.pptx
ppt1.pptx
 
Synchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplementSynchroniser ses applications (plus) simplement
Synchroniser ses applications (plus) simplement
 
PHP/ExtJs experience feedback - IAV case - 1
PHP/ExtJs experience feedback - IAV case - 1PHP/ExtJs experience feedback - IAV case - 1
PHP/ExtJs experience feedback - IAV case - 1
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)
 

Presentation tz2018

  • 1. Base de données relationnelles orientée documents Projet Gestion Scolaire Solofo / TechZara Janvier 2018
  • 2. À propos Solofo PHP, MySQL & PostgreSQL depuis 2006 Gestion Scolaire : https://github.com/solofo-ralitera/open-schedule
  • 3. Orientée documents VS relationnelle Informations sous forme de JSON ou XML Informations en colonnes
  • 4. Orientée documents - pas de schéma - pas de jointure - indexable - données dénormaliser - structure de données liés au schéma de la BDD - pas de redondance - jointure pour reconstituer l’information Relationnelle
  • 5. MySQL & documents - nouveau type JSON en mysql 5.7.X - structure hybride : une partie de la BDD structurée et un autre flexible
  • 9. SELECT params->'$.icon' FROM os_resources SELECT * FROM os_resources WHERE params->'$.icon' LIKE '%home%' …. cf doc Exploitation
  • 10. Ce qu’il faut retenir - Disponible sur MySQL et PostgreSQL - Structure hybride - Avantage du relationnel et du document - Schéma flexible - Rattraper une erreur de conception - Indexable - Requêtable - JSON directement exploitable - ORM type JSON ?
  • 12. PHP en Production Solofo / TechZara Janvier 2018
  • 14.
  • 15. PHP 7 - quelques dates - Sortie du 7.0 fin 2015 - 7.1 fin 2016 - 7.2 fin 2017 Support - 5.6 : fin support sécurité : décembre 2018 - 7.0 : fin support actif : décembre 2017, fin support sécurité : décembre 2018 - 7.1 : fin support actif : décembre 2018, fin support sécurité : décembre 2019 - 7.2 : fin support actif : nov 2019, fin support sécurité : nov 2020
  • 16. -50% mémoire -50% execution 7.0 # 7.1 => 4 - 5% plus rapide 7.1 # 7.2 => 4 - 5% plus rapide ~ HHVM PHP 7 vs 5.6
  • 17. Migration - Par version mineure : - 5.4 => 5.5 - 5.5 => 5.6 - 5.6 => 7.0 - …. - Corriger les Deprecated Message - En prod : Désactiver les message d’erreur - En dev : activer tous les messages : NOTICE, WARNING, DEPRECATED...
  • 18. Apache / mod_php - Module d’Apache - Paquet libapache2-mod-php5 - Configuration: - LoadModule php_module modules/libphp.so SetHandler application/x-httpd-php - !!!!!! A NE PLUS UTILISER, OBSOLÈTE !!!!!!!! - pas optimiser - plus maintenu
  • 19. PHP-FPM - FastCGI Process Manager - Service indépendant - Gestion de plusieurs pool - Paquet : php7.1-fpm… - Load balancer
  • 20.
  • 21. Cache d’OpCode : OPcache Précompilation sans OPcache 1 - Parsing => Compilation (Zend opcode) => Exécution Avec OPcache 1 - Parsing => Compilation (Zend opcode) => mise en cache => Exécution 2 - Vérification dans le cache / mis à jour => Exécution En prod : opcache.validate_timestamps = 0
  • 23. Cache mémoire / Cache utilisateur - Persister les sessions en cache mémoire au lieu du file system - Cache partagé pour le load balancing - Eviter d’utiliser le file system - memcached, redis, APCu
  • 24.
  • 25. composer / symfony - php composer.phar dump-autoload --optimize - En prod,ajouter l’option --no-dev - En prod, exclure les répertoires/classes de tests (autoload : exlude-from- classmap) - Doctrine - query cache : query_cache_driver: memcached - annotation cache : metadata_cache_driver: memcached - gain >>>>100% - Twig : utiliser l'extension C fourni par SensioLabs
  • 26. Autres - HTTP2 - Deflate / Gzip - Cache http en reverse proxy, ex varnish - surtout pour les CMS - Ne pas utiliser PHP pour faire tout : - Moteur de recherche spécialisé, ex SOLR ou ElasticSearch - Reporting (pdf, xlsx, doc...) - Images - Temps réel - ... - Malgré tout si votre application est lente, peut être que votre code et #%$”*
  • 27.
  • 28. PHP performance & optimisation Solofo / TechZara Janvier 2018
  • 29.
  • 30. PHP - Sécurité Web Solofo / TechZara Janvier 2018
  • 32. - Injecction SQL - Injection de Code (XSS)

Notes de l'éditeur

  1. https://dev.mysql.com/doc/refman/5.7/en/json.html JSON_OBJECT JSON_ARRAY JSON_MERGE JSON_EXTRACT ...
  2. Jamais utilisé le type json avec un ORM, a tester
  3. Optimisation sur l’infra => scaling
  4. http://php.net/supported-versions.php
  5. Même performance HHVM # PHP7 Abandon support HHVM sur symfony 4, ZendFramwork
  6. Les versions mineurs de PHP ne casse pas la compatibilité
  7. Compatible avec apache et nginx Possibilité de tourner plusieurs version de php sur un même serveur Depuis php 5.3 Paquet disponible sur la plupart des distrib linux, pour les distrib redhat => remi collet repo
  8. Différence avec HHVM le compilateur : Parsing => AOT Compiler => Local JIT (HHVM OpCode) => Native Machine code ZendEngine: 80-90% du temps passé sur syntax validation et compilation, 10-20% pour l'exécution PHP7 : Nouveau compilateur, optimisé mais plus lent => nécessité d’utiliser un cache d’opcode Résolution des array static au niveau de la compilation, plus dans le runtime …. Avec OPcache : temps de réponse -50% Si optimisation activée : -10% ~20 paramètres pour une configuration optimale
  9. Monitorer l’OpCache pour plus de performance ~20 configurations d’OpCache en production
  10. File system : norme POSIX / ACID => pas de concurrence sur l'écriture => bottleneck
  11. Php7 : Optimisation des array immutables L’extension twig ne semble pas compiler sur PHP7, à tester
  12. Optimisation accès sur le code => time