Перейти к содержимому
TelegramGitHub

Fundamentals of Data Engineering: приложения A и B

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

Три группы форматов сериализации и когда их выбирать

Иногда переход с CSV на Parquet ускоряет задачу в десятки раз. Данные в pipeline часто приходится reserialize, то есть переводить из одного формата в другой.

ФорматСуть
CSVНестандартный “стандарт”. Ошибки и низкая скорость. Нужен для обмена. При архивировании сохраняйте описание настроек
XMLУстаревший, медленный. Нужен для работы со старыми системами
JSONСтандарт обмена через API. Поддерживается Snowflake, BigQuery, SQL Server
JSONLJSON-объекты по одному на строку. Удобен для данных сразу после приёма
AvroБинарный формат, схема в JSON. Популярен в Hadoop
  • Колонки хранятся отдельно. Читаются только нужные поля, а похожие значения хорошо сжимаются.
  • Parquet. Хранит схему, поддерживает nested данные, переносим. Хорош для data lake. Часто с Snappy.
  • ORC. Похож на Parquet. Популярен с Hive, поддерживается реже.
  • Arrow. Один формат для памяти, сети и хранения. Не нужна десериализация. Есть библиотеки для многих языков. Используется в Spark и Dremio.
  • Hudi. Колонки плюс строки для обновлений. Хорош для CDC в таблицы. Периодически файлы пересобираются.
  • Iceberg. Отслеживает файлы таблицы и снимки. Даёт time travel и schema evolution.
  • Storage engine управляет тем, как данные лежат на диске. Он отделён от query engine.
  • Современные движки лучше подходят для SSD и сложных типов.
  • Для аналитики растёт поддержка columnar в SQL Server, PostgreSQL и MySQL.
  • Сжатие убирает повторы. На тексте возможен коэффициент около 10:1.
  • Для аналитики нужно lossless (без потерь). Lossy нужен для аудио, картинок и видео.
  • gzip и bzip2 хорошо сжимают текст (JSON, CSV, XML).
  • Snappy, Zstandard, LZ4, LZFSE быстрее и легче для CPU. Их используют в data lake и колоночных БД.

Облачная сеть: от внутри zone до интернета, как растут цена и задержка

ТемаСуть
TopologyAWS, Azure и GCP похожи: availability zones и regions. У GCP есть ещё multiregion
EgressВходящий трафик бесплатен. Исходящий в интернет платный. Иногда плата есть и между zones и regions. Это способ удержать клиента
Availability zoneМинимальная единица. Лучшая скорость внутри zone. Трафик на private IP внутри zone бесплатен
RegionНесколько zones. Помогает приблизить ресурсы к пользователям. Между regions медленнее и дороже
Object storageОбычно региональный ресурс
Correlated failureСбои из-за конфигурации часто затрагивают весь region
GCP multiregionUS, EU, ASIA. Георезервирование без ручной репликации. Premium tier идёт по сети Google
Direct connectВыше скорость и ниже egress. Например, у AWS цена за GB может упасть с 9 до 2 центов
CDNХорош для повторной отдачи одних и тех же данных. Работает не везде
  • Нагрузки с большим трафиком держите в одной zone.
  • Авторы ожидают, что плата за egress со временем снизится. Пример: расчёт для Zoom показал разницу между AWS и Oracle.
Термин (EN)Что значит
SerializationКодирование данных для передачи и хранения
ColumnarХранение по колонкам
ParquetКолоночный формат со схемой для data lake
ArrowФормат для обработки в памяти и обмена
Iceberg / HudiУправление таблицами в data lake
LosslessСжатие без потери данных
Availability zoneМинимальная видимая единица облачной топологии
RegionГруппа зон
EgressИсходящий трафик, часто платный
CDNСеть доставки контента
  • Для pipeline по возможности выбирайте Parquet вместо CSV.
  • Для сырых данных после API подходит JSONL.
  • Для CSV записывайте кодировку, разделители и схему.
  • Для аналитики берите быстрое сжатие (Snappy, Zstandard).
  • Считайте egress при проектировании multi-region и multi-cloud.
  • Держите кластеры и хранилище в одном регионе и zone, если нет причин иначе.
  1. Почему Parquet обычно быстрее CSV для аналитики?
  2. Что дают Iceberg и Hudi, чего нет у простых файлов?
  3. Почему трафик между regions может быть дорогим?
  4. Когда стоит рассмотреть direct connection?

Предыдущая: Будущее профессии.