Открыть сервис

BSON

BSON — это формат сериализации данных, основанный на двоичном (бинарном) представлении. Он расшифровывается как Binary JSON (двоичный JSON) и предназначен для хранения и обмена структурированными данными, подобно текстовому формату JSON, но с более компактным и быстрым для машинной обработки представлением. BSON был разработан как основной формат хранения данных в документо-ориентированной системе управления базами данных MongoDB.

История

Формат BSON был впервые разработан компанией MongoDB Inc. (тогда — 10gen) в 2009 году. Целью создания формата было обеспечение более эффективной сериализации и десериализации данных, чем это возможно с помощью текстового JSON. В отличие от текстового формата, BSON использует упорядоченные типы данных и позволяет хранить размер полей заранее, что ускоряет операции поиска и обновления.

Первое формальное описание спецификации BSON появилось вместе с выходом MongoDB 1.0 в том же 2009 году. В 2017 году спецификация BSON была опубликована на сайте bsonspec.org, и с тех пор формат поддерживается сообществом и развивается как открытый стандарт.

Классификация

BSON является форматом сериализации данных и относится к классу двоичных протоколов обмена. В отличие от текстовых форматов (JSON, YAML, XML), он не предназначен для удобочитаемости человеком без специальных инструментов. BSON также не является реляционной базой данных или языком запросов — это лишь способ представления информации.

Устройство и характеристики

Принцип кодирования

BSON документ представляет собой последовательность байтов, организованную следующим образом:

Поддерживаемые типы данных

BSON поддерживает больше типов данных, чем JSON. Основные из них:

ТипОписаниеКод типа
DoubleЧисло с плавающей запятой двойной точности (IEEE 754)0x01
UTF-8 stringСтрока в кодировке UTF-80x02
Embedded documentВложенный документ (объект)0x03
ArrayМассив0x04
Binary dataПроизвольные бинарные данные0x05
ObjectId12-байтовый уникальный идентификатор0x07
BooleanЛогическое значение true/false (1 байт)0x08
UTC datetimeДата и время в формате UTC (миллисекунды с эпохи Unix)0x09
NullПустое значение0x0A
Regular expressionРегулярное выражение0x0B
JavaScript codeКод JavaScript0x0D
32-bit integerЦелое число со знаком (32 бита)0x10
64-bit integerЦелое число со знаком (64 бита)0x12
Decimal128Десятичное число с плавающей запятой (128 бит, IEEE 754-2008)0x13

Размеры

Каждый элемент в BSON имеет заголовок, который содержит тип поля и его имя. Это делает BSON несколько избыточным по сравнению с чисто бинарными форматами (например, Protocol Buffers), но упрощает разбор и позволяет обновлять структуру данных без перекомпиляции.

Средняя эффективность сжатия BSON по сравнению с текстовым JSON составляет примерно 20–30% экономии объёма (за счёт двоичного представления чисел и отсутствия лишних символов). Однако для строк небольшой длины (например, коротких имён полей) BSON может быть избыточнее из-за обязательного включения имени поля в каждый элемент.

Применение

BSON используется в первую очередь в СУБД MongoDB, где он является нативным форматом хранения документов и протоколом взаимодействия между клиентом и сервером. Каждый документ, хранящийся в коллекции MongoDB, фактически представляет собой BSON-объект.

Области применения BSON:

Пример конвертации JSON → BSON

Исходный JSON: ``json { "name": "Иван", "age": 30, "active": true, "skills": ["Python", "MongoDB"], "address": { "city": "Москва" } } `` После сериализации в BSON этот документ будет иметь общий размер порядка 70–80 байтов (в зависимости от длины имён полей), в то время как текстовый JSON занимает примерно 100–120 байтов в кодировке UTF-8.

Критика

BSON не лишён недостатков. Основные критические замечания:

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →