Какие форматы хранения данных вы знаете (CSV, JSON, Parquet и др.)?

Форматы хранения данных представляют собой стандартизированные способы представления структурированной или полуструктурированной информации для передачи, хранения, анализа и обработки. Выбор конкретного формата зависит от задачи — логирования, аналитики, обмена данными между системами, хранения больших объёмов, или сериализации. Ниже приведён подробный обзор наиболее распространённых форматов.

1. CSV (Comma-Separated Values)

Тип: Текстовый, табличный
Описание: Простейший и широко используемый формат представления табличных данных. Каждая строка представляет одну запись, а значения разделяются запятыми или другим разделителем (;, \t, |).

Преимущества:

  • Прост в чтении человеком

  • Поддерживается всеми СУБД, Excel, pandas и т.д.

  • Легко генерируется и парсится

Недостатки:

  • Не поддерживает вложенные структуры

  • Нет встроенной информации о типах данных

  • Плохо масштабируется для больших объёмов данных

2. JSON (JavaScript Object Notation)

Тип: Текстовый, иерархический
Описание: Формат обмена данными с поддержкой вложенных структур: списков, объектов, массивов и т.д. Популярен в API и веб-разработке.

Преимущества:

  • Гибкая структура (вложенные объекты, массивы)

  • Читаем человеком

  • Хорошо поддерживается в языках программирования

Недостатки:

  • Занимает больше места, чем бинарные форматы

  • Неэффективен при работе с большими табличными данными

  • Нет встроенной схемы типов

3. Parquet

Тип: Бинарный, колоночный
Описание: Формат, оптимизированный для аналитических нагрузок. Разработан Apache и используется в Hadoop, Spark, AWS Athena и др.

Преимущества:

  • Колоночная структура — эффективен при выборке только нужных колонок

  • Поддерживает сжатие и схемы типов

  • Идеален для Big Data и Data Lake

Недостатки:

  • Нечитаем вручную

  • Не всегда удобен для стриминговой обработки

4. Avro

Тип: Бинарный, сериализуемый
Описание: Формат сериализации от Apache для хранения и передачи данных с включённой схемой (schema-on-write). Активно используется в Kafka.

Преимущества:

  • Встроенная схема — поддержка эволюции данных

  • Компактный размер

  • Идеален для межсервисного взаимодействия

Недостатки:

  • Требует схемы (Avro Schema)

  • Нечитаем без специальных библиотек

5. ORC (Optimized Row Columnar)

Тип: Бинарный, колоночный
Описание: Формат хранения данных, разработанный для Hadoop/Hive. Оптимизирован для хранения большого объёма табличных данных.

Преимущества:

  • Более эффективный, чем Parquet в Hive/Tez

  • Поддерживает сжатие, индексацию, агрегаты

  • Хорошо сжимается

Недостатки:

  • Чаще используется только в экосистеме Hadoop

  • Меньше поддержки за пределами Hive/Spark

6. XML (eXtensible Markup Language)

Тип: Текстовый, иерархический
Описание: Старый, но мощный формат, ранее активно использовавшийся для конфигураций, SOAP-сервисов, структурированных данных.

Преимущества:

  • Поддерживает вложенные структуры

  • Строгая структура с валидацией через XSD

  • Расширяемость

Недостатки:

  • Шумный и громоздкий синтаксис

  • Большой объём

  • Замедляет парсинг

7. Feather

Тип: Бинарный
Описание: Формат хранения данных, оптимизированный для быстрого обмена между pandas и R. Основан на Apache Arrow.

Преимущества:

  • Очень быстрый I/O

  • Идеален для машинного обучения и анализа

  • Сжатие и сериализация через Arrow

Недостатки:

  • Не предназначен для долговременного хранения

  • Не очень читаем вручную

8. Apache Arrow

Тип: Бинарный, колоночный
Описание: Формат данных в памяти, предназначенный для высокопроизводительной аналитики. Используется для обмена между процессами и языками (C++, Java, Python).

Преимущества:

  • Zero-copy сериализация

  • Быстрая передача между языками

  • Основной формат в Arrow, Feather, и др.

Недостатки:

  • Требует поддержки в коде

  • Не для хранения на диске напрямую (скорее in-memory)

9. Protocol Buffers (Protobuf)

Тип: Бинарный, сериализуемый
Описание: Формат сериализации от Google, широко используемый в микросервисной архитектуре и RPC.

Преимущества:

  • Очень компактный и быстрый

  • Поддержка схем и версионирования

  • Идеален для RPC, gRPC, микросервисов

Недостатки:

  • Не читается вручную

  • Требуется генерация кода из .proto схем

10. YAML (YAML Ain’t Markup Language)

Тип: Текстовый, иерархический
Описание: Формат, похожий на JSON, но более читаемый человеком. Часто используется для конфигурационных файлов (docker-compose.yaml, GitHub Actions и др.).

Преимущества:

  • Читаем и редактируем вручную

  • Поддерживает вложенные структуры

Недостатки:

  • Чувствителен к отступам

  • Медленнее JSON при парсинге

11. MessagePack

Тип: Бинарный, сериализуемый
Описание: Компактный бинарный формат, аналог JSON, но эффективнее по объёму и скорости.

Преимущества:

  • Легковесный и быстрый

  • Поддерживает вложенные структуры

Недостатки:

  • Не читается вручную

  • Меньше поддержки, чем у JSON или Protobuf

12. Delta Lake Format

Тип: Бинарный, колоночный, транзакционный
Описание: Поверх Apache Parquet, но с возможностью ACID-транзакций. Применяется в Spark, Databricks, Lakehouse-архитектурах.

Преимущества:

  • ACID-гарантии

  • Поддержка изменений (upsert, delete)

  • Совместим с Parquet

Недостатки:

  • Требует Delta Engine

  • Ограниченная совместимость вне Spark-экосистемы

13. HDF5 (Hierarchical Data Format)

Тип: Бинарный, иерархический
Описание: Используется для хранения больших числовых массивов, изображений, научных данных. Поддерживает структуру групп и наборов данных.

Преимущества:

  • Идеален для научных расчётов

  • Высокая производительность

  • Многоярусная структура хранения

Недостатки:

  • Требует специфических библиотек

  • Не универсален для бизнес-данных

Примеры выбора формата по задаче

Задача Рекомендуемый формат
Web API, обмен между JS и сервером JSON
--- ---
Big Data аналитика в Spark Parquet, ORC, Delta
--- ---
Машинное обучение (pandas, R) Feather, Arrow, HDF5
--- ---
Хранение логов, CSV-экспорт CSV
--- ---
Конфигурационные файлы YAML, JSON
--- ---
Микросервисы и сериализация Protobuf, Avro, MessagePack
--- ---
Хранилище IoT-данных Parquet, ORC
--- ---
Data Lake и транзакции Delta Lake, Iceberg
--- ---

Формат хранения данных оказывает прямое влияние на скорость обработки, объём хранимой информации, совместимость и масштабируемость. В современных проектах часто применяются комбинации форматов — например, CSV для экспорта, Parquet для хранения, JSON для API и Protobuf для межсервисной сериализации.