Системная архитектура - ETL - PullRequest
0 голосов
/ 13 марта 2020

Мы находимся в процессе разработки ETL-процесса, где мы будем получать ежедневный файл учетной записи (может быть, полмиллиона записей может вырасти) от клиента, и мы будем загружать этот файл в нашу базу данных.

Наш текущий процесс разбивает файл на более мелкие файлы и загружает его для подготовки ... когда-нибудь или в случае сбоя процесса мы пытаемся выяснить, сколько записей мы обработали, а затем снова начать с этого момента. Есть ли другая лучшая альтернатива этой проблеме?

Мы думаем об использовании Кафки. Я довольно новичок в Кафке. Я был бы очень признателен за отзыв, если kafka - это путь к go или мы просто перебиваем простой процесс ETL, когда мы просто загружаем данные в промежуточную таблицу и, наконец, в таблицу назначения.

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Не думайте, что импортировать данные так же просто, как сбросить их в базу данных и заставить компьютер выполнять всю обработку. Как вы обнаружили, у автоматической загрузки могут быть проблемы.

Во-первых, процессы ELT базы данных обесценивают жесткий диск. Не размещайте данные в одной таблице до их вставки в исходную таблицу. Ваш процесс должен импортировать данные только один раз в собственную таблицу для защиты оборудования.

Во-вторых, вам не нужно стороннее программное обеспечение для посредничества в работе. Вам нужно control , чтобы вы не проверяли вручную, что было вставлено. Это означает, что ваш процесс должен сначала очистить / преобразовать данные перед импортом. Вы хотите предотвратить все проблемы перед загрузкой путем очистки, структурирования и даже обработки данных. Загрузка должна быть только сценарием вставки SQL. Я разорвал много скриптов T- SQL, где кто-то посчитал удобным интегрировать обработку с командами базы данных. Не делайте этого.

Вот как я управляю импортом из электронных отчетов. Формулы Excel лучше, чем изучение инструментов ETL, таких как SSIS. Я использую формулы ячеек, чтобы проверить, является ли запись действительной для go в нашей системе. Этот результат представляет собой собственный столбец, а затем, если этот столбец имеет значение true, в столбце конкатенации отображается сценарий вставки.

    =if(J1, concatenate("('", A1, "', ", B1, "),"), "")

Если столбец имеет значение false, в столбце concat ничего не отображается. Это позволяет мне копировать / вставлять вставки в SSMS и проводить массовые вставки с помощью сценариев «вставки в табличные значения».

Если это фактически обновляет существующие записи, как, по-видимому, предлагает ваш комментарий, то вам нужно освоить данные, систематизирующие то, что изменилось в журналах для ваших пользователей.

Шаги синхронизации:

  1. Записывайте, что там есть до обновления

  2. Загрузка и сравнение локальных и удаленных копий на предмет различий; вы не можете сравнивать их без а) наличия обоих в одном физическом месте или б) управления другой системой

  3. Записывайте, что вы обновляете, и отметку времени при обновлении it

  4. Сохраните и закройте журналы

  5. Только после завершения 1-4 вы должны опубликовать обновление для продукции

Мое руководство по синхронизации источников данных и обработке Создает / Обновляет / Удаляет: syn c локальные файлы с файлами сервера

0 голосов
/ 16 марта 2020

Apache Kafka® - это распределенная потоковая платформа. Что именно это означает?

Потоковая платформа обладает тремя ключевыми возможностями:

Publi sh и подписывается на потоки записей, аналогично очереди сообщений или корпоративной системе обмена сообщениями.

Хранение потоков записей в отказоустойчивом долговечном способе.

Обработка потоков записей по мере их возникновения.

Кафка обычно используется для двух широких классов приложений:

Создание потоковых конвейеров данных в реальном времени, которые надежно получают данные между системами или приложениями

Создание потоковых приложений в реальном времени, которые преобразуют потоки данных или реагируют на них

https://kafka.apache.org/intro

Если вы сталкиваетесь с ошибками, из-за которых вы проверяете последнюю зафиксированную запись в своей промежуточной базе данных и вам нужна система для автоматического управления этим материалом, Kafka может помочь вам упростить процесс.
Хотя Kafka предназначен для работы с большими объемами данных и распределения по кластеру, вы, безусловно, можете использовать его для небольших проблем и использовать его Функциональность и управление смещениями, даже с одним брокером (сервером) и небольшим количеством разделов (уровень параллелизма).
Если вы вообще не ожидаете какого-либо масштаба, я бы посоветовал вам рассмотреть RabbitMQ.

RabbitMQ - это программное обеспечение для организации очередей сообщений, также известное как брокер сообщений или администратор очередей. Просто сказал; это программное обеспечение, в котором определены очереди, к которым подключаются приложения для передачи сообщения или сообщений.

https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html

«Как узнать, подходит ли Apache Кафка» Амит Рати
https://link.medium.com/enGzNaNvT4

В случае, если вы выбрали Kafka:
Когда вы получаете файл, создайте процесс, который перебирает все его строки и отправляет их в Kafka (Производитель Kafka).
Создайте другой процесс, который непрерывно получать события от kafka (Kafka Consumer) и записывать их в виде мини-пакетов в базу данных (аналогично вашим маленьким файлам).

Настройка Kafka:
https://dzone.com/articles/kafka-setup
Простой пример для потребителя / производителя Kafka:
http://www.stackframelayout.com/programowanie/kafka-simple-producer-consumer-example/

...