Ответ 1
Если двоичное кодирование сжимает данные?
Да и нет, это зависит от ваших данных.
В соответствии с двоичная кодировка avro, да, поскольку она хранит схему только один раз для каждого файла .avro
, независимо от того, сколько данных в этом файле, следовательно, сохраняйте некоторое пространство без хранения имени ключа JSON много раз. И сериализация avro делает небольшое сжатие с сохранением int и длительным использованием переменной длины zig-zag (только для малых). В остальном avro не "сжимает" данные.
Нет, поскольку в некоторых экстремальных случаях данные, передаваемые по авросе, могут быть больше, чем исходные данные. Например. один .avro
файл с одним Record
, в котором только одно поле строки. Накладные расходы схемы могут победить сохранение, не нужно хранить имя ключа.
Если нет, как я могу применить сжатие?
Согласно avro codecs, avro имеет встроенный кодек сжатия и дополнительные. Просто добавьте одну строку при создании файлов контейнера объектов:
DataFileWriter.setCodec(CodecFactory.deflateCodec(6)); // using deflate
или
DataFileWriter.setCodec(CodecFactory.snappyCodec()); // using snappy codec
Чтобы использовать snappy
, вам нужно включить библиотеку snappy-java
в свои зависимости.