如何structure/implement多维数据/数据立方体

How to structure/implement multidimensional data / data cube

我一直在阅读数据立方体是什么,有很多资源说明 什么 它是什么以及 为什么 (OLAP / 商业智能/特定列的聚合)你会使用一个但永远不会 how.

大多数资源似乎是 referencing relational data 存储,但您似乎不必使用 RDBMS。

但似乎没有任何内容可以说明您如何构建架构以及如何高效查询以避免 运行 聚合所有这些数据的缓慢时间。我能找到的最好的是这个 edx class 即 "not currently available": Developing a Multidimensional Data Model.

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

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

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

普遍的看法是,多维数据集在基于 'dimensional model' 又名星型模式(通常(但不总是)在 RDBMS 中实施)时效果最佳。这是有道理的,因为这些模型旨在快速查询和聚合。

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

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