database - 数据仓库:谁发起从多个源提取数据到暂存区,是源还是数据仓库?
问题描述
我对数据仓库中的 ETL(尤其是提取的)有疑问。
从这篇文章来看,暂存区主要是出于时间原因,有些甚至不需要暂存区。
假设我有 3 台微服务服务器,每台都有自己的数据库、2 台操作服务器和 1 台数据仓库服务器。
- 服务器 1:计划每天提取数据
- 服务器 2:数据需要在数据仓库中实时可用
谁将启动提取数据?我的想法是
- Server 1:数据提取由数据仓库服务器发起,直接从Server 1的数据库中提取,每天定时
- Server 2:时间无法调度,所以数据仓库服务器提供API供Server 2使用,Server 2在每次有数据时通过提供的API发起数据提取或者向数据仓库服务器发送数据。
但我不确定,我是否应该为所有运营服务器提供 API 并让他们决定何时将数据发送到仓库?还是直接从操作数据库中提取数据的所有数据仓库服务器工作?如果是这样,如何提取实时的?
解决方案
您提出的方法(您每天 ping 服务器 1,但几乎实时从服务器 2 接收数据)是我过去看到的。不过,您可能需要考虑以下几点:
- 有时服务器 2 无法配置为自动 ping API,因为它的数据库不支持触发器。如果是这种情况,那么您可能需要定期从 DW ping 服务器 2,例如每五分钟一次。
- 通常,您会每晚查询服务器 1。也就是说,我可以看到服务器 1 只告诉您何时可以读取它实际上可能会更好。在第二种情况下,您的 DW 不必担心与服务器 1 的时间表同步;如果服务器 1 有处理延迟或者它的批处理窗口运行时间很长,当数据准备好时,你的 DW 仍然会获取它的数据。
推荐阅读
- c# - 在客户端机器上部署 Winforms 应用程序
- javascript - 当您单击身体或在手机上移动手指时停止滚动
- php - 当 php/laravel 中的数据量很大时,如何在进度条上赋值?
- java - 用逗号格式化 BigDecimal 数字,最多保留 2 位小数
- google-translator-toolkit - 通过企业网络中的防火墙解锁以访问 Google Translate API(高级版)需要哪些 url?
- python - 您如何允许用户通过终端在 Python 脚本中上传 2 个 excel 文件,而不是下载一个新文件?
- python - 我想优化代码,不知道应该做哪个构造函数
- c# - 通过 EWS 获取和更改安全发件人列表和阻止发件人列表
- mysql - 如何修复致命错误:无法打开和锁定特权表:表 '.\mysql\proxies_priv' 被标记为已崩溃并且最后(自动?)修复失败
- c++ - C++ 代码在调试控制台中运行,而不是在 vs-code 的终端中运行