我有一个关于数据仓库中ETL(尤其是提取ETL(的问题。
从本文来看,临时区域主要是出于时间原因,有些甚至不需要临时区域。
假设我有3个微服务服务器,每个服务器都有自己的数据库、2个操作服务器和1个数据仓库服务器。
- 服务器1:计划每天提取数据
- 服务器2:数据仓库需要实时可用的数据
谁将启动提取数据?我的想法是
- 服务器1:数据提取由数据仓库服务器启动,直接从服务器1的数据库中提取,每天安排
- 服务器2:时间无法安排,因此数据仓库服务器提供API供服务器2使用,服务器2在每次数据可用时启动数据提取或通过提供的API将数据发送到数据仓库服务器
但我不确定,我是否应该向所有操作服务器提供API,让它们决定何时将数据发送到仓库?还是直接从操作数据库中提取数据都是数据仓库服务器的工作?如果是,如何提取实时数据?
您提出的方法(每天ping服务器1,但几乎实时地从服务器2接收数据(是我过去看到的。不过,你可能需要考虑的几件事是:
- 有时服务器2无法配置为自动ping API,这通常是因为其数据库不支持触发器。如果是这种情况,那么您可能需要从DW定期ping服务器2,比如每五分钟一次
- 通常,您会每晚查询服务器1。也就是说,我可以看到服务器1告诉您什么时候可以读取它可能会更好。在第二种情况下,您的DW不必担心与服务器1的时间表同步;如果服务器1有处理延迟或其批处理窗口运行很长,那么当数据准备就绪时,DW仍将拾取其数据