2014-11-03 86 views
2

我有一個具有一個數據月份數據的事實表的多維數據集。事實表是15億行。 事實表包含以下列{DateID,UserKey,ActionKey,ClientKey,ActionCount}。{} 事實表中每個用戶每個用戶每個操作每個用戶一行,並且沒有完成任何活動。什麼是多維數據集中多個不同計數度量的最佳分區策略

現在我要計算的以下措施,在我的立方體如下

平均天數用戶 AVG([用戶]已訂婚。[用戶鍵],[用戶鍵],[措施]。[ DATE COUNT])從事

用戶> = 14天 SUM([用戶]。[用戶密鑰]。[用戶鍵],IIF([措施]。[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個分區每天有一個重疊的用戶標識符,但每個分區有不同的天數或31 * 3 = 93個分區,我每天將立方體分解到每天,然後每天進一步分區到3個相等部分,每天有不重疊的用戶標識符但用戶將在幾天之間重疊)或由ActionKey分區成45個不相等大小的分區,因爲大部分時間度量都是由Action分割的?

我有點困惑,因爲本文只談論優化一個不同的計數度量值,因爲我需要對我的度量值的用戶和日期執行不同的計數。

任何提示?

回答

0

我會先退後一步,嘗試使用多對多維度計數技術來實現統計計數結果,而不需要實際差異計數聚合的開銷。

也許就是最好的解釋的了「重複計數」部分是「多對多革命2.0」紙:

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

注意解決方案C是一個我指的是。

您通常會發現此解決方案的縮放比標準的「區分計數」度量要好得多。例如,我在一個最大的Fact(只有4個分區)中有一個2b行的立方體,9m行有一個「M2M Distinct Count」事實 - 性能很好,例如,6-7小時內完全處理所有數據,大部分查詢少於5秒。服務器正常但不好,例如VM,4核,32 GB RAM(與SQL,SSRS,SSIS等共享),無SSD。

我認爲你可能會被太多分區和過度複雜的設計帶走。基本引擎可以通過精心設計來創造奇蹟。

+0

我首先嚐試了使用M2M技術的獨特計數,並且它根本沒有很好的擴展性。我的查詢實際上是超時:( – user330612 2014-11-12 00:36:58

+0

我首先嚐試了使用M2M技術的獨特計數,但它並沒有很好地擴展。我的查詢實際上超時了:(我也有一臺相當不錯的機器,16核48GB RAM和1TB SSD硬盤我很好奇當你提到你的20億行表中只有4個分區沒有任何聚集時,這是真的嗎?我的多維數據集處理有3個度量組中的近1000個分區需要4-5小時,但是查詢從冷啓動開始的時間超過15分鐘,聚合是否真的很糟糕?我已經爲DimAction.ActionName維度上的所有分區設置了完全聚合 – user330612 2014-11-12 00:52:27

+0

我確實有聚合,他們似乎對於查詢性能非常重要,我只是運行嚮導性能提升10-20%,如果超過100個聚合就會停止),並且結果看起來很好 - 它爲該MG提供了74個聚合,所有4個分區使用相同的Agg設計。現在一年。我懷疑你已經過分了分區和聚合設計。 – 2014-11-12 05:23:15

相關問題