Двоичный формат JSON, поддерживающий обход - PullRequest
0 голосов
/ 01 марта 2020

Кто-нибудь знает формат сериализации, который:

  1. Бинарный и, по крайней мере, относительно компактный,
  2. Может хранить данные JSON ( не Protobuf, Thrift, et c.),
  3. Поддерживает обход (т. Е. Вам не нужно анализировать весь документ, чтобы прочитать одну его часть), а
  4. Поддерживает большие файлы (например, 30 ГБ)?

Я смотрел на следующее:

  • CBOR - не поддерживает обход
  • MessagePack - не поддерживает Обход
  • UB JSON - не поддерживает обход
  • Smile - не поддерживает обход

  • BSON - поддерживает обход! Но максимальный размер документа составляет 2 ГБ.

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

Редактировать: Под "обходом" я подразумеваю то же самое, что авторы BSON означают - вы должны быть в состоянии найти данный объект, не анализируя весь файл. Amazon называет это «редким» или «поверхностным» чтением.

1 Ответ

0 голосов
/ 02 марта 2020

Найден один! Амазон Ион . Из часто задаваемых вопросов :

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

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

Краткие примечания по Ion:

  • Кажется, что он относительно хорошо спроектирован.
  • Все значения имеют кодировку TLV, что делает его доступным (да!)
  • Значения длины не ограничены 32 битами (да!)
  • Он имеет несколько более богатую объектную модель чем JSON, например, он поддерживает временные метки, двоичные данные, аннотации типов и S-выражения (не уверен почему).
  • Он поддерживает таблицу символов, чтобы имена полей могли быть интернированы! Это означает, что он, вероятно, значительно более компактен, чем все другие двоичные форматы JSON.

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

...