SQL Server 列存儲系列:
- SQL Server 列存儲索引 第一篇:概述
- SQL Server 列存儲索引 第二篇:設計
- SQL Server 列存儲索引 第三篇:維護
- SQL Server 列存儲索引 第四篇:實時運營數據分析
實時運營數據分析(real-time operational analytics )是指同時在同一張數據表上同時執行用於處理日常交易的業務數據(也稱作業務查詢)和用於數據分析的報表數據(也稱作分析查詢)。分析查詢主要是對海量數據執行聚合查詢,對數據進行分析和挖掘,通常需要對大量數據進行處理,執行較長,而業務查詢主要是指對數據表進行少量數據的更新和查找,主要是支持日常的交易數據,對時間要求非常嚴格,需要快速響應用戶的查詢和更新。
運營工作負載(Operational workload)是指對開展業務至關重要的業務交易。例如,一家零售商店有一個交易系統來創建或修改新訂單,而一家信用卡公司則跟蹤供應商代表其客戶收取的所有費用。 這些交易系統對企業至關重要,因為任何停機時間或速度放緩都會直接影響企業的利潤。 因此,這些系統專為性能/可伸縮性而設計,並具有高可用性。 對業務工作負載同樣重要的是企業用來回答諸如“完成訂單的平均時間是多少時間”之類的問題的分析。
大多數解決方案是在不影響業務查詢的前提下,通過在另一台服務器上創建數據倉庫,用於實現分析查詢的工作負載(analytics workload),周期性把交易系統產生的數據通過ETL(提取,轉換和加載)同步到數據倉庫中,以更新數據分析的結果。
一,傳統的BI系統
在傳統的BI系統中,把用於公司日常事務(實時查詢交易數據)的工作負載(OLTP)和用於報表分析的工作負載分開,分別對應於運營數據庫和數據倉庫,通過把這兩種工作負載分開,盡可能地避免分析查詢對交易數據庫的影響。
分析數據通常存儲在專用於用於報表分析查詢的數據倉庫或數據集市中,日常的事務性數據直接寫入到運營數據庫,為了使數據分析盡量准確地反映事實,需要數據工程師設計ETL(提取,轉換和加載)程序,定期把運營數據轉移到分析數據庫(即數據倉庫)中。
盡管有ETL程序定期從事務數據庫把數據同步到分析數據庫,但是數據的同步不可避免地存在一定的時延,這就導致分析數據庫中的數據還是跟運營數據庫存在一定的差異(GAP),使得數據分析的結果存在失真的可能性。一份數據兩份存儲,這也增加了存儲、算力等成本,並且需要專業人員來維護數據,增加了系統的復雜性。
二,什么是實時運營數據分析
傳統的BI系統之所以存在數據延遲,是因為用於數據分析的數據倉庫和實時的交易數據是分開存儲的,如果分析查詢和業務查詢在同一基礎表上執行,那么就不會存在時間延遲的問題。實時運營分析的目標是實現在單個數據源上同時執行分析查詢和業務查詢。
在行存儲表上創建可更新的非聚集列存儲索引,列存儲索引維護數據的副本,分別在數據的單獨副本上運行業務處理和分析工作,這樣避免了在同一個數據表運行兩個工作負載,可以最大程度地減少同時運行的兩個工作負載對業務查詢性能的影響。
當基表的數據更新時,SQL Server自動更新列存儲索引,通過這種設計,用戶可以對最新的運營數據進行實時分析,分析查詢使用的始終是最新的數據,分析處理的結果是最接近現實數據的,因此,得到的分析結果是最真實和最新的。
實現實時運營數據分析,很簡單,用戶只需要在基表上創建一個非聚集的列存儲索引,就可以實現實時運營數據分析:
CREATE NONCLUSTERED COLUMNSTORE INDEX index_name ON table_name (colum_list) ;
在表上創建非聚集的列存儲索引,底層的物理結構如下圖所示:
對運營數據進行實時分析,存在兩個挑戰:
第一個挑戰是,當數據庫模式已針對OLTP優化時,如何獲得良好的分析查詢性能?傳統的數據倉庫(DW)使用星型或雪花模式為分析查詢提供最佳性能。但是,OLTP數據庫的架構已高度規范化(即數據重復最少),這主要體現在表之間存在大量的連接,在用於分析查詢時,表連接可能會導致查詢性能不佳。列存儲索引(Nonclustered columstore index,NCCI)可以顯著地提高分析查詢的速度,不過,需要注意的是,使用實時運營數據分析時,分析查詢的性能不會像使用專用DW時所能達到的那樣快,但是,關鍵好處是能夠進行實時分析。一種折衷的解決方案是:選擇性進行實時運營分析,同時仍保留用於極端分析的專用DW。
第二個挑戰是,如何最小化或消除分析工作對事務性工作負載的影響?實際上,交易系統會跟蹤其業務交易,交易工作量的任何減緩都是不可接受的。雖然SQL Server提供了多個選項來最小化分析對運營工作負載的影響,但是這種影響是不可避免的。
三,提高實時運營數據分析的性能
延遲壓縮可以提高實時運營數據分析的性能,延遲壓縮是指當新數據到達deltastore后,延遲到一定的時間后,才對數據進行壓縮存儲。
通過積累更多的數據,能夠提高數據壓縮的效率,延遲延遲能夠提高事務查詢的性能,減少存儲空間,進而提高分析查詢的性能。
參考文檔:
Get started with Columnstore for real-time operational analytics
Real-Time Operational Analytics Using In-Memory Technology
Real-Time Operational Analytics - Overview nonclustered columnstore index (NCCI)