BSON ( / ˈ b iː s ə n / ) est un format d'échange de données informatiques . Le nom « BSON » est basé sur le terme JSON et signifie « Binary JSON ». Il s'agit d'une forme binaire permettant de représenter des structures de données simples ou complexes, notamment des tableaux associatifs (également appelés paires nom-valeur ), des tableaux indexés sur des entiers et une suite de types scalaires fondamentaux . BSON est né en 2009 chez MongoDB . Plusieurs types de données scalaires présentent un intérêt particulier pour MongoDB et le format est utilisé à la fois comme format de stockage de données et de transfert réseau pour la base de données MongoDB, mais il peut être utilisé indépendamment en dehors de MongoDB. Les implémentations sont disponibles dans une variété de langages tels que C , C++ , C# , D , Delphi , Erlang , Go , Haskell , Java , JavaScript , Julia , Lua , OCaml , Perl , PHP , Python , Ruby , Rust , Scala , Smalltalk et Swift .
Types de données et syntaxe
BSON a une spécification publiée. L'élément le plus haut de la structure doit être de type objet BSON et contenir un ou plusieurs éléments, où un élément se compose d'un nom de champ, d'un type et d'une valeur. Les noms de champ sont des chaînes. Les types incluent :
- Chaîne Unicode (utilisant le codage UTF-8 )
- entier 32 bits
- Entier 64 bits
- double (nombre à virgule flottante IEEE 754 64 bits , y compris NaN/Inf)
- decimal128 (nombre à virgule flottante IEEE 754-2008 128 bits ; variante décimale binaire entière (BID)), adapté comme support pour les données financières sensibles à la décimale et les nombres de précision arbitraire avec 34 chiffres décimaux de précision, une valeur maximale d'environ 10 6145
- datetime sans fuseau horaire (nombre entier long de millisecondes depuis l' époque Unix )
- tableau d'octets (pour données binaires arbitraires)
- Booléen (
trueetfalse) - nul
- Objet BSON
- Réseau BSON
- Code JavaScript
- Données binaires MD5
- Expression régulière ( expressions régulières compatibles Perl (« PCRE ») version 8.41 avec prise en charge UTF-8)
Un élément différenciateur important de JSON est que BSON contient des types non présents dans JSON (par exemple, datetime, tableau d'octets et floats IEEE 754 appropriés) et offre une gestion stricte des types pour plusieurs types numériques au lieu d'un type « nombre » universel. Pour les situations où ces types supplémentaires doivent être représentés de manière textuelle, le format JSON étendu de MongoDB peut être utilisé.
Efficacité
Par rapport à JSON, BSON est conçu pour être efficace à la fois en termes d'espace de stockage et de vitesse d'analyse. Les éléments volumineux d'un document BSON sont préfixés par un champ de longueur pour faciliter l'analyse. Dans certains cas, BSON utilisera plus d'espace que JSON en raison des préfixes de longueur et des indices de tableau explicites.
Exemple
Un document tel que {"hello": "world"}sera stocké comme :
\x16\x00\x00\x00 // taille totale du document \x02 // 0x02 = type Chaîne bonjour\x00 // nom du champ \x06\x00\x00\x00world\x00 // valeur du champ (taille de la valeur, valeur, terminateur nul) \x00 // 0x00 = type EOO ('fin de l'objet')