Database 如何构造/实现多维数据/数据立方体

Database 如何构造/实现多维数据/数据立方体,database,aggregate,business-intelligence,cube,olap-cube,Database,Aggregate,Business Intelligence,Cube,Olap Cube,我一直在阅读什么是数据立方体,有很多资料说明它是什么以及为什么(OLAP/商业智能/特定列上的聚合)您会使用它,但从来不会如何使用 大多数资源似乎都是存储,但您似乎不必使用RDBMS 但是,似乎没有任何内容显示您如何构造模式以及如何高效地查询以避免在所有这些数据上聚合的缓慢运行时间。我能找到的最好的是这个“当前不可用”的edx类。您可能已经知道有两种不同的OLAP方法: 需要数据加载步骤来处理可能的聚合(以前定义为“多维数据集”)的MOLAP。内部基于MOLAP的解决方案预先计算可能聚合的度量

我一直在阅读什么是数据立方体,有很多资料说明它是什么以及为什么(OLAP/商业智能/特定列上的聚合)您会使用它,但从来不会如何使用

大多数资源似乎都是存储,但您似乎不必使用RDBMS


但是,似乎没有任何内容显示您如何构造模式以及如何高效地查询以避免在所有这些数据上聚合的缓慢运行时间。我能找到的最好的是这个“当前不可用”的edx类。

您可能已经知道有两种不同的OLAP方法:

  • 需要数据加载步骤来处理可能的聚合(以前定义为“多维数据集”)的MOLAP。内部基于MOLAP的解决方案预先计算可能聚合的度量,因此它能够非常快速地执行OLAP查询。这种方法最重要的缺点来自于MOLAP充当缓存的事实:您需要重新加载输入数据以刷新多维数据集(这可能需要很多时间,比如说,几个小时),如果您决定向多维数据集添加新的维度/度量,则需要完全重新处理。此外,数据集大小+多维数据集配置有一个自然的限制
  • ROLAP不尝试预处理输入数据;相反,它将OLAP查询转换为数据库聚合查询以动态计算值。“R”表示关系,但这种方法甚至可以用于支持聚合查询的NoSQL数据库(比如MongoDb)。由于不存在任何数据缓存,用户总是能够获取实际数据(与MOLAP相比),但DB应该能够相当快地执行聚合查询。对于相对较小的数据集,通常的OLTP数据库可以正常工作(SQL Server、PostgreSql、MySql等),但对于较大的数据集,则使用专门的数据库引擎(如Amazon Redshift);它们支持高效的分布式使用场景,能够在几秒钟内处理许多TB

现在开发MOLAP解决方案有点意义;10年前,服务器受到少量RAM的限制,硬盘上的SQL数据库无法足够快地处理分组查询,而MOLAP是实现真正“在线分析处理”的唯一方法,这种方法是实际的。目前,我们有非常快的NVMe SSD,服务器可能有数百GB的RAM和数十个CPU核心,因此对于相对较小的数据库(高达TB或更多),通常的OLTP数据库可以足够快地作为ROLAP后端工作(在几秒钟内执行查询);在真正的大数据情况下,MOLAP在任何方面都几乎不可用,并且应该以任何方式使用专门的分布式数据库。

一般的智慧是,当多维数据集基于“维度模型”即通常(但不总是)在RDBMS中实现的星型模式时,它们工作得最好。这是有意义的,因为这些模型被设计成能够快速查询和聚合

大多数多维数据集在用户与它们交互之前自己进行聚合,因此从用户的角度来看,多维数据集本身的聚合/查询时间比源表的结构更有趣。然而,一些多维数据集技术只不过是通过查询传递到底层数据库的“语义层”,这些技术称为ROLAP。在这些情况下,底层数据结构变得更加重要

从用户的角度来看,呈现给多维数据集用户的数据接口应该简单,这通常会排除非维度模型,例如直接基于OLTP系统的数据库结构构建多维数据集