Производительность gzipped json против эффективной двоичной сериализации

JSON и Gzip - это простой способ сериализации данных. Они широко применяются в разных языках программирования. Также это представление переносимо между системами (не так ли?).

Мой вопрос заключается в том, достаточно ли json+gzip (менее чем в 2 раза дороже) по сравнению с очень эффективными методами двоичной сериализации? Я ищу затраты времени и места при сериализации различных видов данных.

1 ответ

Сериализация с помощью json+gzip занимает на 25% больше места, чем rawbytes+gzip для чисел и объектов. Для чисел с ограниченной точностью (4 значащих цифры) размер сериализации одинаков.

Источник: https://github.com/csiz/gzip-json-performance

чисел

Я выбрал 1e6 (64-битные) числа с плавающей запятой. Я предполагаю, что эти числа взяты из некоторого естественного источника, поэтому я использую экспоненциальное распределение и округляем их до 4 значащих цифр. Поскольку JSON записывает все представление, я думал, что хранение больших чисел может повлечь за собой большие затраты (123456,000000, вместо 0,123456), поэтому я проверяю оба случая. Есть также набор чисел, которые не были округлены.

Сжатый JSON против двоичного для небольших чисел (около 1,0):

json 3.29mb json/raw 43%
binary 3.03mb binary/raw 40%
json/binary 1.09

Сжатый JSON против двоичного для больших чисел (около 1000000):

json 2.58mb json/raw 34%
binary 3.10mb binary/raw 41%
json/binary 0.83

Сжатый JSON против двоичного для полной точности удваивается:

json 8.90mb json/raw 117%
binary 7.27mb binary/raw 95%
json/binary 1.22

Объекты

Для объектов я сериализую их обычным ленивым способом в JSON:

[
  {
    "small number": 0.1234,
    "large number": 1234000,
    "choice": "two"
  },
  ...
]

В то время как для эффективного двоичного представления я векторизирую объекты:

n = 1e6
small number = binary([0.1234, ...])
large number = binary([1234000, ...])
choice = binary([2, ...]) # indexes to the enum ["zero", "one", ..., "four"]

Сжатый JSON против двоичного для объектов:

json 8.36mb json/raw 44%
binary 6.59mb binary/raw 35%
json/binary 1.27
Другие вопросы по тегам