JSON est un format d’échange de données largement utilisé dans de nombreuses applications et piles technologiques. BSON, la représentation binaire de JSON, est principalement utilisé en interne par MongoDB pour un stockage et une navigation de données efficaces.
Sommaire
JSON, ou JavaScript Object Notation, est un format lisible par l’homme pour l’échange de données, introduit au début des années 2000. Même si JSON est basé sur un sous-ensemble de la norme de langage de programmation JavaScript, il est totalement indépendant du langage.
Les objets JSON sont des containers associatifs, dans lesquels une clé de type chaîne est associée à une valeur (qui peut être un nombre, une chaîne, une valeur booléenne, un tableau, une valeur vide - null - voire un autre objet). Presque tous les langages de programmation prennent en charge cette structure de données abstraite : les objets en JavaScript, les dictionnaires en Python, les tables de hachage en Java et C#, les tableaux associatifs en C++, etc.
Les objets JSON sont structurés dans des formats lisibles par l’homme, qui sont également faciles à lire par les applications.
{
"_id": 1,
"name": { "first" : "John", "last" : "Backus" },
"contribs": [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ],
"awards": [
{
"award": "W.W. McDowell Award",
"year": 1967,
"by": "IEEE Computer Society"
}, {
"award": "Draper Prize",
"year": 1993,
"by": "National Academy of Engineering"
}
]
}
Notez que le fichier JSON est constitué de paires clé-valeur séparées par des virgules et que les paires clé et valeur sont indiquées par deux points. (:). L’objet JSON (document) commence et se termine par des accolades. Vous pouvez utiliser n’importe quel type de données pris en charge. L’exemple ci-dessus montre des chaînes de caractères (entre guillemets doubles), des nombres et des tableaux (entre crochets).
Alors que JavaScript devenait le principal langage du développement Web, JSON a commencé à faire du chemin. Grâce à sa lisibilité, à la fois par l’homme et par la machine, et à la simplicité relative de sa prise en charge par d’autres langages, JSON a rapidement dépassé le cadre de la page Web pour s’imposer dans tous les logiciels.
Aujourd’hui, JSON apparaît dans de nombreux cas différents :
MongoDB a été conçu dès le départ pour constituer une base de données axée sur une expérience de développement d’excellence. L’omniprésence de JSON en a fait le choix évident pour représenter les structures de données dans le modèle de données de document de MongoDB.
Il est plus facile de créer des applications en utilisant des piles technologiques telles que MEAN et MERN, car les développeurs peuvent utiliser un seul langage de programmation (JavaScript) de bout en bout.
Cependant, JSON est loin d’être idéal pour une utilisation dans une base de données pour les raisons suivantes.
1. JSON ne prend en charge qu’un nombre limité de types de données de base. Plus particulièrement, les données datetime et binaires ne sont pas prises en charge.
2. Les objets et les propriétés JSON n’ont pas de longueur fixe, ce qui ralentit la navigation.
3. JSON ne fournit pas de métadonnées ni d’informations sur les types, ce qui allonge la durée de récupération des documents.
BSON a été inventé pour combler les lacunes et rendre MongoDB JSON first tout en restant performant et polyvalent : une représentation binaire permettant de stocker les données sous forme de documents JSON, optimisée pour la vitesse, l’utilisation de l’espace et l’efficacité. En termes d’approche, il n’est pas différent d’autres formats d’échange binaire comme Protocol Buffers ou Thrift.
BSON signifie « Binary JSON » (JSON binaire), et c’est exactement ce pour quoi il a été inventé. Un fichier BSON est une représentation binaire du fichier JSON correspondant. Le format de sérialisation codé en binaire de BSON encode également les informations de type et de longueur, ce qui permet de le parcourir beaucoup plus rapidement que JSON.
BSON ajoute d’autres types de données (non natifs de JSON), tels que des dates et des données binaires, sans lesquels la compatibilité de MongoDB ne serait pas aussi complète.
Voici quelques exemples d’objets JSON et leurs représentations en Binary JSON correspondantes.
{"hello": "world"} →
\x16\x00\x00\x00 // total document size
\x02 // 0x02 = type String
hello\x00 // field name
\x06\x00\x00\x00world\x00 // field value
\x00 // 0x00 = type EOO ('end of object')
{"BSON": ["awesome", 5.05, 1986]} →
\x31\x00\x00\x00
\x04BSON\x00
\x26\x00\x00\x00
\x02\x30\x00\x08\x00\x00\x00awesome\x00
\x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40
\x10\x32\x00\xc2\x07\x00\x00
\x00
\x00
Consultez la spécification BSON pour savoir plus sur la grammaire BSON .
MongoDB stocke les données au format BSON à la fois en interne et sur le réseau. Tout ce que vous pouvez représenter en JSON peut être stocké nativement dans MongoDB et récupéré tout aussi facilement en JSON.
Lorsque vous utilisez le pilote MongoDB pour votre langage de programmation préféré, vous travaillez avec les structures de données natives de ce langage. Votre application doit convertir la structure de données native (par exemple, un objet JavaScript ou POJO) en JSON. Le pilote MongoDB se charge ensuite de convertir les données du format JSON au format BSON et inversement lors de l’interrogation de la base de données.
Contrairement aux systèmes qui stockent JSON sous forme de valeurs codées en chaîne ou de blobs codés en binaire, MongoDB utilise BSON pour offrir de puissantes fonctions d’indexation et d’interrogation sur le format de données le plus utilisé du Web.
Par exemple, MongoDB permet aux développeurs d’interroger et de manipuler des objets par des clés spécifiques à l’intérieur du document JSON/BSON, même dans des documents imbriqués à plusieurs couches de profondeur dans un enregistrement, et de créer des index hautes performances sur ces mêmes clés et valeurs.
Premièrement, les fichiers BSON peuvent contenir des objets datetime ou binaires qui ne sont pas nativement représentables en JSON pur.
Deuxièmement, chaque langage de programmation a sa propre sémantique d’objet. Les objets JSON ont des clés ordonnées, par exemple, tandis que les dictionnaires Python (la structure de données native la plus proche, analogue aux objets JavaScript) ne sont pas ordonnés, et des différences dans les types de données numériques et de chaîne peuvent aussi entrer en jeu. Troisièmement, BSON supporte une variété de types numériques qui ne sont pas natifs de JSON, et de nombreux langages les représentent différemment.
EJSON ou Extended JSON est un moyen compatible JSON de représenter les valeurs BSON dans MongoDB. Comme JSON ne prend en charge qu’un sous-ensemble des types pris en charge par BSON, MongoDB ajoute certaines extensions au format JSON, à savoir le mode canonique et le mode détendu. MongoDB fournit des méthodes telles que « serialize », « deserialize », « parse » et « stringify » pour EJSON.
Lorsqu’une application écrit ou met à jour des données dans MongoDB à l’aide du shell, de l’API ou de MongoDB Atlas, les données sont analysées au format BSON par le pilote MongoDB. L’analyse syntaxique consiste à identifier et à interpréter les objets JavaScript ou la structure JSON, à faire correspondre chaque champ au type de données BSON approprié et à convertir les valeurs. Lorsqu’une application demande des données à MongoDB, le pilote convertit les données en chaîne JSON avant de les envoyer au serveur.
Consultez votre documentation sur les pilotes pour bien comprendre comment accéder correctement aux données sauvegardées par MongoDB BSON dans votre langage.
JSON | BSON | |
---|---|---|
Encoding | UTF-8 string | Binary |
Data Support | String, boolean, number, array, object, null | String, boolean, number (integer, float, long, decimal128...), array, null, date, BinData |
Readability | Human and machine | Machine only |
JSON et BSON sont effectivement des cousins proches de par leur conception. BSON est conçu comme représentation binaire des données JSON, avec des extensions spécifiques pour des applications plus larges, et optimisé pour le stockage et la navigation des données. Tout comme JSON, BSON permet d’intégrer des objets et des tableaux.
En particulier, BSON se différencie de JSON par sa prise en charge de certains types de données plus avancés. JSON ne fait pas, par exemple, de distinction entre les entiers (qui sont des nombres ronds) et les nombres à virgule flottante (qui ont une précision décimale plus ou moins importante).
La plupart des langages de programmation côté serveur comportent des types numériques plus élaborés (nombre entier, précision régulière, nombre à virgule flottante (« float »), virgule flottante à double précision (« double ») et valeurs booléennes, chacun avec sa propre utilisation optimale pour des opérations mathématiques efficaces.
L’un des principaux attraits pour les développeurs utilisant des bases de données avec des modèles de données JSON et BSON est le schéma dynamique et flexible qu’ils fournissent par rapport aux modèles de données tabulaires rigides utilisés par les bases de données relationnelles.
Premièrement, les documents MongoDB sont polymorphes : les champs peuvent varier d’un document à l’autre au sein d’une même collection (par analogie avec les tables d’une base de données relationnelle). Cette flexibilité permet de modéliser plus facilement des données de n’importe quelle structure et d’adapter le modèle en fonction de l’évolution des besoins.
Deuxièmement, il n’est pas nécessaire de déclarer la structure des documents à la base de données : les documents sont autodescriptifs. Les développeurs peuvent commencer à écrire du code et conserver les objets au fur et à mesure de leur création.
Troisièmement, si un nouveau champ doit être ajouté à un document, il peut être créé sans affecter tous les autres documents de la collection, sans mettre à jour le catalogue du système central et sans mettre la base de données hors ligne. Lorsque des modifications doivent être apportées au modèle de données, la base de données de documents continue à stocker les objets mis à jour sans qu’il soit nécessaire d’effectuer de coûteuses opérations ALTER TABLE ou, pire encore, de redéfinir le schéma à partir de zéro.
Grâce à ces avantages, la flexibilité du modèle de données de documents est bien adaptée aux exigences des pratiques modernes de développement d’applications.
Bien qu’un schéma flexible soit une fonctionnalité puissante, il existe des situations où vous souhaiterez avoir plus de contrôle sur la structure des données et le contenu de vos documents. La plupart des bases de données de documents renvoient la mise en place de ces contrôles au développeur pour qu’il les implémente dans le code de l’application. Cependant, des bases de données de documents plus avancées fournissent une validation de schéma à l’aide d’approches comme la norme de schéma JSON de l’IETF adoptée par MongoDB. Essayez MongoDB Atlas en ligne maintenant !
Vous pouvez utiliser les outils JSON en ligne pour convertir entre BSON et JSON. MongoDB fournit également l’outil bsondump pour convertir BSON en JSON.
BSON présente les avantages suivants par rapport à JSON :
BSON prend en charge davantage de types de données, comme la date, l’heure et les données binaires.
La structure binaire de BSON permet une navigation et une recherche de données plus rapides.
BSON fournit des métadonnées supplémentaires, comme des informations sur la longueur et le type, ce qui accélère les recherches.
BSON est la sérialisation codée en binaire des données JSON. Alors que la chaîne JSON est lisible par l’homme, BSON doit être analysé. BSON offre l’avantage de comporter davantage de types de données, il est léger, peut être parcouru et peut stocker les données plus efficacement. Il est également efficace pour le codage et le décodage avec de nombreux langages de programmation.
Pour plus d’informations, consultez les ressources connexes :