【问题标题】:why do I still need dimension if I have compression如果我有压缩,为什么我还需要维度
【发布时间】:2013-03-16 04:34:27
【问题描述】:

最近有点疑惑,求解答。

通常,在设计数据仓库时,我们要么使用星型模型,要么使用雪花模型,要么使用混合模型,通常我们将主数据规范化为维度表(当然有时出于性能考虑,去规范化)。我的问题是,规范化成维度表,或者创建各种不同的维度表,有什么好处?

如果是为了节省空间,那么 SQL Server 不同级别的压缩已经节省了空间。 例如,在一个事实表中,有一个 varchar(max) 列,它只有 1% 的唯一值,然后将其归一化为维度表,并将 key 放入事实表中,这将有助于节省空间;但是,由于 SQL 行级压缩,理论上它的工作方式相同,而是通过您自己的设计进行规范化,SQL Server 会找到字符串模式并保存在某处,行内只是指针,因此空间使用量理论上就像钥匙。

如果是为了提高查询性能,那么对于维度表来说,无论你在维度上有什么索引,你至少需要先进行非集群索引扫描/索引查找你的维度表才能得到key,然后使用 key 获取集群索引/或 RID,然后获取完整数据。那是 2 倍的 I/O。如果没有维度,您仍然有事实表上的索引,对应的列,由于压缩,您的索引表将与您在维度表上创建索引的大小相似。所以,当你查询时,可能也是一次非集群索引扫描/集群索引查找/然后全量数据,所以I/O可能会更小,加上没有join,查询性能可能会更快.

那么,如果我已经进行了压缩,为什么还需要维度?

【问题讨论】:

  • 一个设计良好的星型模式是通过使用尽可能小的数据类型来压缩的。我在这里没有看到真正的问题。尺寸便于最终用户进行切片/切块。
  • 您能否分享更多关于“精心设计的星型模式是通过使用可能的最小数据类型来压缩的”的。还有维度是为了最终用户方便切片/切块,最终用户真的会使用维度表还是大多数情况下他们只是使用视图?
  • 分析完全非规范化的表与星型模式的难度如何?

标签: sql sql-server-2008 ssas data-warehouse business-intelligence


【解决方案1】:

维度模型不仅仅与数据库的物理设计有关。如果您发现在“视图层”中创建星型模式时性能更好,并且下面是 3NF 表,那太好了!

星型模式是为了让报告编写者和最终用户能够访问来自多个来源的数据,然后可以通过多种不同的方式对其进行汇总和分析。如果我必须写一份报告显示“x 类产品销售额 > 10000 美元的客户的平均延迟发票数量”,规范化模型将要求我转到销售系统的每个子表,可能产生一个有 10 - 50 个连接的查询!

想象一下,我是一名报告编写者,当我想做一些不同的事情时,我必须记住所有这些连接......或者更糟的是,我是一个编写基本 SQL 的业务用户,我没有第一个线索如何进行这么多的连接。

因此,识别数据中的业务关系的艰苦工作是预先完成的,并且构建了事实表,将我的发票数据与与之相关的描述性数据连接在一起。现在,我只需按产品事实查询客户总销售额,然后获取结果客户集,并加入发票事实(甚至是预构建的聚合)以获得平均延迟发票数。可能有 2-4 个表连接,而且对报告编写器来说更容易。

【讨论】:

  • 星型模式如何帮助这个完全非规范化的表?
  • 某些数据的粒度与其他数据不同。如果我有通过一些常见维度相关的发票数据和制造数据,我希望能够对单独的部分和整体进行不同的报告。此外,许多维度有数百列,其中许多可能是空的或稀疏的 - 非规范化表本身变得比星号更复杂,因为我必须识别我需要的数据的粒度并执行“不同”操作和分组操作。
  • 事实表是完全规范化的——它们充满了与完全非规范化的表相关的键。从业务角度来看,将我的客户信息放在一个表中,将产品信息放在另一个表中,我可以直接查询这些维度以及事实。如果我完全非规范化一切,很多问题都无法回答——“我有多少产品?” - 只有那些有交易的产品才会出现在“完全非规范化的表”中。
  • 请注意,我的思想已经发展,不一定会推荐金博尔风格的方法来处理任何事情。但是,正如您从大多数数据仓库人员那里听到的那样,我将保持原样。然而,在这种情况下,创建星型视图层以方便业务用户使用可能有一定的有效性。
【解决方案2】:

我不明白您为什么要关联压缩和尺寸。仓库的全部意义在于忘记压缩和规范化,并为需要最少数量的表连接的东西建模,以便尽可能快地获取数据。

假设您的桌子上有一个未来房屋的 3D 模型。您会希望从各个角度查看模型,以便您对房子有更多的了解。同样,我们有维度,以便我们可以从所有可能的角度查看数据。这就是米奇说“切片和切丁”时的意思。

维杰。

【讨论】:

    【解决方案3】:

    您必须考虑尺寸值的变化。

    如果您的一位客户结婚了,您需要按当前婚姻状况搜索您的数据,您是否希望:

    1. 为该客户更新单个维度记录,或者...
    2. 为该客户更新事实表中的每条历史记录?

    规范化的一个关键原则是您只将每项信息保存在一个位置,这不会随着数据仓库的变化而改变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-07
      • 2017-01-20
      • 2015-06-10
      • 2012-02-21
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多