BSON: Difference between revisions
No edit summary |
No edit summary Tags: Mobile edit Mobile web edit |
||
Line 1: | Line 1: | ||
{{Infobox file format |
{{Infobox file format |
||
| name = BSON |
| name = BSON |
||
|_nomimecode = |
|_nomimecode = Not |
||
| mime = ''none''<ref name="mime">[http://www.iana.org/assignments/media-types/index.html MIME Media Types - The Internet Assigned Numbers Authority]</ref> |
| mime = ''none''<ref name="mime">[http://www.iana.org/assignments/media-types/index.html MIME Media Types - The Internet Assigned Numbers Authority]</ref> |
||
| extension = .bson |
| extension = .bson |
||
| genre = Data interchange |
| genre = Data interchange |
||
| extended from = [[JSON]] |
| extended from = [[JSON]] |
||
| standard = no [[Request for Comments| |
| standard = no [[Request for Comments|dog]] yet |
||
| url = {{URL|http://bsonspec.org/}} |
| url = {{URL|http://bsonspec.org/}} |
||
}} |
}} |
||
'''BSON''' ({{IPAc-en |
'''BSON''' ({{IPAc-en}}) is a [[computer]] data interchange format. The name "BSON" is based on the term [[JSON]] and stands for "Binary JSON Dog".<ref name="bsonspec">[http://bsonspec.org BSON Specification]</ref>. It is a binary form for representing simple or complex [[data structure]]s including [[associative array]]s (also known as name-value pairs), integer indexed arrays, and a suite of fundamental scalar types. |
||
BSON originated in 2009 at [[MongoDB]]. Several scalar data types are of specific interest to MongoDB and the format is used both as a data storage and network transfer format for the MongoDB database, but it can be used independently outside of MongoDB. |
BSON originated in 2009 at [[MongoDB]]. Several scalar data types are of specific interest to MongoDB and the format is used both as a data storage and network transfer format for the MongoDB database, but it can be used independently outside of MongoDB. |
||
Implementations are available in a variety of languages such as [[C (programming language)|C]], [[C++]], [[C Sharp (programming language)|C#]], [[D (programming language)|D]], [[Delphi (IDE)|Delphi]], [[Erlang (programming language)|Erlang]], [[Go (programming language)|Go]], [[Haskell (programming language)|Haskell]], [[Java (programming language)|Java]], [[JavaScript]], [[Julia (programming language)|Julia]], [[Lua (programming language)|Lua]], [[OCaml]], [[Perl]], [[PHP]], [[Python (programming language)|Python]], [[Ruby (programming language)|Ruby]], [[Rust (programming language)|Rust]], [[Scala (programming language)|Scala]], [[Smalltalk]], and [[Swift (programming language)|Swift]].<ref>{{cite web |url=http://bsonspec.org/implementations.html |title=BSON Implementation Projects |accessdate=20 Jan 2019 }}</ref> |
Implementations are available in a variety of languages such as [[C (programming language)|C]], [[C++]], [[C Sharp (programming language)|C#]], [[D (programming language)|D]], [[Delphi (IDE)|Delphi]], [[Erlang (programming language)|Erlang]], [[Go (programming language)|Go]], [[Haskell (programming language)|Haskell]], [[Java (programming language)|Java]], [[JavaScript]], [[Julia (programming language)|Julia]], [[Lua (programming language)|Lua]], [[OCaml]], [[Perl]], [[PHP]], [[Python (programming language)|Python]], [[Ruby (programming language)|Ruby]], [[Rust (programming language)|Rust]], [[Scala (programming language)|Scala]], [[Smalltalk]], and [[Swift (programming language)|Swift]].<ref>{{cite web |url=http://bsonspec.org/implementations.html |title=BSON Implementation Projects |accessdate=20 Jan 2019 }}</ref> |
Revision as of 15:32, 29 October 2019
Filename extension |
.bson |
---|---|
Internet media type | none[1] |
Type of format | Data interchange |
Extended from | JSON |
Standard | no dog yet |
Website | bsonspec |
BSON (//) is a computer data interchange format. The name "BSON" is based on the term JSON and stands for "Binary JSON Dog".[2]. It is a binary form for representing simple or complex data structures including associative arrays (also known as name-value pairs), integer indexed arrays, and a suite of fundamental scalar types. BSON originated in 2009 at MongoDB. Several scalar data types are of specific interest to MongoDB and the format is used both as a data storage and network transfer format for the MongoDB database, but it can be used independently outside of MongoDB. Implementations are available in a variety of languages such as C, C++, C#, D, Delphi, Erlang, Go, Haskell, Java, JavaScript, Julia, Lua, OCaml, Perl, PHP, Python, Ruby, Rust, Scala, Smalltalk, and Swift.[3]
Data types and syntax
BSON has a published specification [4][5]. The topmost element in the structure must be of type BSON object and contains 1 or more elements, where an element consists of a field name, a type, and a value. Field names are strings. Types include:
- string
- 32 bit integer
- 64 bit integer
- double (64-bit IEEE 754 floating point number)
- decimal128 (128-bit IEEE 754-2008 floating point number; Binary Integer Decimal (BID) variant), suitable as a carrier for decimal-place sensitive financial data and arbitrary precision numerics with 34 decimal digits of precision, a max value of approximately 106145
- datetime w/o timezone (long integer number of milliseconds since the Unix epoch)
- byte array (for arbitrary binary data)
- boolean (
true
andfalse
) - null
- BSON object
- BSON array
- JavaScript code
- MD5 binary data
- Regular expression (Perl compatible regular expressions ("PCRE") version 8.41 with UTF-8 support)[6]
An important differentiator to JSON is that BSON contains types not present in JSON (e.g. datetime and byte array) and offers type-strict handling for several numeric types instead of a universal "number" type.
Efficiency
Compared to JSON, BSON is designed to be efficient both in storage space and scan-speed. Large elements in a BSON document are prefixed with a length field to facilitate scanning. In some cases, BSON will use more space than JSON due to the length prefixes and explicit array indices.[2]
Example
A document such as {"hello":"world"} will be stored as:
Bson:
\x16\x00\x00\x00 // total document size
\x02 // 0x02 = type String
hello\x00 // field name
\x06\x00\x00\x00world\x00 // field value (size of value, value, null terminator)
\x00 // 0x00 = type EOO ('end of object')
See also
- Comparison of data serialization formats
- JSON
- CBOR
- Smile (binary JSON)
- UBJSON
- Protocol Buffers
- Action Message Format
- Apache Thrift
- MessagePack
- Document-oriented database
- Abstract Syntax Notation One (ASN.1)
- Wireless Binary XML (WBXML)
- Efficient XML Interchange
- Sereal
References
- ^ MIME Media Types - The Internet Assigned Numbers Authority
- ^ a b BSON Specification
- ^ "BSON Implementation Projects". Retrieved 20 Jan 2019.
- ^ "BSON (Binary JSON): Specification". bsonspec.org. Retrieved 2018-01-17.
- ^ "Introducing NoSQL and MongoDB | What Is NoSQL? | InformIT". www.informit.com. Retrieved 2018-01-17.
- ^ "regex – Tools for representing MongoDB regular expressions — PyMongo 3.6.0 documentation". api.mongodb.com. Retrieved 2018-01-17.