【问题标题】:Dimensional modeling on columnar databases柱状数据库的维度建模
【发布时间】:2019-07-18 13:51:04
【问题描述】:

我已经开始学习云架构,发现他们都在使用列式数据库,这些数据库声称效率更高,因为它们存储的是列而不是行来减少重复。

从数据集市的角度来看(假设对于一个组织,一个部门只想监控互联网销售增长,而其他一些部门希望专注于销售业绩),我如何设计一个可以处理数据负载和提供轻松的数据访问。我知道如何在其之上轻松设计数据集市,最终用户根本不必为计算而烦恼。

我有过 SSAS (OLAP) 方面的经验,其中大型数据仓库上的所有计算都已经计算完毕,普通业务用户可以直接连接到多维数据集并使用自助服务 BI 工具分析数据(就像拖动和另一方面,列式数据库似乎遵循 ELT 方法,并将所有计算留在查询(视图)或报告工具上。

根据我在 SQL Server 方面的经验,我认为我的查询(例如下面)

SELECT 
  region,
  state,
  City,
  Country,
  SUM(Sales_Amount),
  AVG(Discount_Sale),
  SUM(xyz)
  ....
FROM Columnar_DataTable

将扫描完整的表,这会增加成本。想象一下,如果一个大型企业一天执行上述查询超过 1000 次。

那么,在具有维度建模的列式数据库之上创建 OLAP 是否合适,或者最好先加载数据然后在报告工具上对其进行过滤/转换? 考虑到大多数自助服务BI 工具已经考虑到这一点并限制了数据消耗的使用(例如:Power BI 桌面社区版允许每个数据集 10 GB)并强制用户进行自己的计算。

  • 如果我们将数据分离到多个表格中,那么无论如何,所有报告工具都需要表格之间的关系进行过滤。

  • 如果我们保持单一表格格式,那么报告工具必须在进行任何计算之前读取所有数据。

【问题讨论】:

  • 也许比您正在寻找的更多的是一个 DIY 答案,但 Amazon Redshift 数据仓库关于列式数据存储 (docs.aws.amazon.com/redshift/latest/dg/…) 的数据库表的列式存储大大减少了整体磁盘 I/O是优化分析查询性能的重要因素。以列方式存储数据库表信息可减少磁盘 I/O 请求的数量并减少需要从磁盘加载的数据量。

标签: reporting data-modeling data-warehouse olap dimensional-modeling


【解决方案1】:

业务分析查询通常涉及计算指标的聚合,例如您举例说明的总销售额和平均折扣。

OLAP 数据结构对这些用例很有用,因为可以预先计算和存储聚合,从而在查询时需要更少的计算和 I/O,并加快这些用例中使用的查询模式。

OLAP 方法获得了发展势头(也),因为典型的关系数据库在这些场景中性能较差,而 OLAP 被证明是一种有效的优化。

列式数据库方法(在面向分析的数据库中)也旨在优化这些用例,主要是通过以仅必须从存储中读取选定列(例如用于聚合的标签和度量)的方式构建和存储数据.这需要较少的 I/O,这也是列格式为这些用例提供出色性能的主要原因之一(其他是复杂的分区、并行处理、压缩和元数据,如 Apache Parquet)。

因此,关于您的问题,我想说的是,如果您在临时查询场景中遇到性能低下的问题,并且无法以更直接的方式解决它(例如缓存、适当的分区),那么您应该只担心在列式数据库中预先计算聚合和压缩)。但这也取决于您使用的数据库/saas/文件格式。

至于维度建模,这是一个不同的问题。如果您使用像 Parquet 这样的柱状文件格式,实际上可能需要(取决于用户和用例)使用像 Hive 这样的东西在文件上创建一个(元)维度模型,例如您可以向用户公开数据库表和 SQL 接口,而不是一堆文件。

关于 PowerBI,与大多数报告工具一样,如果用户确实要使用超过 10GB 的数据集,您可以在 Direct Query 模式下使用它。

PS:在列式数据库中,特定的 SQL 不会“扫描整个表”,它只会扫描您选择的列;这是柱状设计优化的一部分。

【讨论】:

    【解决方案2】:

    您的销售增长 SQL 没有意义。随着时间的推移监控销售增长,但您没有在 SQL 中定义时间部分。例如,如果企业想要监控每周或每月的销售额,那么您可以创建每周的 Fact 表或每月的 Fact 表,然后计算每周或每月的销售额并保存到该 Fact 表中。通过这种方式,您可以将每周或每月的数据附加到 Fact 表中,这样报告就可以从 Fact 表中读取它。在事实表中确实有一个日期表示一周/月的开始和周/月的结束,以便报告可以使用它。使用这种设计方法,报表性能会很快,因为它不进行任何计算,而是显示汇总数据。

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      相关资源
      最近更新 更多