Существует ли установленный формат сообщений, который хорошо обрабатывает повторяющиеся ключи? - PullRequest
0 голосов
/ 07 марта 2019

В моей работе у меня есть очень большие вложенные объекты, которые при сериализации в JSON имеют большую часть своего размера по именам ключей (которые являются именами полей, которые многократно повторяются).Это кажется пустой тратой.

Так что я придумал новый формат:

["foo","bar"]{0: [1, 2, {0: 12}], 1: true}

, который эквивалентен следующему json:

{"foo":[1, 2, {"foo":12}], "bar": true}

Вы не увидите значительной экономии, если определенный ключ не используется много раз, но в моем случае это именно то, что происходит.Я протестировал его с большим реальным объектом из наших производственных данных, который составляет 87 МБ в разархивированном формате json.После переформатирования в предложенный выше формат, размер был 24 МБ.

Я также пробовал CBOR (72M) и пакет сообщений (71MB).

Я не утверждаю, что это будетлучший формат сообщений для всех случаев использования, но для меня это огромная экономия.Профилирование говорит, что почти все мое время тратится на распаковку этих больших файлов JSON, поэтому переключение на более компактный формат даст огромную экономию (что уже было несколько подтверждено при использовании CBOR).

К сожалению, при написанииСинтаксический анализатор / дамп python для необработанных объектов в вышеуказанном формате довольно прост, написание плагина Jackson или плагина serde для поддержки десериализации в реальные типы данных нереально с моими текущими временными ограничениями.

Итак, существует ли существующийстандарт сериализации данных, который эффективно устраняет повторяющиеся ключи (как в приведенном выше формате; не обязательно должен быть идентичным)?Я не хочу изобретать велосипед, если люди уже справились с этим.

...