Universal Binary Json — Еще Один Двоичный Json.

Статья представляет собой вольный перевод информации, представленной на официальном сайте.



Введение

JSON — широко распространенный и популярный формат обмена данными.

Его элегантность, простота обработки и относительно богатая система типов стали естественным выбором для многих разработчиков, которым необходимо быстро и легко хранить или случайным образом передавать данные между системами.

К сожалению, процесс упаковки и распаковки структур, родных для языка программирования, с использованием текстового представления данных, пригодного для передачи по сети, имеет значительные ресурсозатраты.

В высоконагруженных системах обход этапа обработки форматированного текста JSON может привести к более высокой производительности обработки информации с точки зрения времени и уменьшению размера хранимых данных.

Для достижения лучших результатов в таких случаях становится полезным использовать двоичный формат. JSON .



Почему?

Попытки использовать JSON быстрее, быстрее, используя двоичные спецификации, такие как БСОН , БЖСОН или Улыбка существуют, но терпят неудачу по двум причинам: Внутренние типы данных .

Использование внутренних типов данных, уникальных для двоичных форматов и изначально не включенных в стандарт. JSON , делает приведенные выше спецификации непригодными для широкого использования, поскольку в зависимости от реализации каждый такой тип может интерпретироваться по-разному.

Сложность реализации .

Некоторые форматы обеспечивают более высокую производительность, в то время как другие обеспечивают более компактное представление за счет более сложной и запутанной спецификации.

Что, в свою очередь, замедляет или делает невозможным их распространение и реализацию.

Простота использования – двигатель успеха JSON .

Например, БСОН определяет типы данных для регулярных выражений, блоков кода JavaScript и других конструкций, которые не имеют соответствующего типа данных в JSON .

БЖСОН также определяет свои собственные типы данных, оставляя достаточно места для ошибок, связанных с интерпретацией типов в двух разных реализациях.

Улыбка определяет более сложные типы данных, правила генерации и анализа для эффективного использования пространства.

Все существующие двоичные спецификации JSON страдают от проблем несовместимости и сложности реализации, что, естественно, уничтожает главное преимущество JSON Что сделало его таким популярным, так это его простота.

Простота JSON позволил создавать реализации на различных языках программирования и сделал это удобным и сразу понятным для всех, кто использует ваши данные напрямую.

Любая успешная двоичная спецификация JSON должны принять эти свойства, чтобы быть по-настоящему полезными для сообщества в целом.



Почему бы не JSON+gzip?

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

Но здесь есть две проблемы: на 50% скорость работы падает с данными.

Невозможно исследовать данные и работать с ними напрямую.

Получается, что размер передаваемых данных можно уменьшить в среднем на 75%, но при этом существенно возрастут накладные расходы на обработку.



Цели

Универсальный двоичный JSON Спецификация разработана исключительно на принципах полной совместимости с JSON , простота, скорость и легкость понимания.

Чтение и запись в этом формате тривиальны.

В качестве побочного эффекта пространство, занимаемое данными, сокращается в среднем на 30%.

Полная совместимость .

100% совместим с JSON и эксклюзивное использование типов данных, поддерживаемых всеми современными языками программирования.

Это позволяет эффективно конвертировать данные между JSON И Универсальный двоичный JSON без необходимости использования разработчиками сложных структур данных, которые могут не поддерживаться языком программирования.

Простота использования .

Достигается за счет того, что за основу взята спецификация JSON и использует только одну двоичную структуру для рационального описания типов.

Благодаря этому мы добиваемся доступности и простоты понимания разработчиками.

Скорость и эффективность .

Мотивацией использования двоичных форматов является скорость и эффективность анализа данных.

При этом, как побочный эффект, сокращение потребления площади на 30%.



Формат данных

Обзор однобайтовой структуры в спецификации, используемой для описания всех поддерживаемых типов.

 [type, 1-byte char]([length, 1 or 4-byte integer])([data])
тип — 1 байт, символ ASCII. Используется для обозначения типа данных, следующих за ним.

длина (необязательный) — 1 или 4 байта (целое значение) в зависимости от длины или размера объекта.

Для массива — его длина.

Для объекта количество пар ключ/значение.

Если длина или количество элементов от 0 до 254 включительно, то используется 1 байт. Это поле со значением 255 зарезервировано для объектов и массивов неизвестной длины.

данные (необязательный) — последовательность байтов, которая непосредственно представляет данные объекта.

Поля длина И данные используются или не используются в зависимости от типа данных.

Например, 32-битный целочисленный тип имеет стандартный размер 4 байта.

Для записи значения этого типа понадобится 1 байт для указания типа и 4 байта для самого значения.

В этом случае поле длина не использовался по причине ненадобности.

Благодаря такому подаче информации поставленные цели достигаются.



Возможности

Спецификация Универсальный двоичный JSON поддерживается: основные типы данных массивы объекты целые числа, массивы и объекты неизвестной длины или размера потоковая передача данных Важные особенности : Значения числовых типов записываются в порядке байтов с обратным порядком байтов ( Большой порядок байтов ) и основная кодировка текстовой информации – UTF-8 .



Сообщество

Официальный сайт спецификаций УБЖСОН Универсальный двоичный JSON Принимал участие И обсуждено Реализация на Java — Универсальная двоичная библиотека Java JSON Простая реализация на C # — Убджсон.

NET Реализации на других языках программирования будут доступны по мере их появления.

перейдите по этой ссылке .

P.S.: Автор спецификации и реализации на Java, Рияд Калла и я, автор статьи и реализации на C#, буду рад любому вашему участию в процессе работы над спецификацией.

Теги: #ubjson #json #открытый исходный код #спецификации #спецификация #открытый исходный код

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.