BSON
| Tipus | Data interchange |
|---|---|
| Extensió | bson |
| MIME | application/bson |
| Extensió de | JSON |
| Més informació | |
| Wiki del format de fitxer | BSON |
| Lloc web | bsonspec.org |
BSON (json binari)[1] és un format d'intercanvi de dades informàtiques que estén JSON. És una forma binària per representar estructures de dades simples o complexes, incloent-hi matrius associatives (també conegudes com a parells nom-valor), matrius indexades per enters i un conjunt de tipus escalars fonamentals. BSON es va originar el 2009 a MongoDB. Diversos tipus de dades escalars són d'interès específic per a MongoDB i el format s'utilitza tant com a format d'emmagatzematge de dades com de transferència de xarxa per a la base de dades MongoDB, però es pot utilitzar independentment fora de MongoDB. Les implementacions estan disponibles en una varietat de llenguatges com ara C, C++, C#, D, Delphi, Erlang, Go, Haskell, Java, JavaScript, Julia, Lua, OCaml, Perl, PHP, Python, Ruby, Rust, Scala, Smalltalk i Swift.[2]
Tipus de dades i sintaxi
[modifica]BSON té una especificació publicada.[3][4] L'element superior de l'estructura ha de ser de tipus objecte BSON i contenir 1 o més elements, on un element consisteix en un nom de camp, un tipus i un valor. Els noms de camp són cadenes de text. Els tipus inclouen:
- Cadena Unicode (utilitzant la codificació UTF-8)
- enter de 32 bits
- enter de 64 bits
- doble (nombre de coma flotant IEEE 754 de 64 bits, incloent-hi NaN/Inf)
- decimal128 (nombre de coma flotant IEEE 754-2008 de 128 bits; variant decimal entera binaria (BID)), adequat com a suport per a dades financeres sensibles a decimals i numèrics de precisió arbitrària amb 34 dígits decimals de precisió, un valor màxim d'aproximadament 10 6145
- datetime sense zona horària (nombre enter llarg de mil·lisegons des de l'època d'Unix)
- matriu de bytes (per a dades binàries arbitràries)
- Booleà (
trueifalse) - nul
- Objecte BSON
- Matriu BSON
- Codi JavaScript
- Dades binàries MD5
- Expressió regular (expressions regulars compatibles amb Perl ("PCRE") versió 8.41 amb suport UTF-8)[5]
Un diferenciador important de JSON és que BSON conté tipus que no són presents a JSON (per exemple, datetime, byte array i floats IEEE 754 adequats) i ofereix un maneig estricte de tipus per a diversos tipus numèrics en lloc d'un tipus "número" universal. Per a situacions en què aquests tipus addicionals s'hagin de representar de manera textual, es pot utilitzar el format JSON estès de MongoDB[6]
Eficiència
[modifica]En comparació amb JSON, BSON està dissenyat per ser eficient tant en espai d'emmagatzematge com en velocitat d'escaneig. Els elements grans d'un document BSON tenen un prefix amb un camp de longitud per facilitar l'escaneig. En alguns casos, BSON utilitzarà més espai que JSON a causa dels prefixos de longitud i els índexs explícits de les matrius.[7]
Exemple
[modifica]
Un document com ara {"hola": "món"} s'emmagatzemarà com a:
\x 16 \x 00 \x 00 \x 00 // mida total del document
\ x02 // 0x02 = tipus String
hola\x 00 // nom del camp
\x 06 \x 00 \x 00 \x 00 món\x 00 // valor del camp (mida del valor, valor, terminador nul)
\x 00 // 0x00 = tipus EOO ('final de l'objecte')
Referències
[modifica]- ↑ «BSON (Binary JSON) Serialization» (en anglès). [Consulta: 23 novembre 2021].
- ↑ «BSON Implementation Projects» (en anglès). [Consulta: 24 novembre 2021].
- ↑ «BSON (Binary JSON): Specification» (en anglès). bsonspec.org. [Consulta: 24 novembre 2021].
- ↑ «Introducing NoSQL and MongoDB | What Is NoSQL? | InformIT» (en anglès). www.informit.com. [Consulta: 17 gener 2018].
- ↑ «regex – Tools for representing MongoDB regular expressions — PyMongo 3.6.0 documentation» (en anglès). api.mongodb.com. Arxivat de l'original el 2016-05-10. [Consulta: 17 gener 2018].
- ↑ «MongoDB Extended JSON documentation» (en anglès). docs.mongodb.com. [Consulta: 3 maig 2020].
- ↑ «BSON (Binary JSON) Serialization» (en anglès). [Consulta: 23 novembre 2021].
