使用多維分割來改善分析服務效能

2021-04-23 10:52:14 字數 3484 閱讀 1324

微軟

分析服務

(msas)是乙個可以讓商業股東分析來自各個方面的資料的偉大的工具——並且它的越來越流行還會為效能的改善帶來額外的貢獻

使用預先計算的概要數值(聚合),msas可以幫助你在幾秒鐘之內生成乙份報告,而類似的乙份報告如果是執行在關係型資料庫

管理

系統上面的話,則需要幾個小時。但是即使是有多個聚合,msas仍然可以在處理巨大量資料的時候盡力提供優化的效能。在這篇貼士中,我將會討論使用多維分割的好處——這是乙個強有力的機制,可以改善查詢效能,減少與多維處理有關的停機時間。

分割的好處

分割可以提供很多潛在的好處,總結所示:

3、更加集中的聚合:msas 2000 和msas 2005都可以讓你為每個分割槽進行不同的聚合。經常被查詢的分割槽可以從額外的聚合中獲益,因此會帶來更好的效能。那些沒有經常使用的分割槽可以以較低的頻率處理——也許是每個月或者每個季度——它的聚合則相對少得多。基於使用的優化想到可以在每個分割槽上執行,以此來判斷哪些額外的聚合可能會帶來真正在某個分割槽上執行的查詢的效能的改善。

4、定制度儲存和處理設定:頻繁訪問的分割槽可以從預緩衝和relap儲存中獲益。換句話說,對於查詢頻率較低的分割槽來說,其他格式的儲存和處理可能更好。

5、分布式查詢和處理負載分布在多個伺服器上:msas可以讓你建立遠端分割槽;乙個放置在伺服器上的遠端分取與它的父多維體不同。在這種方式下,伺服器對影響遠端分割槽的查詢的處理方式與它的父立體不同。它可以讓你充分利用額外的處理能力。

6、並行處理的分割槽:在msas2005中,你可以在擁有多個處理器的伺服器上並行處理多個分割槽。這可以進一步減少整體的多維處理時間。

分割槽的缺點

我曾提到過,msas 2000可以讓你在多個分區內包括同樣的資料,這一點可能會導致你的報告中的計算出現失誤。幸運的是,微軟在msas2005中修正了這個問題。也許,重要的是分割槽需要更多的工作。你必須判斷可以正好代表了通常的報告中的資料的資料集,然後相應的分割資料。還有,你必須要決定使用哪個儲存模式,並且讓聚合計畫對每個分割槽有意義。更多的分割槽意味著額外的維護負擔,因為你必須合併一段時間內的多個分割槽。

我們假設你的大部分分析報告查詢的都是當前月份的資料;你可以用乙個分割槽存放當前月份的資料,然後你每天去更新它(也許是每小時),再用乙個分割槽存放當年的所有以前月份的資料,乙個分割槽存放以前年份的。一旦當前月份結束了,你就必須要合併「當前的」分割槽到當年的分割槽,然後建立乙個新的分割槽給當前的月份。正如我前面提到的,msas只能讓你用同乙個聚合合併2個分割槽——所以你必須在合併之前重新構建你的聚合。

即使是有這樣的缺點,分割槽仍然是改善分析查詢效能的無價的工具。還有,更重要的是,他們減少了多維的處理時間,並且增加多維的可用性。

算算你需要多少聚合

你為你的多維體建立的聚合的數量依賴於你的使用者的分析需求。越多的聚合通常會帶來更好的查詢效能,但是它們也會使用更多的磁碟空間,並且增加多維體處理的時間。

通常,磁碟空間不是乙個重要的考慮因素,原因如下兩點:

1. 儲存的成本每天都在下降,構建乙個資料倉儲的費用也大大超過儲存的成本。

2. msas提供了有效率的多維olap (molap)儲存選項:乙個關係型倉庫通常是以幾個gb來衡量的,它只需要幾百個mg的位元組來儲存聚合。

微軟的分析服務(msas)是乙個可以讓商業股東分析來自各個方面的資料的偉大的工具——並且它的越來越流行還會為效能的改善帶來額外的貢獻

另一方面,很長的多維體處理時間代表了更嚴重的限制。完全多維處理需要一定的停機時間,這意味著沒有人可以在處理多維體的時候執行查詢。越長的處理時間就意味著越長的停機時間。因為你的資料倉儲也在不斷變大,所以多維處理時間也在變大。8個小時的停機時間(在非營業時間)在某些環境中可能是被接受的,但是當使用者們發現這個視窗開放了16個小時的時候,他們不會高興的。更進一步地說,如果你的業務為客戶提供全球的,24小時的,每週7天的分析解決方案,停機時間根本是不可行的。

msas還會達到額外的聚合抵消效能的改善的點。建立所有可能的三分之一的聚合通常可以提供最好的效能;任何超過這個邊際的聚合都會讓效能開始下降。

