4 ключевых шаблона для загрузки данных в хранилище данных
Введение
Загрузка данных в хранилище данных является ключевым компонентом большинства конвейеров данных. Если вам интересно
- Как обрабатывать SQL-загрузки?
- Какие шаблоны используются для загрузки данных в хранилище данных?
тогда эта статья для вас. В этой статье мы рассмотрим 4 ключевых шаблона для загрузки данных в хранилище данных. Конвейеры данных обычно используют один или несколько шаблонов, показанных ниже. Распознавание этих шаблонов может помочь вам разработать лучшие и понять существующие конвейеры данных.
Шаблоны
1. Конвейеры пакетных данных
Это конвейеры данных, которые запускаются с запланированным интервалом не менее 5 минут.
1.1 Процесс => Хранилище данных
Обычно сюда входит один процесс, который извлекает данные из некоторого источника и загружает их в хранилище. Количество сетевых обращений к хранилищу данных должно быть низким за счет группирования нескольких (или всех, если позволяет память процесса) вставок в один вызов вставки-базы данных (т. е. микро-/мини-пакетирование).
Например, если вы используете Python и Postgres (в качестве хранилища данных), вы можете использовать execute_values для вставки нескольких строк одним сетевым вызовом.
Плюсы:
- Простота настройки, запуска, мониторинга и отладки.
- Большие машины могут обрабатывать значительный объем данных.
Минусы:
- Не масштабируется за пределы одной машины. Это станет проблемой, если размер ваших данных очень велик.
- Вставки в хранилище данных будут узким местом. Этого можно избежать, запустив несколько процессов параллельно. Однако это может привести к неправильному порядку вставок, если не соблюдать осторожность.
1.2 Процесс => Облачное хранилище => Хранилище данных
Обычно это включает распределенный процесс (иногда одиночный процесс), который параллельно записывает данные в облачную систему хранения. Затем следует процесс параллельного копирования данных из облачной системы хранения в хранилище данных.
Некоторые хранилища данных поддерживают внешние таблицы, которые позволяют считывать данные непосредственно из S3. Это избавит от необходимости выполнять команду COPY .
Плюсы:
- Может загружать очень большие объемы данных.
- Запись в облачную систему хранения и вставка ее в хранилище данных распараллелены, что делает этот подход быстродейственным.
Минусы:
- Управление кластером распределенных систем может быть дорогостоящим.
- Для внешних таблиц для создания новых разделов может потребоваться выполнение команды ALTER TABLE ADD PARTITION.
2. Конвейеры данных почти в реальном времени
Это постоянно работающие конвейеры данных. Обычно время между созданием данных и моментом, когда они стают доступны в хранилище данных составляет менее минуты. Например: Конвейер данных для приема кликов и показов с веб-сайта в хранилище данных.
2.1 Поток данных => Потребитель => Хранилище данных
Обычно сюда входит поток данных (от другого процесса) и есть получатель этого потока данных. Процесс-получатель потребляет записи, выполняет обогащение данных (необязательно), собирает пакет записей в памяти и вставляет его в хранилище данных.
Примечание. Некоторые проекты, такие как ksqldb и clickhouse, позволяют напрямую запрашивать данные в теме Kafka. Однако они не заменяют хранилище данных.
Плюсы:
- Широкий выбор готовых коннекторов.
- В большинстве хранилищ данных установлены коннекторы (например, коннектор Snowflake Kafka).
- Получателя можно легко распараллелить с группами потребителей.
Минусы:
- Обратите особое внимание на семантику вставки хотя бы раз, как того требует ваша система.
- Когда несколько потребителей вставляют данные в хранилище данных, не гарантируется, что порядок вставки будет таким же, как когда они входят в поток данных. Вам нужно будет работать с этим осторожно, если это необходимо. Ссылка: Порядок сообщений в Kafka.
2.2 Облачное хранилище => процесс => хранилище данных
Как правило сюда входят данные (обычно небольшой пакет строк), попадающие в облачную систему хранения (от другого процесса) и систему мониторинга, которая обнаруживает их и запускает процесс для вставки этих данных в хранилище данных.
Например, вы можете настроить триггер s3 для запуска лямбда-процесса для вставки данных в хранилище данных, когда данные попадают в S3.
Плюсы:
- У большинства поставщиков облачных услуг есть поддержка для мониторинга своей системы облачного хранения и запуска процесса (обычно называется бессерверным).
- Некоторые хранилища данных также поддерживают этот шаблон (например, Snowpipe).
- Необработанные данные, хранящиеся в облачной системе хранения, обеспечивают дополнительную избыточность данных.
Минусы:
- Обратите особое внимание на ограничения на количество процессов, которые могут быть запущены при сильном трафике.
- Когда несколько процессов вставляют данные в хранилище данных, не гарантируется, что порядок вставки будет таким же, как и в облачной системе хранения. Вам нужно будет обращаться с этим осторожно, если это необходимо.
Вывод
Надеюсь, эта статья даст вам хорошее представление об общих шаблонах, которые используются для загрузки данных в хранилище данных. В большинстве случаев используется один или комбинация вышеперечисленных шаблонов.
В следующий раз, когда вы будете создавать конвейер для загрузки данных в хранилище данных, попробуйте один из этих шаблонов загрузки. Вы будете удивлены тем, как большинство инструментов, облачных провайдеров и сред оркестровки поддерживают и продвигают эти шаблоны.
Если вы использовали другой шаблон или у вас есть какие-либо вопросы или комментарии, пожалуйста, оставьте их в разделе комментариев ниже.