Статья представляет собой вольный перевод информации, представленной на официальном сайте.
Введение
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 #открытый исходный код #спецификации #спецификация #открытый исходный код
-
Создание Современного Api На Php В 2020 Году
19 Oct, 24 -
Внедрение Блокчейна В Нефтегазовой Отрасли
19 Oct, 24