В блоге Uber Engineering полезная заметка об оптимизации формата Parquet [1] с точки зрения сжатия, хранения и скорости работы. Автор рассказывает как они используют Parquet в экосистеме Hadoop'а у себя внутри для обработки и хранения данных измеряемых петабайтами и том что хранение в таких объёмах обходится дорого и после многих экспериментов они остановились на формате Parquet со сжатием через ZSTD и что это значительно эффективнее чем Snappy/Gzip по балансу скорости обращения к данным и уровню сжатия.
Но что интереснее автор приводит ещё и трюк с сортировкой данных который позволяет значительно улучшить сжатие предварительно проведя сортировку данных в колонках. Причём очень многое зависит от порядка сортировки полей, в их случае при порядке начинающегося с поля uuid достигается наилучший результат. В основе этого эксперимента статья Reordering Rows for Better Compression: Beyond the Lexicographic Order [2].
Случай Uber'а с хранением таких объёмов, конечно, довольно редкий, такое есть только в крупнейших стартапах/корпорациях. Есть много задач сильно меньше, до терабайтов, где также надо работать с разными форматами данных и Parquet выглядит всё более привлекательным для хранение и распространения данных для аналитической работы.
Ссылки:
[1] https://eng.uber.com/cost-efficiency-big-data/
[2] https://arxiv.org/pdf/1207.2189.pdf
#parquet #data #reading #dataengineering