创建实时数据仓库
Creating real time datawarehouse
我正在做一个个人项目,其中包括创建数据仓库 (DWH) 的完整架构。在这种情况下,作为 ETL 和 BI 分析工具,我决定使用 Pentaho;它有很多功能,从允许轻松创建仪表板到完整的数据挖掘过程和 OLAP 多维数据集。
我看过数据仓库一定是关系型数据库,明白这一点。我不明白的是如何实现近乎实时或完全实时的 DWH。我已经阅读了推拉策略,但我的结论如下:
- DBMS 的选择对于创建实时 DWH 并不重要。我的意思是 MySQL、SQL Server、Oracle 或任何其他服务器都可以做到这一点。由于我将其作为个人项目进行,因此我选择 MySQL.
- 关键是作业调度的频率,这就是调度器的任务。这个假设是否正确?我的意思是,创建实时 DWH 的关键是每秒为每个 ETL 过程建立作业?
如果我错了,你能帮我理解一下吗?那么,创建实时 DWH 的方法是什么?是否有任何开源调度程序允许这样做?还有任何允许这样做的非开源调度程序吗?
我很困惑,因为一些参考资料说这是不可能的,其他人说这是可能的。
定义
非常有趣的问题。首先,应该定义 "real-time" 实时应该如何。实时对于传入数据的延迟确实非常低,但在发送系统中需要良好的架构,可能是事件总线或消息队列以及接收端的良好基础设施。这通常涉及某种类型的侦听器和来自传送系统的推送。
近实时将是下一个 "lower" 级别。如果我们说近实时最多延迟 5 分钟,那么您的方法也可以工作。因此,例如在这里,您可以每分钟左右 拉取 数据。但请记住,您需要某种高性能检查新数据是否可用以及要获取哪些数据。如果这个检查和拉取花费的时间超过一分钟,那么跟上数据就会变得更加困难。真的取决于音量。
实时
正如我之前所说,实时分析最多需要一个消息队列或一个服务总线,您的某些作业可以连接到该队列或 "listen" 以获取新数据。如果一个新的数据包被推入管道,它的大小可能会非常小,并且可以非常快地处理。
如果没有用于侦听器的基础设施,您需要接近实时。
近实时
这是您需要进一步开发的部分。您必须确保获得非常小的数据包,这些数据包通常是某种增量。如果您有权访问数据库,这可以通过触发器来完成。否则你必须每隔一段时间拉一次,而你的 "once" 可能会非常频繁。
这可以在 Linux 上完成,例如通过简单的联合工作或在 Windows 上进行活动策划。请记住,您的加载和处理时间不应超过 window 下一个作业开始前的时间。
数据库
最后,当您定义了要实现的目标并大致了解如何实现增量加载或侦听器时,您是对的 - 您可以采用关系数据库。如果您对性能感兴趣并将这部分建模为星型模式,您还可以查看基于列的引擎或基于列的数据库,如 Apache Cassandra。
计划
对于工作安排,您也可以从 Linux 或 Windows 标准计划工具开始。如果你在 Java 中编码,你以后可以使用石英之类的东西。但这只是近实时的情况。如上所述,实时需要不同的架构。
我正在做一个个人项目,其中包括创建数据仓库 (DWH) 的完整架构。在这种情况下,作为 ETL 和 BI 分析工具,我决定使用 Pentaho;它有很多功能,从允许轻松创建仪表板到完整的数据挖掘过程和 OLAP 多维数据集。
我看过数据仓库一定是关系型数据库,明白这一点。我不明白的是如何实现近乎实时或完全实时的 DWH。我已经阅读了推拉策略,但我的结论如下:
- DBMS 的选择对于创建实时 DWH 并不重要。我的意思是 MySQL、SQL Server、Oracle 或任何其他服务器都可以做到这一点。由于我将其作为个人项目进行,因此我选择 MySQL.
- 关键是作业调度的频率,这就是调度器的任务。这个假设是否正确?我的意思是,创建实时 DWH 的关键是每秒为每个 ETL 过程建立作业?
如果我错了,你能帮我理解一下吗?那么,创建实时 DWH 的方法是什么?是否有任何开源调度程序允许这样做?还有任何允许这样做的非开源调度程序吗?
我很困惑,因为一些参考资料说这是不可能的,其他人说这是可能的。
定义
非常有趣的问题。首先,应该定义 "real-time" 实时应该如何。实时对于传入数据的延迟确实非常低,但在发送系统中需要良好的架构,可能是事件总线或消息队列以及接收端的良好基础设施。这通常涉及某种类型的侦听器和来自传送系统的推送。
近实时将是下一个 "lower" 级别。如果我们说近实时最多延迟 5 分钟,那么您的方法也可以工作。因此,例如在这里,您可以每分钟左右 拉取 数据。但请记住,您需要某种高性能检查新数据是否可用以及要获取哪些数据。如果这个检查和拉取花费的时间超过一分钟,那么跟上数据就会变得更加困难。真的取决于音量。
实时
正如我之前所说,实时分析最多需要一个消息队列或一个服务总线,您的某些作业可以连接到该队列或 "listen" 以获取新数据。如果一个新的数据包被推入管道,它的大小可能会非常小,并且可以非常快地处理。
如果没有用于侦听器的基础设施,您需要接近实时。
近实时
这是您需要进一步开发的部分。您必须确保获得非常小的数据包,这些数据包通常是某种增量。如果您有权访问数据库,这可以通过触发器来完成。否则你必须每隔一段时间拉一次,而你的 "once" 可能会非常频繁。
这可以在 Linux 上完成,例如通过简单的联合工作或在 Windows 上进行活动策划。请记住,您的加载和处理时间不应超过 window 下一个作业开始前的时间。
数据库
最后,当您定义了要实现的目标并大致了解如何实现增量加载或侦听器时,您是对的 - 您可以采用关系数据库。如果您对性能感兴趣并将这部分建模为星型模式,您还可以查看基于列的引擎或基于列的数据库,如 Apache Cassandra。
计划
对于工作安排,您也可以从 Linux 或 Windows 标准计划工具开始。如果你在 Java 中编码,你以后可以使用石英之类的东西。但这只是近实时的情况。如上所述,实时需要不同的架构。