實現分割槽

那麼你如何保證讓多維體處理時間保持最低,並且還能提高分析查詢的效能呢?乙個選擇就是基於某種常用於過濾查詢的標準來將多維體分割槽。乙個分割槽只是乙個完全多維體中的一部分,它可以被某些條件所限制。

例如,如果分析查詢通常被客戶的婚姻狀況所限制,那麼你就可以建立兩個分割槽——乙個為已婚客戶,乙個為單身客戶。多維體通常是按照時間維度成員來分割槽的,正如你在為每年或者每個季度建立單個分割槽的情況。

在msas 2000 和msas 2005中都可以使用分割槽,但是他們支援在企業版中才支援.這一點都不稀奇,因為分割槽通常對大型的資料倉儲才有意義,而大型的資料倉儲也最有可能應用企業版。還要注意一點,分割槽對於多維使用者是無縫的:他們可以在多維體中執行查詢,不需要制定包含某些資料集合的分割槽的名字。取而代之的是msas來判斷在查詢執行的時候使用哪個分割槽。

你還可以使用多個唯獨來對你的多維體進行分割槽。例如,銷售多維體可以通過提拔策略、客戶教育收枰,每年的收入來分割槽。注意,你可以根據同乙個事實表或者不同的事實表來建立不同的分割槽。例如,你可以有乙個每年銷售情況的事實表,或者也許是基於乙個事實表的每年銷售資料的檢視,它們都可以用來構建每個分割槽。

msas 2000的乙個限制就是,它允許你建立乙個包含了其他分割槽中也含有的資料的分割槽。假設我們為那些年收入超過150k的客戶建立了乙個分割槽,那麼這些年收入超過150k的客戶就會被計算兩次——一次是在預設的分割槽中,一次是在新的分割槽中。msas不會自動將資料從預設分割槽中刪除,也不會在將同一資料計算兩次的時候對你提出警告。要避免錯誤的計算,你必須編輯預設分割槽。此外,在設計

分割槽的時候,沒有任何方式可以排除維度成員;你不能建議分割槽嚮導包括所有的收入水平,而單單除了超過150k以上的。

msas 2005可以讓你基於你的資料來源檢視中發現的事實表來建立分割槽。你還可以編寫可以為你的分割槽用作源的sql

查詢。如果你正在對現有的分割槽使用乙個事實表,msas 2005會對你提出警告,防止你將同樣的資料計算兩次。

分析服務可以讓你合併分割槽,這一點在當前的分割槽計畫不再起作用的時候非常有用。假設你有乙個2023年的分割槽,你可能會希望將這個分割槽與「歷史性」的分割槽合併在一起,然後為2023年建立乙個新的分割槽。你可以合併兩個分割槽,如果他們兩個有同樣的聚合,同樣的結構,並且同屬於乙個多維體的時候。為了確保兩個分割槽有同樣的聚合,在msas 2000中,你可以從現有的分割槽中拷貝聚合到新建立的分割槽中。msas 2005可以讓你在分割槽建立之後,從乙個分割槽中拷貝聚合到另外乙個分割槽中。

注意,分析服務會在第一次建立維度和多維體的時候計算維度成員的總數,和事實表的規模。維度的初始尺寸可能是相當小的,比起6個月之後來說。然而,msas 2000從來不會重新計算維度的尺寸或者實際情況。你應該在維度編輯器和多維體編輯器中手工修改維度級別成員數量,以及事實表規模屬性。還有,msas 2000沒有提供一種方式來判斷每個分區內成員的數量;你不能為分割槽指定資料行總數。如果成員數量不正確,你的聚合就不會優化。你應該使用分割槽聚合工具來指定每個分割槽的事實表尺寸。

用語義分割來做車道線檢測

語義分割這幾年發展真的快,去年暑假我用enet分割車道線,效果還行,速度很快,前幾天逛github又發現一大堆更好的網路,erfnet shufflenet等,都是一些變種的網路,看他們 的結果都是乙個比乙個好。這裡先記錄一下之前跑enet的結果。模型是用的github上tensorflow版本的e...

多維陣列的使用

一維陣列 int scores1 new int 二維陣列 int scores2 string names 1.二位陣列的初始化 靜態初始化 scores2 new int,動態初始化 方法1 names new string 6 2 可以想象成有6個小組,每個小組有2個人 方法2 names n...

Golang 中使用多維 map

golang 的 xml json 解析庫乍看使用起來很方便,只要構造一樣結構的 struct 就可以一下子匯入到變數中去了.其實手工構造 struct 非常容易出現結構偏差,而且最要命的是 unmarshal 執行的時候不是嚴格匯入所以沒有任何報錯.於是這兩天寫了乙個給 golang 用的 xml...