- Réécriture des fonctions JSON existantes de SQLite. Selon les cas d’usage, l’exécution peut être plusieurs fois plus rapide
- À l’origine, les fonctions JSON opéraient en 3 étapes
- Analyse du JSON vers un format binaire interne plus facile à traiter pour le code C
- Exécution de l’opération demandée, comme rechercher un champ précis ou modifier le JSON
- Si l’opération a modifié le JSON, conversion du format binaire interne en chaîne JSON RFC-8279 pour l’afficher ou le stocker
- En dehors de l’étape 2, les étapes 1 et 3 constituent un surcoût
- SQLite utilisait une forme binaire interne du JSON contenant de nombreux pointeurs. Bien adaptée aux programmes C, mais difficile à sérialiser
- Avec la réécriture JSONB, cette représentation binaire interne du JSON est transformée en un tableau d’octets contigu pouvant être lu ou écrit comme un BLOB SQL
- Cela permet de stocker dans la base de données la représentation interne du JSON utilisée en interne, au lieu du texte JSON, ce qui élimine le surcoût des étapes 1 et 3
Ce qui change
- Toutes les fonctionnalités existantes sont conservées. Seules de nouvelles capacités sont ajoutées
- Désormais, toutes les fonctions JSON qui acceptent du texte JSON en entrée acceptent aussi le contenu binaire JSONB pour les mêmes paramètres
- Il n’est pas nécessaire d’indiquer à la fonction si elle doit lire du texte ou des données binaires. Elle le détecte elle-même
- Les fonctions JSON qui produisent du JSON sont maintenant proposées en deux versions
- Les fonctions
json_ existantes continuent de fonctionner comme avant
- Des fonctions
jsonb_ renvoient du JSONB au lieu de JSON texte, ce qui évite l’étape 3 dans le traitement courant
- Sans modifier l’application, la vitesse augmente légèrement (1 %), mais tout continue de fonctionner exactement comme avant
- En revanche, si l’application est adaptée pour stocker du JSONB au lieu de texte JSON, il est possible d’obtenir au moins un gain de performance de 3x, en particulier pour les traitements intensifs en JSON
- De plus, comme JSONB est dans la plupart des cas légèrement plus compact que le texte JSON (environ 5 % à 10 % plus petit), les bases de données qui utilisent beaucoup de JSON peuvent aussi voir leur taille diminuer légèrement
1 commentaires
Avis Hacker News
Il y a beaucoup de confusion autour de JSONB.
jsonb_.JSONB est un format proposé par Postgres, recommandé car il améliore les performances de lecture par rapport au JSON classique.
Il a fallu des années pour comprendre l’intérêt des document stores, et ils sont excellents pour construire des POC (Proof of Concept).
Interrogations sur le processus de release de SQLite.
Il est possible d’essayer JSONB dans un snapshot de pré-release ou dans le playground.
L’idée centrale de la spécification JSONB est que chaque élément commence par un en-tête contenant sa taille et son type.
Familiarité avec le BSON de MongoDB, mais pas avec JSONB.
JSONB a un impact sur les performances.
Il serait souhaitable d’avoir un moyen de compresser les données JSON sur plusieurs lignes.
Malgré le format interne, cela peut être utilisé immédiatement dans les applications.
json_eachpeut accepter des paramètres liés depuis l’application sous forme de BLOB JSONB.