Почему Data Vault не стоит строить на HDFS?

Ответ

Data Vault 2.0 — это методология моделирования данных, ориентированная на гибкость, аудируемость и параллельную загрузку. Строить её напрямую на голом HDFS (Hadoop Distributed File System) неэффективно из-за фундаментального несоответствия парадигм.

Основные причины из моего опыта проектирования DWH:

  1. Отсутствие управления транзакциями (ACID): HDFS изначально — это файловая система для больших данных, не поддерживающая UPDATE и DELETE на уровне записей. Data Vault же предполагает частые вставки (INSERT-ONLY) с сохранением истории, но также требует возможности помечать записи как неактивные, что сложно без поддержки транзакций.
  2. Проблемы с производительностью JOIN: Ключевые элементы Data Vault — Хабы (Hubs), Ссылки (Links) и Сателлиты (Satellites) — связаны между собой. Выполнение сложных JOIN между этими таблицами, хранящимися как простые файлы (например, Parquet) в HDFS, крайне ресурсоемко без специализированного движка запросов.
  3. Нет встроенной поддержки SQL: Нативная работа с HDFS требует использования MapReduce, Spark или Hive. Data Vault-запросы, особенно бизнес-видов (Business Vault), сложны и удобнее пишутся на SQL.

Практическая альтернатива: Мы строили Data Vault поверх Hive или, что лучше, Apache Spark SQL. Эти слои абстракции предоставляют SQL-интерфейс и более эффективное выполнение JOIN. В современных облачных стеках Data Vault эффективно реализуется в Snowflake или BigQuery, где есть встроенная поддержка временных таблиц и эффективное хранение исторических данных.

Кратко: HDFS — это хранилище, а не база данных. Data Vault требует СУБД или SQL-движка поверх него для практического использования.

Ответ 18+ 🔞

А, слушай, тут один умник пытался на голом HDFS Data Vault 2.0 построить. Ну я, бля, чуть со стула не упал, ебать мои старые костыли! Это ж как пытаться суп вилкой хлебать — вроде инструмент в руках, а нихуя не выходит.

Объясняю на пальцах, почему это пиздопроебибна идея. Data Vault — он же про гибкость, про то, чтобы каждый чих в данных был зааудирован, и чтобы всё грузилось параллельно, без задержек. А HDFS — это просто файловая система, огромная, распределённая, да, но тупо для файлов. Это как взять складской ангар и пытаться в нём жить — места овердохуища, а туалета нет и спать не на чем.

Вот на что конкретно натыкаешься, если не веришь, чувак:

  1. ACID? Да хуй там! В HDFS из коробки нет нормальных UPDATE и DELETE. Data Vault хоть и INSERT-ONLY, но иногда надо запись пометить как мёртвую, устаревшую. Без управления транзакциями это такой геморрой, что проще на хуй послать всю затею. Представь, пытаешься в одном огромном файле одну строчку исправить — проще новый файл написать, блядь.
  2. JOIN-ы сожрут всё. Основа Data Vault — это Хабы, Ссылки и Сателлиты, и они все между собой связаны. Делать JOIN между такими таблицами, которые на самом деле просто кучи файлов Parquet раскиданы по кластеру... Это просто убийство производительности. Движок запросов будет сходить с ума, хуй с горы, пытаясь это всё свести.
  3. SQL? Какого хуя? Нативно на HDFS ты будешь писать код на Spark или ещё какой дичи. А запросы для Business Vault — они же сложные, их на SQL писать в сто раз естественнее и быстрее. Без SQL-интерфейса ты просто утонёшь в этом всём, как дерьмо в проруби.

Так что же делать, если очень хочется? Не выёбывайся. Мы, например, строили это всё поверх Hive или Apache Spark SQL. Они как раз эту прослойку дают — SQL сверху, а вся грязная работа с файлами снизу. А сейчас вообще красота — Snowflake или BigQuery. Там уже всё для такого приспособлено: и временные таблицы, и историчность, и масштабирование на лету. Иди в эту сторону, не мудри.

Короче, запомни раз и навсегда: HDFS — это склад, хранилище. А Data Vault — это архитектура для базы данных. Не пытайся хранилище превратить в базу, получится манда с ушами. Бери нормальный SQL-движок поверх него и живи спокойно.