Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SQL et NoSQL associe developpement PHP

hellosct1
October 31, 2024

SQL et NoSQL associe developpement PHP

Présentation effectuée au meetup PHP Montréal par Christophe Villeneuve sur "SQL et NoSQL, associé dans votre développement PHP".
Cette session vous aidera associé MariaDB et MongoDB avec Maxscale

hellosct1

October 31, 2024
Tweet

More Decks by hellosct1

Other Decks in Technology

Transcript

  1. Atos open source - afup – lemug.fr – mariadb –

    drupal – mozilla - firefox – lemugfr - sumo – webextensions – VR – AR – XR - Cause commune 93.1 FM - TechSpeaker - Lizard - eyrolles – editions eni – programmez – linux pratique – webriver – elephpant - CommonVoice – Sécurité - Cybersécurité Christophe Villeneuve • Consultant Open Source • Dresseur animaux
  2. @hellosct1 – PHP Montreal #1 - 2024 Aujourd’hui • Les

    bases de données • Une bonne utilisation • Mais Alors ! JSON • Une technologie supplémentaire
  3. • Les bases de données • Une bonne utilisation •

    Mais Alors ! JSON • Une technologie supplémentaire
  4. @hellosct1 – PHP Montreal #1 - 2024 Qu’est ce ?

    • Une base données permet de stocker et de retrouver – Données structurées – Données semi-structurées – Données brutes – De l'information Les grandes familles : - Relationnel, Multi-modèle - Document - Key-value
  5. @hellosct1 – PHP Montreal #1 - 2024 SGDB • =

    Système de gestion de base de données • Système servant – à stocker – à manipuler – à partager des données dans une base de données • Garantir – la qualité – la pérennité – la cohérence – la confidentialité des informations tout en masquant la complexité des opérations.
  6. @hellosct1 – PHP Montreal #1 - 2024 SQL • SQL

    = Base de données relationnelles • Appelé SGBDR (système de gestion de base de données relationnelle) • Basé sur un modèle relationnel – S’appuie sur la théorie des ensembles et des relations pour décrire les données dans la base de données • Norme SQL décrivant le langage d'interrogation et le comportement des bases de données relationnelles. • Chaque base de données (avec ces différences) : – Langage – Comportement – Méthode d'accès aux données. • Schéma fixe : – Chaque ligne a les mêmes colonnes définies à l'aide des mêmes types de données que toutes les autres lignes de la table. – Chaque ligne de la table possède une clé qui l'identifie de manière unique. • Les systèmes de bases de données SQL sont caractérisés par leur support ACID – ACID (atomicité, cohérence, isolation et durabilité) pour les transactions – Cohérence des données est strictement maintenue lorsque plusieurs processus accèdent et modifient les mêmes données.
  7. @hellosct1 – PHP Montreal #1 - 2024 NoSQL • NoSQL

    = Base de données non relationnelle • Pas de règles strictes • Populaire au début du 21e siècle • Englobe – Structure de données différents – Concepts, approches, des langages de requête, etc. – Solution à un problème précis – Selon l'application, • Prévoir des développements spécifiques du côté de l'application • Devient coûteux ou pratiquement impossible à partir d'un certain point. • Évolution horizontale – Ajoutez des machines supplémentaires et répartissez la charge entre elles.
  8. @hellosct1 – PHP Montreal #1 - 2024 NoSQL : Transactions

    • Les bases de données NoSQL n'offrent généralement pas de transactions • Stratégies pour faire face au manque de support transactionnel : – Redéfinissez votre modèle de données – Les bases de données documentaires • puissante fonctionnalité de mise à jour permettant d'effectuer de manière atomique un ensemble de modifications au niveau d'un seul document – La base de données peut fournir des opérations telles que "mettre à jour la première entrée correspondant à ce filtre et la renvoyer" – Effectuez le contrôle de concurrence requis au niveau de votre application. – Eventuels problèmes de concurrence causés • par l'absence de transactions
  9. @hellosct1 – PHP Montreal #1 - 2024 NoSQL : les

    types • Les bases de données clés-valeurs – stockent des paires de clés uniques et de valeurs associées. • Les bases de données de documents – stockent les données dans des structures de type document encodées dans des formats tels que JSON et XML. • Les bases de données à larges colonnes – stockent les données dans des tableaux contenant un grand nombre de colonnes (dans un schéma flexible). • Les bases de données graphiques – stockent les données sous forme de graphiques • pour mettre en évidence les connexions entre les différents éléments de données
  10. @hellosct1 – PHP Montreal #1 - 2024 NoSQL + SQL

    (1/2) • Catégorie de systèmes de gestion de bases de données relationnelles • Visent à fournir – Les garanties ACID des bases de données relationnelles – Evolution horizontale des bases de données NoSQL. • Plusieurs catégories : – Des systèmes entièrement nouveaux, souvent construits à partir de zéro – Déploiement distribué – Techniques similaires à celles utilisées par les bases de données NoSQL. • Moteurs de stockage (storage engine) SQL optimisés pour l'évolutivité horizontale • Complémentaire aux moteurs de stockage par défaut des bases de données relationnelles • Positionnement – Couche Middleware • Possible d’offrir de garanties ACID
  11. @hellosct1 – PHP Montreal #1 - 2024 NoSQL + SQL

    (2/2) • Existe depuis 2011 (Document 451 Research) • Caractéristiques – Prévu comme un système de base de données relationnel et SQL avec une architecture distribuée et tolérante aux pannes. – Possible de mixer • La capacité de stockage en mémoire • Les services de bases de données en cluster avec la possibilité d'être déployés dans le cloud • Intérêt – Traiter de grandes quantités de données (big data) tout en maintenant la cohérence transactionnelle • Approche : – Grande évolutivité avec une cohérence ACID – Consiste à répartir les données de manière transparente entre plusieurs nœuds à l'aide d'un algorithme de consensus. – Déploient des moteurs SQL améliorés pour le stockage et l'optimisation des données.
  12. @hellosct1 – PHP Montreal #1 - 2024 Synthèse Feature SQL

    NoSQL SQL+NoSQL Propriété Relationnelle Oui Modélisation relationnelle Non Modèle différent Oui ACID Oui, les propriétés ACID sont fondamentales pour leur application Non prévoit plutôt un soutien CAP Oui, les propriétés ACID sont prises en compte SQL Prise en charge de SQL Pas de support pour l'ancien SQL Oui, un support approprié et même des fonctionnalités améliorées pour l'ancien SQL Traitement Transactionnel (OTP) Inefficace pour les bases de données OLTP Il supporte de telles bases de données, mais ce n'est pas le mieux adapté. Prend entièrement en charge les bases de données OLTP et est très efficace Scaling / Extensibilité Mise à l'échelle verticale Mise à l'échelle horizontale uniquement Mise à l'échelle verticale + horizontale Traitement des requetes Peut gérer facilement des requêtes simples et échoue lorsqu'elles deviennent complexes Mieux que SQL pour le traitement des requêtes complexes Très efficace dans le traitement des requêtes complexes et des requêtes plus petites Bases de données distribuées Non Oui Oui
  13. • Les bases de données • Une bonne utilisation •

    Mais Alors ! JSON • Une technologie supplémentaire
  14. @hellosct1 – PHP Montreal #1 - 2024 CRM Intranet Website

    Tracker Service Auth. Web Service Serveur Web Base de données Access Control Architecture d'une application
  15. @hellosct1 – PHP Montreal #1 - 2024 Big data •

    Désigne des ensembles de données • Traitement de jeux de données complexes • Dépasse les capacités humaines d’analyse – et remettent en cause l’utilisation des outils informatiques classiques. • Appelé « les 3 V » – Volume • La quantité de données a son importance – Vitesse • La vitesse à laquelle les données sont reçues et éventuellement traitées – Variété • La variété fait allusion aux nombreux types de données disponibles • Comportement – Des données plus variées – Volumes de plus en plus importants – Haute disponibilité plus élevée.
  16. @hellosct1 – PHP Montreal #1 - 2024 Big data :

    utilisation • Lié au numérique • Périmètre très large – Téléphone, radio, télévision, ordinateur... Internet – Tout l’univers du numérique → potentiellement analysables • Format des données produites est très varié • Important – La puissance du Big Data • Convertir vos données en apparence anodines en clés principales de vos nouvelles prises de décision. • Nouvelle intelligence stratégique – Permet d’accélérer les prises de décision – Les performances de votre entreprise.
  17. @hellosct1 – PHP Montreal #1 - 2024 Big Data :

    fonctionnement • Intégrer – Rassemble des données provenant de nombreuses sources et applications disparates. – Mécanismes traditionnels d’intégration de données, ETL – Volumétrie : Téraoctects et + • Gérer – Nécessite du stockage – Solution de stockage → dans le cloud, sur site, ou les deux à la fois. • Analyser – Mesure d’analyser vos données d’agir à partir de l’analyse
  18. @hellosct1 – PHP Montreal #1 - 2024 Base de données

    cloud • Modèles – Traditionnel • Ressemble à une base de données gérée sur site et en interne – DBaas (Base de données en tant que service) • Contrat avec un fournisseur de services Cloud par l’intermédiaire d’un service d’abonnement payant
  19. @hellosct1 – PHP Montreal #1 - 2024 Base de données

    : Les types • Auto-gérées – L’entreprise gère la base de données • Automatisées – Entreprise utilise des API de service de base de données Cloud pour contribuer aux opérations de cycle de vie – Conserve l’accès aux serveurs de base de données – Contrôle la configuration et les systèmes d’exploitation de la base de données. • Gérés – Fournisseur Cloud n’autorise pas l’accès des consommateurs aux serveurs hébergeant la base de données. • Autonomes – Nouveau modèle de fonctionnement mains libres – Automatisation et le machine learning
  20. @hellosct1 – PHP Montreal #1 - 2024 Gestion par colonnes

    • Les bases de données à larges colonnes – Stockent les données dans des tableaux • contenant un grand nombre de colonnes • Schéma flexible – Système de stockage en colonnes – Utile pour le Big Data – Compatibilité : Data Types Storage Engines Version mini BLOB X 10 ColumnStore X 10.5 RocksDB X 10.3
  21. @hellosct1 – PHP Montreal #1 - 2024 Ex : MariaDB

    ColumnStore • Axée sur la rangée – Les Lignes stockées séquentiellement dans un fichier • Orienté en colonne – Chaque colonne est stockée dans un fichier séparé
  22. @hellosct1 – PHP Montreal #1 - 2024 Ex : Blob

    : Colonnes dynamiques 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] ], ...)
  23. @hellosct1 – PHP Montreal #1 - 2024 Graph • Les

    bases de données graphiques – stockent les données sous forme de graphiques • pour mettre en évidence les connexions entre les différents éléments de données • Compatibilité Data Types Storage Engines Version mini OQGRAPH X 10
  24. @hellosct1 – PHP Montreal #1 - 2024 Ex graph CREATE

    TABLE oq2_backing ( origid INT UNSIGNED NOT NULL, destid INT UNSIGNED NOT NULL, weight DOUBLE NOT NULL, PRIMARY KEY (origid, destid), KEY (destid) ); INSERT INTO oq2_backing(origid, destid, weight) VALUES (1,2,1), (2,3,1), (3,4,3), (4,5,1), (2,6,10), (5,6,2); SELECT * FROM oq_graph WHERE latch='breadth_first' AND origid=1 AND destid=6; +----------+--------+--------+--------+------+--------+ | latch | origid | destid | weight | seq | linkid | +----------+--------+--------+--------+------+--------+ | dijkstras| 1 | 6 | NULL | 0 | 1 | | dijkstras| 1 | 6 | 1 | 1 | 2 | | dijkstras| 1 | 6 | 1 | 2 | 6 | +----------+--------+--------+--------+------+--------+ CREATE TABLE oq2_graph ( latch VARCHAR(32) NULL, origid BIGINT UNSIGNED NULL, destid BIGINT UNSIGNED NULL, weight DOUBLE NULL, seq BIGINT UNSIGNED NULL, linkid BIGINT UNSIGNED NULL, KEY (latch, origid, destid) USING HASH, KEY (latch, destid, origid) USING HASH ) ENGINE=OQGRAPH data_table='oq2_backing' origid='origid' destid='destid' weight='weight';
  25. @hellosct1 – PHP Montreal #1 - 2024 JSON • Les

    bases de données clés-valeurs – stockent des paires de clés uniques et de valeurs associées. – https://mariadb.com/kb/en/json-functions/ • Compatibilité Data Types Storage Engines Version mini JSON X 10.2 JSON_VALID X 10.4
  26. @hellosct1 – PHP Montreal #1 - 2024 Ex : JSON

    create table demo2( id int auto_increment primary key, nom varchar(40), type enum ('animal', 'ordinateur'), prix int, attr JSON, CHECK (JSON_VALID(attr)) );
  27. @hellosct1 – PHP Montreal #1 - 2024 Documents • Les

    bases de données de documents – stockent les données • dans des structures de type document encodées dans des formats tels que JSON et XML. – https://mariadb.com/kb/en/json_table/ • Compatibilité Data Types Storage Engines Version mini JSON X 10.6
  28. @hellosct1 – PHP Montreal #1 - 2024 Ex : Documents

    set @json=' [ {"name":"Laptop", "color":"black", "price":"1000"}, {"name":"Jeans", "color":"blue"} ]'; select * from json_table(@json, '$[*]' columns( name varchar(10) path '$.name', color varchar(10) path '$.color', price decimal(8,2) path '$.price' ) ) as jt; +--------+-------+---------+ | name | color | price | +--------+-------+---------+ | Laptop | black | 1000.00 | | Jeans | blue | NULL | +--------+-------+---------+
  29. • Les bases de données • Une bonne utilisation •

    Mais Alors ! JSON • Une technologie supplémentaire
  30. @hellosct1 – PHP Montreal #1 - 2024 JSON • =

    JavaScript Object Notation • Format d'échange de données → API REST • Structure JSON { Clé : Valeur } • Exemple { "menu": { "id": "file", "value": "File", "popup": { "menuitem": [ { "value": "New", "onclick": "CreateNewDoc()" }, { "value": "Open", "onclick": "OpenDoc()" }, { "value": "Close", "onclick": "CloseDoc()" } ] } } }
  31. @hellosct1 – PHP Montreal #1 - 2024 Modèle Utilisation de

    modèles de données hybrides avec MariaDB Relationnel Intégrité des données Transactions Fiabilité JSON Flexibilité Simplicité Omniprésence
  32. @hellosct1 – PHP Montreal #1 - 2024 Quel différence ?

    • Format décrit en externe • Format auto-décrit Relationnel JSON Semi structuré Structuré
  33. @hellosct1 – PHP Montreal #1 - 2024 Manipulation de JSON

    • En fonctions • Gestion en tableau – Array • Insert • Explose • Value • Structure • ... • En tables • Dispo 10.6 + • Utilisation – Dans des contextes – Référence à une table – Compatible • Select • Insert • Update • Delete • Sur le principe de JSON_DOC En fonctions En tables https://mariadb.com/kb/en/json-functions/ https://mariadb.com/kb/en/json_table/
  34. @hellosct1 – PHP Montreal #1 - 2024 Json-data-type • Disponible

    à partir de 10.2.7 • But – Pour rendre possible l'utilisation de colonnes JSON • dans la réplication basée sur les déclarations – de MySQL vers MariaDB – pour permettre à MariaDB de lire les mysqldumps de MySQL • JSON est un alias LONGTEXT • Benchmarks de MariaDB → performances sont au moins équivalentes • fonction JSON_VALID – Utilisée comme une contrainte CHECK https://mariadb.com/kb/en/json-data-type/
  35. @hellosct1 – PHP Montreal #1 - 2024 Connexion $ mariadb

    -u root -p > Create demo2; > Use demo2;
  36. @hellosct1 – PHP Montreal #1 - 2024 Structure table :

    type multi-produits create table example( id int auto_increment primary key, nom varchar(40), type enum ('animal', 'ordinateur'), prix int, attr JSON ); COLUMN_CREATE( column_nr, value [as type], [ column_nr, value [as type] ], ...) id nom type prix attr
  37. @hellosct1 – PHP Montreal #1 - 2024 JSON_VALID > create

    table example( id int auto_increment primary key, nom varchar(40), type enum ('animal', 'ordinateur'), prix int, attr JSON, CHECK (JSON_VALID(attr)) ); https://mariadb.com/kb/en/json_valid/ > Desc demo2 ;
  38. @hellosct1 – PHP Montreal #1 - 2024 Ajout de données

    > INSERT INTO example VALUES(NULL, 'Atari','ordinateur',500, '{"couleur": "gris", "type": "STe"}'); > INSERT INTO example VALUES(NULL, 'elePHPant', 'animal',20, '{"taille": "normal", "description": "peluche"}'); > SELECT * FROM example ; id nom type prix couleur type taille description 1 Atari ordinateur 500 Noir ste 2 elePHPant animal 40 normal peluche
  39. @hellosct1 – PHP Montreal #1 - 2024 JSON_MERGE > UPDATE

    example SET attr = JSON_MERGE(attr,'{"couleur": "bleu"}') where id=2; > SELECT * FROM example ; id nom type prix couleur type taille description 1 Atari ordinateur 500 Noir ste 2 elePHPant animal 40 bleu normal peluche https://mariadb.com/kb/en/json_merge/
  40. @hellosct1 – PHP Montreal #1 - 2024 JSON_VALUE (1/2) >

    SELECT nom, type, prix, JSON_VALUE(attr, '$.couleur') couleur FROM example; https://mariadb.com/kb/en/json_value/
  41. @hellosct1 – PHP Montreal #1 - 2024 JSON_VALUE (2/2) Toutes

    les colonnes > SELECT nom,type,prix, JSON_VALUE(attr, '$.couleur') couleur, JSON_VALUE(attr, '$.type') type, JSON_VALUE(attr, '$.taille') taille, JSON_VALUE(attr, '$.description') description FROM example;
  42. @hellosct1 – PHP Montreal #1 - 2024 Ajout d’une colonne

    + Ajout d’attribut > ALTER TABLE example ADD attr_couleur VARCHAR(32) AS (JSON_VALUE(attr, '$.couleur')); > SELECT * FROM example ; > SELECT * FROM example WHERE attr_couleur = 'bleu'; https://mariadb.com/kb/en/json_value/
  43. @hellosct1 – PHP Montreal #1 - 2024 Exemple script Demo

    <?php $connex = mysqli_connect($serveur, $user, $passwd, $bdd); if (mysqli_connect_errno()) die ("Echec de la connexion : ". mysqli_connect_error()); $sql = "SELECT nom,type,prix, JSON_VALUE(attr, '$.couleur') couleur, JSON_VALUE(attr, '$.type') type, JSON_VALUE(attr, '$.taille') taille, JSON_VALUE(attr, '$.description') description FROM example; "; $result = mysqli_query($connex, $sql); if (!$result) die ("Probleme : " . mysqli_error($connex)); $row=mysqli_fetch_object( $result); echo "<pre>"; print_r($row); mysqli_close($connex); ?> https://github.com/hellosct1/sql-nosql-php
  44. @hellosct1 – PHP Montreal #1 - 2024 Creation table en

    JSON (1/3) > Create table example_table (j JSON); > Desc example_table; https://mariadb.com/kb/en/json_table
  45. @hellosct1 – PHP Montreal #1 - 2024 Creation table en

    JSON (2/3) > CREATE TABLE table_nosql ( j JSON CHECK (JSON_VALID(j)) ); https://mariadb.com/kb/en/json_valid/
  46. @hellosct1 – PHP Montreal #1 - 2024 Creation table en

    JSON (3/3) > INSERT INTO table_json VALUES ('message test'); > INSERT INTO table_nosql VALUES ('{"id": 1, "name": "message succes"}'); > select * from table_nosql;
  47. @hellosct1 – PHP Montreal #1 - 2024 Standard : json_table

    > set @json=' [ {"name":"Laptop", "color":"black", "price":"1000"}, {"name":"Jeans", "color":"blue"} ]'; select * from json_table(@json, '$[*]' columns( name varchar(10) path '$.name', color varchar(10) path '$.color', price decimal(8,2) path '$.price' ) ) as jt;
  48. @hellosct1 – PHP Montreal #1 - 2024 Avancé : JSON

    en tables (1/5) > CREATE TABLE people ( id INT NOT NULL, name VARCHAR(50) NOT NULL, pets JSON ); > desc people ; https://mariadb.com/fr/resources/blog/introducing-json-tables/
  49. @hellosct1 – PHP Montreal #1 - 2024 Avancé : JSON

    en tables (2/5) > INSERT INTO people (id, name, pets) VALUES ( 1, 'Rob', '[{"type":"dog","name":"Duke"}, {"type":"cat","name":"Fluffy"}]');
  50. @hellosct1 – PHP Montreal #1 - 2024 Avancé : JSON

    en tables (3/5) > SELECT id, JSON_VALUE(JSON_QUERY(pets, CONCAT('$[', ind.ind, ']')), '$.type') pet_type, JSON_VALUE(JSON_QUERY(pets, CONCAT('$[', ind.ind, ']')), '$.name') pet_name FROM people CROSS JOIN (SELECT 0 AS ind UNION ALL SELECT 1 AS ind) ind;
  51. @hellosct1 – PHP Montreal #1 - 2024 Avancé : JSON

    en tables (4/5) > UPDATE people SET pets = JSON_INSERT(pets, '$[0].favorite_foods', JSON_ARRAY('chicken', 'salmon', 'carrots')); > UPDATE people SET pets = JSON_INSERT(pets, '$[1].favorite_foods', JSON_ARRAY('tuna', 'turkey')); [ { "type": "dog", "name": "Duke", "favorite_foods": [ "chicken", "salmon", "carrots" ] }, { "type": "cat", "name": "Fluffy", "favorite_foods": [ "tuna", "turkey" ] } ]
  52. @hellosct1 – PHP Montreal #1 - 2024 Avancé : JSON

    en tables (5/5) SELECT p.id, pt.pet_type, pt.pet_name, pt.favorite_food FROM people p, JSON_TABLE(p.pets, '$[*]' COLUMNS ( pet_type VARCHAR(10) PATH '$.type', pet_name VARCHAR(25) PATH '$.name', NESTED PATH '$.favorite_foods[*]' COLUMNS (favorite_food VARCHAR(25) PATH '$') ) ) pt;
  53. @hellosct1 – PHP Montreal #1 - 2024 Application aujourd’hui (1/2)

    • Application polyglothe – JS / PHP / Rust / Go / TypeScrypt / Python… • Ex : – Vote sur des livres • But : – Une application pour exporter un rapport • avec 2 bases de données – MariaDB – MongoDB
  54. @hellosct1 – PHP Montreal #1 - 2024 Partie MariaDB •

    Nom base de données : demo • Création table • Insertion de données CREATE TABLE books( isbn VARCHAR(20) PRIMARY KEY, title VARCHAR(256), year INT ); INSERT INTO books(title, isbn, year) VALUES ("Vaadin 7 UI Design By Example", "978-1-78216-226-1", 2013), ("Data-Centric Applications with Vaadin 8", "978-1-78328-884-7", 2018), ("Practical Vaadin", "978-1-4842-7178-0", 2021);
  55. @hellosct1 – PHP Montreal #1 - 2024 Partie MongoDB (1/2)

    • Utilisation du client MongoDB $ mongosh •
  56. @hellosct1 – PHP Montreal #1 - 2024 Partie MongoDB (2/2)

    • Insertion de données db.ratings.insertMany([ { "isbn": "978-1-78216-226-1", "starts": 5, "comment": "A good resource for beginners who want to learn Vaadin" }, { "isbn": "978-1-78328-884-7", "starts": 4, "comment": "Explains Vaadin in the context of other Java technologies" }, { "isbn": "978-1-4842-7178-0", "starts": 5, "comment": "The best resource to learn web development with Java and Vaadin" } ])
  57. @hellosct1 – PHP Montreal #1 - 2024 Visualisation • Combinaison

    des requêtes SELECT b.title, r.stars, r.comment FROM ratings rt JOIN JSON_TABLE(rt.doc, '$' COLUMNS( isbn VARCHAR(20) PATH '$.isbn', stars INT PATH '$.starts', comment TEXT PATH '$.comment' ) ) AS r JOIN books b USING(isbn); https://mariadb.com/resources/blog/mixing-sql-and-nosql-with-mariadb-and-mongodb/
  58. • Les bases de données • Une bonne utilisation •

    Mais Alors ! JSON • Une technologie supplémentaire
  59. @hellosct1 – PHP Montreal #1 - 2024 Filtrage des requêtes

    grâce a MaxScale • Applique des filtres sur les flux • Masque des données • Réécriture de requête • Base de règles de filtrage • Type de requête • Fonction utilisée • Colonne sélectionnée • Fréquence des requêtes • Permet le BAN d’utilisateur et d’IP • Permet de multiplier les ports – en fonction des besoins (filtrage N3 possible)
  60. @hellosct1 – PHP Montreal #1 - 2024 Diviser les schémas

    • Le Sharding avec MaxScale [accounts_east] type=server address=192.168.56.102 port=3306 [accounts_west] type=server address=192.168.122.85 port=3306 [Sharded-Service] type=service router=schemarouter servers=accounts_west,accounts_east
  61. @hellosct1 – PHP Montreal #1 - 2024 Maxscale : Aperçu

    • Basic – Performance et évolutivité • Répartition lecture/écriture • Équilibrage de charge adaptatif • Lecture causale • Mise en cache des résultats de requête avec Redis – HA • Failover Automatique • Relecture des transactions – Plusieurs moniteurs • Environnements ColumnStore et Replicated. • Avancée – Cooperative locking • MaxScale HA • Multiple MaxScale Monitors in a Cluster • Security – Dynamic data masking – Query limitation – Limiting query results – Performance statistics – Central query logging
  62. @hellosct1 – PHP Montreal #1 - 2024 NoSQL Document protocol

    • Le module nosqlprotocol permet d'utiliser un serveur ou un cluster MariaDB – comme backend d'une application utilisant une bibliothèque client MongoDB®. • En interne, tous les documents sont stockés dans une table contenant deux colonnes : – une colonne id pour l'identifiant de l'objet – une colonne doc pour le document lui-même. MariaDB MaxScale App id doc
  63. @hellosct1 – PHP Montreal #1 - 2024 Exemple avec Mascale

    • Configuration : maxscale.conf [MongoDB-Listener] type=listener service=Read-Write-Service protocol=nosqlprotocol nosqlprotocol.user=maxscale nosqlprotocol.password=Password123! port=17017 https://mariadb.com/resources/blog/how-to-manage-nosql-data-with-mariadb/
  64. @hellosct1 – PHP Montreal #1 - 2024 En résumé •

    Choisir sa ou ses bases de données – Peut devenir un casse tête • Utilisation et les connaissances – Ne sont plus un frein • Pensez sur la durée – Les évolutions – L’approche modulaire – …