【问题标题】:What is the best partitioning strategy for multiple distinct count measures in a cube多维数据集中多个不同计数度量的最佳分区策略是什么
【发布时间】:2014-11-03 20:59:46
【问题描述】:

我有一个多维数据集,其中包含一个包含一个月数据的事实表。事实表有 15 亿行。 事实表包含以下列 { DateKey,UserKey,ActionKey, ClientKey, ActionCount } 。 事实表包含每个用户每个客户每天每个操作的一行,其中没有完成的活动。

现在我想在我的多维数据集中计算以下度量,如下所示

每位用户的平均参与天数 AVG([Users].[User Key].[User Key], [Measures].[DATE COUNT])

用户参与 >= 14 天 SUM([Users].[User Key].[User Key], IIF([Measures].[DATE COUNT] >= 14, 1, 0))

每位用户的平均请求数 IIF([Measures].[USER COUNT] = 0, 0 ,[Measures].[Activity COUNT]/[Measures].[USER COUNT])

为此,我创建了两个不同的计数度量 DATE COUNT 和 USER COUNT,它们是事实表的 DateKey 和 UserKey 列上的不同聚合。我想知道对度量值组进行分区(其中有 3 个不同的度量值进入它自己的度量值组)。

分割多维数据集的最佳策略是什么?我已经阅读了analysis service distinct count 指南,它提到通过不重叠的用户 ID 对多维数据集进行分区是单用户查询的最佳策略,而用户 X 时间是单用户时间集查询的最佳策略。

我想知道是否应该按多维数据集将每个分区划分为 75 个分区(每个分区 15 亿行/2000 万行),每个分区将具有不重叠和连续的用户 ID,还是应该将其划分为 31 个分区每天有重叠的用户 ID,但每个分区中有不同的天数或 31 * 3 = 93 个分区,我将多维数据集分解为每天,然后每天进一步划分为 3 个相等的部分,每天内用户 ID 不重叠(但用户将在天之间重叠)或通过 ActionKey 划分为 45 个大小不等的分区,因为大多数时候度量是由 Action 切片的?

我有点困惑,因为这篇论文只讨论了对单个不同计数度量的优化,因为我需要对我的度量的用户和日期进行不同的计数。

有什么建议吗?

【问题讨论】:

    标签: ssas mdx olap-cube


    【解决方案1】:

    我会先退后一步,尝试多对多维度计数技术来实现 Distinct Count 结果,而无需实际 Distinct Count 聚合的开销。

    对此最好的解释可能是“Many to Many Revolution 2.0”论文的“Distinct Count”部分:

    http://www.sqlbi.com/articles/many2many/

    注意解决方案 C 是我指的那个。

    您通常会发现此解决方案的扩展性比标准的“不同计数”度量要好得多。例如,我在最大的 Fact 中有一个 2b 行的多维数据集(并且只有 4 个分区),并且在 9m 行上有一个“M2M Distinct Count”事实 - 性能很好,例如完全重新处理所有数据需要 6-7 小时,大多数查询不到 5 秒。服务器还可以,但不是很好,例如虚拟机,4 核,32 GB RAM(与 SQL、SSRS、SSIS 等共享),无 SSD。

    我认为您可能会因过多的分区和过于复杂的设计而忘乎所以。精心设计的基本引擎可以创造奇迹。

    【讨论】:

    • 我首先使用 M2M 技术尝试了不同的计数,但它根本没有很好地扩展。我的查询实际上超时了:(
    • 我首先使用 M2M 技术尝试了不同的计数,但它根本没有很好地扩展。我的查询实际上超时了:(。我也有一台非常好的机器。16 核 48GB RAM 和 1TB SSD 硬盘。当你提到你的 20 亿行表中只有 4 个分区而没有任何聚合时,我很好奇。这是真的吗?我的多维数据集处理跨 3 个度量值组有近 1000 个分区需要 4-5 小时,但查询从冷启动开始需要 > 15 分钟。聚合真的那么糟糕吗?我已经为 DimAction.ActionName 上的所有分区设置了完整聚合维度
    • 我确实有聚合,它们似乎对查询性能至关重要。我刚刚运行了向导(目标是提高 10-20% 的性能,如果超过 100 个聚合就停止),结果看起来不错——它为那个 MG 提供了 74 个聚合。所有 4 个分区都使用相同的 Agg 设计。它已经运行了一年多。我怀疑你已经把分区和聚合设计都煮过头了。
    • 你有多少不同的措施?每个度量值组中有多少个分区?我的事实度量组中大约有 300 个分区,我的 3300 万维度上有 4 个部分。我有不同的日期和用户计数,并且都通过事实度量组具有 m2m 关系
    • 没有不同的计数度量。相反,您可以根据维度数据添加计数度量。 MG上有4个分区,维度上没有分区。
    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多