JSON en base de données,
manipulons un peu cela

2020-10 @Grummfy

JSON en DB?

  • DB relationnel
  • JSON
    • simple et lisible
    • transversale au langage
    • "validable"
  • alternatives
    • vs serialize()
    • vs blob, text, ...
    • vs N colonnes
    • ...

Structure de DB simplifiée

VS

DB Structure

Simple

=>

type JSON

MySql vs MariaDb vs PostgreSql

MySql MariaDb PostgreSql
json column ✘*
jsonb column
index ✘** ✘**

mysql 5.7 - octobre 2015
mariadb 10.2 - avril 2016
postgresql 9.2 - septembre 2013

php 5.6 (EOL) <-> PHP 7.1 (EOL)

Index sur un champ

  • MySql
    • "GENERATED ALWAYS"
  • MariaDB
    • "virtual column"
  • PostgreSql
    • même stratégie
    • recommande jsonb

Manipulation

  • fonction JSON_*
    • lire, écrire, chercher, transformer, ...
  • short syntax
    • lire, extraire de la valeur
    • ->, ->> (champs)
    • #>, #>> (chemin)

Manipulation - lire/ecrire

  • recherche
    • JSON_CONTAINS, JSON_EXTRACT, JSON_UNQUOTE, JSON_TABLE ...
      • JSON_EXTRACT(field, "$.id") field->$.id
    • valeur, clef, type, collection, ...
  • modification
    • JSON_ARRAY_*, JSON_INSERT, JSON_REPLACE, ...
      • JSON_REPLACE(field, '$.a', 10)
    • complet ou partiel

ORM

Quand utiliser du JSON ?

  • Value Object
  • Collection de V.O.
  • Structure/déstructure simple
  • ...

It depends!

Performances

Je n'ai pas fait de test, car je n'ai jamais rencontré de soucis

¯\_(ツ)_/¯

Il faut des problèmes pour pouvoir évaluer la performances

Questions ?

Grummfy

Jonathan Van Belle

@Grummfy

@Grummfy@mamot.fr

me@grummfy.be

github.com/grummfy

gitlab.com/grummfy

ForumPHP 2020 - JSON en base de données, manipulons un peu cela

By Jonathan Van Belle

ForumPHP 2020 - JSON en base de données, manipulons un peu cela

Une base de données relationnelle moderne peut facilement gérer du JSON. Avec quelques connaissances, vous pouvez facilement enrichir le comportement de votre modèle de données avec un soupçon de JSON. Nous verrons donc, comment utiliser certaines fonctionnalités avancées de mysql / mariadb et postgresql afin d'effectuer certaines recherches, créer des index, utiliser des colonnes virtuelles, etc. Au final, nous verrons que dans bien des cas, un peu de JSON résout pas mal de soucis, qu'une table ou plusieurs colonnes en plus, auraient rendu plus compliqué. -- https://event.afup.org/forum-php-2020/programme-forum-php-2020/#3431 https://joind.in/event/forum-php-2020/json-en-base-de-donnees-manipulons-un-peu-cela

  • 3,435