我正在做一个个人项目,其中包括创建数据仓库 (DWH) 的完整架构。在本例中,作为 ETL 和 BI 分析工具,我决定使用 Pentaho;它具有许多功能,从允许轻松创建仪表板到完整的数据挖掘流程和 OLAP 多维数据集。
我读过数据仓库必须是关系数据库,并且理解这一点。我不明白的是如何实现近乎实时或完全实时的 DWH。我读过有关推和拉策略的内容,但我的结论如下:
- DBMS 的选择对于创建实时 DWH 并不重要。我的意思是,使用 MySQL、SQL Server、Oracle 或任何其他语言都可以实现这一点。由于我将其作为个人项目进行,因此我选择 MySQL。
- 关键因素是作业调度的频率,这就是调度器的任务。这个假设正确吗?我的意思是,创建实时 DWH 的关键是为每个 ETL 流程每秒建立作业?
如果我错了,你能给我一些帮助来理解这一点吗?那么,如何创建实时DWH呢?是否有任何开源调度程序允许这样做?还有任何非开源调度程序允许这样做吗?
我很困惑,因为有些参考文献说这是不可能的,而另一些参考文献说这是可能的。
定义
非常有趣的问题。首先,应该定义实时应该如何“实时”。实时对于传入数据确实具有非常低的延迟,但需要发送系统中具有良好的架构,可能是事件总线或消息队列以及接收端良好的基础设施。这通常涉及某种听众和pushing来自交付系统。
近实时将是下一个“较低”级别。如果我们说近实时最多延迟大约 5 分钟,那么您的方法也可以工作。例如在这里你可以pull每隔一分钟左右的数据。但请记住,您需要某种高性能检查新数据是否可用以及要获取哪些数据。如果此检查和拉取的时间超过一分钟,那么跟上数据就会变得更加困难。确实取决于音量。
Realtime
正如我之前所说,实时分析最多需要一个消息队列或一个服务总线,您的某些作业可以连接到并“侦听”新数据。如果一个新的数据包被推入管道,它的大小可能会非常小,并且可以非常快地处理。
如果没有听众的基础设施,您就需要接近实时。
近实时
这是你必须进一步发展的部分。您必须确保获得相对较小的数据包,通常是某种增量。如果您有权访问数据库,则可以使用触发器来完成此操作。否则你必须每隔一段时间拉一次,而你的“一次”可能会非常频繁。
这可以在 Linux 上通过简单的组合来完成,或者在 Windows 上通过活动规划来完成。请记住,您的加载和处理时间不应超过下一个作业开始之前的时间窗口。
Database
最后,当您定义了想要实现的目标并大致了解如何实现增量加载或侦听器时,您是对的 - 您可以采用关系数据库。如果您对性能感兴趣并且将此部分建模为星型模式,您还可以研究基于列的引擎或基于列的数据库,例如 Apache Cassandra。
调度
对于作业调度,您还可以从 Linux 或 Windows 标准规划工具开始。如果你用 Java 编码,你可以稍后使用诸如quartz之类的东西。但这仅适用于近实时的情况。正如我上面所解释的,实时需要不同的架构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)