自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MSSQL · 特性分析 · 列存儲(chǔ)技術(shù)做實(shí)時(shí)分析

存儲(chǔ) 存儲(chǔ)軟件
使用傳統(tǒng)RDBMS數(shù)據(jù)分析架構(gòu),遇到了前所未有的挑戰(zhàn),高延遲、數(shù)據(jù)處理流程復(fù)雜和成本過(guò)高。這篇文章討論如何利用SQL Server 2016列存儲(chǔ)技術(shù)做實(shí)時(shí)數(shù)據(jù)分析,解決傳統(tǒng)分析方法的痛點(diǎn)。

數(shù)據(jù)分析指導(dǎo)商業(yè)行為的價(jià)值越來(lái)越高,使得用戶對(duì)數(shù)據(jù)實(shí)時(shí)分析的要求變得越來(lái)越高。使用傳統(tǒng)RDBMS數(shù)據(jù)分析架構(gòu),遇到了***的挑戰(zhàn),高延遲、數(shù)據(jù)處理流程復(fù)雜和成本過(guò)高。這篇文章討論如何利用SQL Server 2016列存儲(chǔ)技術(shù)做實(shí)時(shí)數(shù)據(jù)分析,解決傳統(tǒng)分析方法的痛點(diǎn)。

傳統(tǒng)RDBMS數(shù)據(jù)分析

在過(guò)去很長(zhǎng)一段時(shí)間,企業(yè)均選擇傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)做OLAP和Data Warehouse工作。這一節(jié)討論傳統(tǒng)RDBMS數(shù)據(jù)分析的結(jié)構(gòu)和面臨的挑戰(zhàn)。

傳統(tǒng)RDBMS分析架構(gòu)

傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)做數(shù)據(jù)分析的架構(gòu),按照功能模塊可以劃分為三個(gè)部分:

OLTP模塊:OLTP的全稱是Online Transaction Processing,它是數(shù)據(jù)產(chǎn)生的源頭,對(duì)數(shù)據(jù)的完整性和一致性要求很高;對(duì)數(shù)據(jù)庫(kù)的反應(yīng)時(shí)間(RT: Response Time)非常敏感;具有高并發(fā),多事務(wù),高響應(yīng)等特點(diǎn)。

ETL模塊:ETL的全稱是Extract Transform Load。他是做數(shù)據(jù)清洗、轉(zhuǎn)化和加載工作的??梢詫TL理解為數(shù)據(jù)從OLTP到Data Warehouse的“搬運(yùn)工”。ETL***的特定是具有延時(shí)性,為了***限度減小對(duì)OLTP的影響,一般會(huì)設(shè)計(jì)成按小時(shí),按天或者按周來(lái)周期性運(yùn)作。

OLAP模塊:OLAP的全稱是Online Analytic Processing,它是基于數(shù)據(jù)倉(cāng)庫(kù)(Data Warehouse)做數(shù)據(jù)分析和報(bào)表呈現(xiàn)的終端產(chǎn)品。數(shù)據(jù)倉(cāng)庫(kù)的特點(diǎn)是:數(shù)據(jù)形態(tài)固定,幾乎或者很少發(fā)生數(shù)據(jù)變更,統(tǒng)計(jì)查詢分析讀取數(shù)據(jù)量大。

傳統(tǒng)的RDBMS分析模型圖,如下圖展示(圖片直接截取自微軟的培訓(xùn)材料):

 

從這個(gè)圖,我們可以非常清晰的看到傳統(tǒng)RDBMS分析模型的三個(gè)大的部分:在圖的最左邊是OLTP業(yè)務(wù)場(chǎng)景,負(fù)責(zé)采集和產(chǎn)生數(shù)據(jù);圖的中部是ETL任務(wù),負(fù)責(zé)“搬運(yùn)”數(shù)據(jù);圖的右邊是OLAP業(yè)務(wù)場(chǎng)景,負(fù)責(zé)分析數(shù)據(jù),然后將分析結(jié)果交給BI報(bào)表展示給最終用戶。企業(yè)使用這個(gè)傳統(tǒng)的架構(gòu)長(zhǎng)達(dá)數(shù)年,遇到了不少的挑戰(zhàn)和困難。

面臨的挑戰(zhàn)

商場(chǎng)如戰(zhàn)場(chǎng),戰(zhàn)機(jī)隨息萬(wàn)變,數(shù)據(jù)分析結(jié)果指導(dǎo)商業(yè)行為的價(jià)值越來(lái)越高,使得數(shù)據(jù)分析結(jié)果變得越來(lái)越重要,用戶對(duì)數(shù)據(jù)實(shí)時(shí)分析的要求變得越來(lái)越高。使用傳統(tǒng)RDBMS分析架構(gòu),遇到了***的挑戰(zhàn),主要的痛點(diǎn)包括:

  • 數(shù)據(jù)延遲大
  • 數(shù)據(jù)處理流程冗長(zhǎng)復(fù)雜
  • 成本過(guò)高

數(shù)據(jù)延遲大:為了減少對(duì)OLTP模塊的影響,ETL任務(wù)往往會(huì)選擇在業(yè)務(wù)低峰期周期性運(yùn)作,比如凌晨。這就會(huì)導(dǎo)致OLAP分析的數(shù)據(jù)源Data Warehouse相對(duì)于OLTP有至少一天的時(shí)間差異。這個(gè)時(shí)間差異對(duì)于某些實(shí)時(shí)性要求很高的業(yè)務(wù)來(lái)說(shuō),是無(wú)法接受的。比如:銀行卡盜刷的檢查服務(wù),是需要做到秒級(jí)別通知持卡人的。試想下,如果你的銀行卡被盜刷,一天以后才收到銀行發(fā)過(guò)來(lái)的短信提醒,會(huì)是多么糟糕的體驗(yàn)。

數(shù)據(jù)處理流程冗長(zhǎng)復(fù)雜:數(shù)據(jù)是通過(guò)ETL任務(wù)來(lái)抽取、清洗和加載到Data Warehouse中的。為了保證數(shù)據(jù)分析結(jié)果的正確性,ETL還必須要解決一系列的問題。比如:OLTP變更數(shù)據(jù)的捕獲,并同步到Data Warehouse;周期性的進(jìn)行數(shù)據(jù)全量和增量更新來(lái)確保OLTP和Data Warehouse中數(shù)據(jù)的一致性。整個(gè)數(shù)據(jù)流冗長(zhǎng),實(shí)現(xiàn)邏輯異常復(fù)雜。

成本過(guò)高:為了實(shí)現(xiàn)傳統(tǒng)的RDBMS數(shù)據(jù)分析功能,必須新增Data Warehouse角色來(lái)保存所有的OLTP數(shù)據(jù)冗余,專門提供分析服務(wù)功能。這勢(shì)必會(huì)加大了硬件、軟件和維護(hù)成本投入;隨之還會(huì)到來(lái)ETL任務(wù)做數(shù)據(jù)抓取、清洗、轉(zhuǎn)換和加載的開發(fā)成本和時(shí)間成本投入。

那么,SQL Server有沒有一種技術(shù)既能解決以上所有痛點(diǎn)的方法,又能實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)分析呢?當(dāng)然有,那就是SQL Server 2016列存儲(chǔ)技術(shù)。

SQL Server 2016列存儲(chǔ)技術(shù)做實(shí)時(shí)分析

為了解決OLAP場(chǎng)景的查詢分析,微軟從SQL Server 2012開始引入列存儲(chǔ)技術(shù),大大提高了OLAP查詢的性能;SQL Server 2014解決了列存儲(chǔ)表只讀的問題,使用場(chǎng)景大大拓寬;而SQL Server 2016的列存儲(chǔ)技術(shù)徹底解決了實(shí)時(shí)數(shù)據(jù)分析的業(yè)務(wù)場(chǎng)景。用戶只需要做非常小規(guī)模的修改,便可以可以非常平滑的使用SQL Server 2016的列存儲(chǔ)技術(shù)來(lái)解決實(shí)時(shí)數(shù)據(jù)分析的業(yè)務(wù)場(chǎng)景。這一節(jié)討論以下幾個(gè)方面:

SQL Server 2016數(shù)據(jù)分析架構(gòu)

  • Disk-based Tables with Nonclustered Columnstore Index
  • Memory-based Tables with Columnstore Index
  • Minimizing impacts of OLTP

SQL Server 2016數(shù)據(jù)分析架構(gòu)

SQL Server 2016數(shù)據(jù)分析架構(gòu)相對(duì)于傳統(tǒng)的RDBMS數(shù)據(jù)分析架構(gòu)有了非常大的改進(jìn),變得更加簡(jiǎn)單。具體體現(xiàn)在OLAP直接接入OLTP數(shù)據(jù)源,如此就無(wú)需Data Warehouse角色和ETL任務(wù)這個(gè)“搬運(yùn)工”了。

OLAP直接接入OLTP數(shù)據(jù)源:讓OLAP報(bào)表數(shù)據(jù)源直接接入OLTP的數(shù)據(jù)源頭上。SQL Server會(huì)自動(dòng)選擇合適的列存儲(chǔ)索引來(lái)提高數(shù)據(jù)分析查詢的性能,實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)分析的場(chǎng)景。

不再需要ETL任務(wù):由于OLAP數(shù)據(jù)源直接接入OLTP的數(shù)據(jù),沒有了Data Warehouse角色,所以不再需要ETL任務(wù),從而大大簡(jiǎn)化了數(shù)據(jù)處理流程中的各環(huán)節(jié),沒有了相應(yīng)的開發(fā)維護(hù)和時(shí)間成本。

SQL Server 2016實(shí)時(shí)分析架構(gòu)圖,展示如下(圖片來(lái)自微軟培訓(xùn)教程):

 

 

 

 

SQL Server 2016之所以能夠?qū)崿F(xiàn)如此簡(jiǎn)化的實(shí)時(shí)分析,底氣是來(lái)源于SQL Server 2016的列存儲(chǔ)技術(shù),我們可以建立基于磁盤存儲(chǔ)或者基于內(nèi)存存儲(chǔ)的列存儲(chǔ)表來(lái)進(jìn)行實(shí)時(shí)數(shù)據(jù)分析。

Disk-based Tables with Nonclustered Columnstore Index

使用SQL Server 2016列存儲(chǔ)索引實(shí)現(xiàn)實(shí)時(shí)分析的***種方法是為表建立非聚集列存儲(chǔ)索引。在SQL Server 2012版本中,僅支持非聚集列存儲(chǔ)索引,并且表會(huì)成為只讀,而無(wú)法更新;在SQL Server 2014版本中,支持聚集列存儲(chǔ)索引表,且數(shù)據(jù)可更新;但是非聚集列存儲(chǔ)索引表還是只讀;而在SQL Server 2016中,完全支持非聚集列存儲(chǔ)索引和聚集列存儲(chǔ)索引,并且表可更新。所以,在SQL Server 2016版本中,我們完全可以建立非聚集列存儲(chǔ)索引來(lái)實(shí)現(xiàn)OLAP的查詢場(chǎng)景。創(chuàng)建方法示例如下:

  1. DROP TABLE IF EXISTS dbo.SalesOrder; 
  2. GO 
  3. CREATE TABLE dbo.SalesOrder 
  4.     OrderID BIGINT IDENTITY(1,1) NOT NULL 
  5.     ,AutoID INT NOT NULL 
  6.     ,UserID INT NOT NULL 
  7.     ,OrderQty INT NOT NULL 
  8.     ,Price DECIMAL(8,2) NOT NULL 
  9.     ,OrderDate DATETIME NOT NULL 
  10.     ,OrderStatus SMALLINT NOT NULL 
  11.     CONSTRAINT PK_SalesOrder PRIMARY KEY NONCLUSTERED (OrderID) 
  12. ) ; 
  13. GO 
  14.  
  15. --Create the columnstore index with a filtered condition   
  16. CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI_SalesOrder  
  17. ON dbo.SalesOrder (OrderID, AutoID, UserID, OrderQty, Price, OrderDate, OrderStatus) 
  18. GO 

在這個(gè)實(shí)例中,我們創(chuàng)建了SalesOrder表,并且為該表創(chuàng)建了非聚集列存儲(chǔ)索引,當(dāng)進(jìn)行OLAP查詢分析的時(shí)候,SQL Server會(huì)直接從該列存儲(chǔ)索引中讀取數(shù)據(jù)。

Memory-based Tables with Columnstore Index

SQL Server 2014版本引入了In-Memory OLTP,又或者叫著Hekaton,中文稱之為內(nèi)存優(yōu)化表,內(nèi)存優(yōu)化表完全是Lock Free、Latch Free的,可以***限度的增加并發(fā)和提高響應(yīng)時(shí)間。而在SQL Server 2016中,如果你的服務(wù)器內(nèi)存足夠大的話,我們完全可以建立基于內(nèi)存優(yōu)化表的列存儲(chǔ)索引,這樣的表數(shù)據(jù)會(huì)按列存儲(chǔ)在內(nèi)存中,充分利用兩者的優(yōu)勢(shì),***程度的提高查詢查詢效率,降低數(shù)據(jù)庫(kù)響應(yīng)時(shí)間。創(chuàng)建方法實(shí)例如下:

  1. DROP TABLE IF EXISTS dbo.SalesOrder; 
  2. GO 
  3. CREATE TABLE dbo.SalesOrder 
  4.     OrderID BIGINT IDENTITY(1,1) NOT NULL 
  5.     ,AutoID INT NOT NULL 
  6.     ,UserID INT NOT NULL 
  7.     ,OrderQty INT NOT NULL 
  8.     ,Price DECIMAL(8,2) NOT NULL 
  9.     ,OrderDate DATETIME NOT NULL 
  10.     ,OrderStatus SMALLINT NOT NULL 
  11.     CONSTRAINT PK_SalesOrder PRIMARY KEY NONCLUSTERED HASH (OrderID) WITH (BUCKET_COUNT = 10000000) 
  12. WITH(MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA) ; 
  13. GO 
  14.  
  15. ALTER TABLE dbo.SalesOrder 
  16.     ADD INDEX CCSI_SalesOrder CLUSTERED COLUMNSTORE 
  17. GO 

在這個(gè)實(shí)例中,我們創(chuàng)建了基于內(nèi)存的優(yōu)化表SalesOrder,持久化方案為表結(jié)構(gòu)和數(shù)據(jù);然后在這個(gè)內(nèi)存表上建立聚集列存儲(chǔ)索引。當(dāng)OLAP查詢分析執(zhí)行的時(shí)候,SQL Server可以直接從基于內(nèi)存的列存儲(chǔ)索引中獲取數(shù)據(jù),大大提高查詢分析的能力。

Minimizing impacts of OLTP

考慮到OLTP數(shù)據(jù)源的高并發(fā),低延遲要求的特性,在某些非常高并發(fā)事務(wù)場(chǎng)景中,我們可以采用以下方法***限度減少對(duì)OLTP的影響:

  • Filtered NCCI + Clustered B-Tree Index
  • Compress Delay
  • Offloading OLAP to AlwaysOn Readable Secondary
  • Filtered NCCI + Clustered B-Tree Index

帶過(guò)濾條件的索引在SQL Server產(chǎn)品中并不是什么全新的概念,在SQL Server 2008及以后的產(chǎn)品版本中,均支持創(chuàng)建過(guò)濾索引,這項(xiàng)技術(shù)允許用戶創(chuàng)建存在過(guò)濾條件的索引,以加速特定條件的查詢語(yǔ)句使用過(guò)濾索引。而在SQL Server 2016中支持存在過(guò)濾條件的列存儲(chǔ)索引,我們可以使用這項(xiàng)技術(shù)來(lái)區(qū)分?jǐn)?shù)據(jù)的冷熱程度(數(shù)據(jù)冷熱程度是指數(shù)據(jù)的修改頻率;冷數(shù)據(jù)是指幾乎或者很少被修改的數(shù)據(jù);熱數(shù)據(jù)是指經(jīng)常會(huì)被修改的數(shù)據(jù)。比如在訂單場(chǎng)景中,訂單從生成狀態(tài)到客戶收到貨物之間的狀態(tài),會(huì)被經(jīng)常更新,屬于熱數(shù)據(jù);而客人一旦收到貨物,訂單信息幾乎不會(huì)被修改了,就屬于冷數(shù)據(jù))。利用過(guò)濾列存儲(chǔ)索引來(lái)區(qū)分冷熱數(shù)據(jù)的技術(shù),是使用聚集B-Tree索引來(lái)存放熱數(shù)據(jù),使用過(guò)濾非聚集列存儲(chǔ)索引來(lái)存放冷數(shù)據(jù),這樣SQL Server 2016的優(yōu)化器可以非常智能的從非聚集列存儲(chǔ)索引中獲取冷數(shù)據(jù),從聚集B-Tree索引中獲取熱數(shù)據(jù),這樣使得OLAP操作與OLTP事務(wù)操作邏輯隔離開來(lái),最終OLAP***限度的減少對(duì)OLTP的影響。

下圖直觀的表示了Filtered NCCI + Clustered B-Tree Index的結(jié)構(gòu)圖(圖片來(lái)自微軟培訓(xùn)教程):

 

實(shí)現(xiàn)方法參見以下代碼:

  1. -- create demo table SalesOrder 
  2. DROP TABLE IF EXISTS dbo.SalesOrder; 
  3. GO 
  4. CREATE TABLE dbo.SalesOrder 
  5.     OrderID BIGINT IDENTITY(1,1) NOT NULL 
  6.     ,AutoID INT NOT NULL 
  7.     ,UserID INT NOT NULL 
  8.     ,OrderQty INT NOT NULL 
  9.     ,Price DECIMAL(8,2) NOT NULL 
  10.     ,OrderDate DATETIME NOT NULL 
  11.     ,OrderStatus SMALLINT NOT NULL 
  12.     CONSTRAINT PK_SalesOrder PRIMARY KEY NONCLUSTERED (OrderID) 
  13. ) ; 
  14. GO 
  15. /* 
  16. — OrderStatus Description 
  17. — 0 => ‘Placed’  
  18. — 1 => ‘Closed’ 
  19. — 2 => ‘Paid’ 
  20. — 3 => ‘Pending’ 
  21. — 4 => ‘Shipped’ 
  22. — 5 => ‘Received’ 
  23. */ 
  24.  
  25. CREATE CLUSTERED INDEX  CI_SalesOrder  
  26. ON dbo.SalesOrder(OrderStatus) 
  27. GO 
  28.   
  29. --Create the columnstore index with a filtered condition   
  30. CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI_SalesOrder  
  31. ON dbo.SalesOrder (AutoID, Price, OrderQty, orderstatus)   
  32. WHERE orderstatus = 5   
  33. ;   
  34. GO 

在這個(gè)實(shí)例中,我們創(chuàng)建了SalesOrder表,并在OrderStatus字段上建立了Clustered B-Tree結(jié)構(gòu)的索引CI_SalesOrder,然后再建立了帶過(guò)濾條件的非聚集列存儲(chǔ)索引NCCI_SalesOrder。當(dāng)客人還未收到貨物的訂單,會(huì)處于前面五中狀態(tài),屬于需要經(jīng)常更新的熱數(shù)據(jù),SQL Server查詢會(huì)根據(jù)Clustered B-Tree索引CI_SalesOrder來(lái)查詢數(shù)據(jù);客人已經(jīng)收貨的訂單,處于第六種狀態(tài),屬于冷數(shù)據(jù),SQL Server查詢冷數(shù)據(jù)會(huì)直接從非聚集列存儲(chǔ)索引中獲取數(shù)據(jù)。從而***限度減少對(duì)OLTP影響的同時(shí),提高查詢效率。

Compress Delay

如果按照業(yè)務(wù)邏輯層面很難明確劃分出數(shù)據(jù)的冷熱程度,也就是說(shuō)很難從過(guò)濾條件來(lái)邏輯區(qū)分?jǐn)?shù)據(jù)的冷熱。這種情況下,我們可以使用延遲壓縮(Compress Delay)技術(shù)從時(shí)間層面來(lái)區(qū)分冷熱數(shù)據(jù)。比如:我們定義超過(guò)60分鐘的數(shù)據(jù)為冷數(shù)據(jù),60分鐘以內(nèi)的數(shù)據(jù)為熱數(shù)據(jù),那么我們可以在創(chuàng)建列存儲(chǔ)索引的時(shí)候添加WITH選項(xiàng)COMPRESSION_DELAY = 60 Minutes。當(dāng)數(shù)據(jù)產(chǎn)生超過(guò)60分鐘以后,數(shù)據(jù)會(huì)被壓縮存放到列存儲(chǔ)索引中(冷數(shù)據(jù)),60分鐘以內(nèi)的數(shù)據(jù)會(huì)駐留在Delta Store的B-Tree結(jié)構(gòu)中,這種延遲壓縮的技術(shù)不但能夠達(dá)到隔離OLAP對(duì)OLTP作用,還能***限度的減少列存儲(chǔ)索引碎片的產(chǎn)生。

實(shí)現(xiàn)方法參見以下例子:

  1. -- create demo table SalesOrder 
  2. DROP TABLE IF EXISTS dbo.SalesOrder; 
  3. GO 
  4. CREATE TABLE dbo.SalesOrder 
  5.     OrderID BIGINT IDENTITY(1,1) NOT NULL 
  6.     ,AutoID INT NOT NULL 
  7.     ,UserID INT NOT NULL 
  8.     ,OrderQty INT NOT NULL 
  9.     ,Price DECIMAL(8,2) NOT NULL 
  10.     ,OrderDate DATETIME NOT NULL 
  11.     ,OrderStatus SMALLINT NOT NULL 
  12.     CONSTRAINT PK_SalesOrder PRIMARY KEY NONCLUSTERED (OrderID) 
  13. ) ; 
  14. GO 
  15.  
  16. --Create the columnstore index with a filtered condition   
  17. CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI_SalesOrder  
  18. ON dbo.SalesOrder (AutoID, Price, OrderQty, orderstatus)   
  19. WITH(COMPRESSION_DELAY = 60 MINUTES) 
  20. ;   
  21. GO 
  22.  
  23. SELECT name 
  24.         ,type_desc 
  25.         ,compression_delay  
  26. FROM sys.indexes 
  27. WHERE object_id = object_id('SalesOrder'
  28.     AND name = 'NCCI_SalesOrder' 

檢查索引信息截圖如下:

 

Offloading OLAP to AlwaysOn Readable Secondary

另外一種減少OLAP對(duì)OLTP影響的方法是利用AlwaysOn只讀副本,這種情況,可以將OLAP數(shù)據(jù)源從OLTP剝離出來(lái),接入到AlwaysOn的只讀副本上。AlwaysOn的主副本負(fù)責(zé)事務(wù)處理,只讀副本可以作為OLAP的數(shù)據(jù)分析源,這樣實(shí)現(xiàn)了OLAP與OLTP的物理隔離,將影響減到***。架構(gòu)圖如下所示(圖片來(lái)自微軟培訓(xùn)教程):

 

一個(gè)實(shí)際例子

在訂單系統(tǒng)場(chǎng)景中,用戶收到貨物過(guò)程,每個(gè)訂單會(huì)經(jīng)歷6中狀態(tài),假設(shè)為Placed、Canceled、Paid、Pending、Shipped和Received。在前面5中狀態(tài)的訂單,會(huì)被經(jīng)常修改,比如:打包訂單,出庫(kù),更新快遞信息等,這部分經(jīng)常被修改的數(shù)據(jù)稱為熱數(shù)據(jù);而訂單一旦被客人接受以后,訂單數(shù)據(jù)就幾乎不會(huì)被修改,這部分?jǐn)?shù)據(jù)稱為冷數(shù)據(jù)。這個(gè)例子就是使用SQL Server 2016 Filtered NCCI + Clustered B-Tree索引的方式來(lái)邏輯劃分出數(shù)據(jù)的冷熱程度,SQL Server在查詢過(guò)程中,會(huì)從非聚集列存儲(chǔ)索引中取冷數(shù)據(jù),從B-Tree索引中取熱數(shù)據(jù),***限度提高OLAP查詢效率,減少對(duì)OLTP的影響。

具體建表代碼實(shí)現(xiàn)如下:

  1. -- create demo table SalesOrder 
  2. DROP TABLE IF EXISTS dbo.SalesOrder; 
  3. GO 
  4. CREATE TABLE dbo.SalesOrder 
  5.     OrderID BIGINT IDENTITY(1,1) NOT NULL 
  6.     ,AutoID INT NOT NULL 
  7.     ,UserID INT NOT NULL 
  8.     ,OrderQty INT NOT NULL 
  9.     ,Price DECIMAL(8,2) NOT NULL 
  10.     ,OrderDate DATETIME NOT NULL 
  11.     ,OrderStatus SMALLINT NOT NULL 
  12.     CONSTRAINT PK_SalesOrder PRIMARY KEY NONCLUSTERED (OrderID) 
  13. ) ; 
  14. GO 
  15. /* 
  16. — OrderStatus Description 
  17. — 0 => ‘Placed’  
  18. — 1 => ‘Closed’ 
  19. — 2 => ‘Paid’ 
  20. — 3 => ‘Pending’ 
  21. — 4 => ‘Shipped’ 
  22. — 5 => ‘Received’ 
  23. */ 
  24.  
  25. CREATE CLUSTERED INDEX  CI_SalesOrder  
  26. ON dbo.SalesOrder(OrderStatus) 
  27. GO 
  28.   
  29. --Create the columnstore index with a filtered condition   
  30. CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI_SalesOrder  
  31. ON dbo.SalesOrder (AutoID, Price, OrderQty, orderstatus)   
  32. WHERE orderstatus = 5   
  33. ;   
  34. GO 

為了能夠直觀的看到利用SQL Server 2016列存儲(chǔ)索引實(shí)現(xiàn)實(shí)時(shí)分析的效果,我虛擬了一個(gè)網(wǎng)絡(luò)汽車銷售訂單系統(tǒng),使用NodeJs + SQL Server 2016 Columnstore Index + Socket.IO來(lái)實(shí)現(xiàn)實(shí)時(shí)訂單銷量和銷售收入的分析頁(yè)面。

總結(jié)

這篇文章講解利用SQL Server 2016列存儲(chǔ)索引技術(shù)實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)分析的兩種方法,以解決傳統(tǒng)RDBMS數(shù)據(jù)分析的高延遲、高成本的痛點(diǎn)。***種方法是Hekaton + Clustered Columnstore Index;第二種方法是Filtered Nonclustered Columnstore Index + Clustered B-Tree。本文并以此理論為基礎(chǔ),展示了一個(gè)網(wǎng)絡(luò)汽車在線銷售系統(tǒng)的實(shí)時(shí)訂單分析頁(yè)面。

責(zé)任編輯:武曉燕 來(lái)源: 云棲社區(qū)
相關(guān)推薦

2016-06-13 14:38:46

開源Skydive

2016-09-17 00:12:46

2016-11-29 09:27:22

Apache SparDashboard構(gòu)建

2016-10-31 19:19:20

實(shí)時(shí)分析

2022-07-14 15:08:21

SQL數(shù)據(jù)驅(qū)動(dòng)NoSQL

2020-05-15 10:28:04

實(shí)時(shí)分析客戶需求CIO

2016-08-31 14:41:31

大數(shù)據(jù)實(shí)時(shí)分析算法分類

2016-05-12 09:12:30

IBM大型機(jī)實(shí)時(shí)分析

2021-06-07 10:20:26

實(shí)時(shí)分析IT領(lǐng)導(dǎo)者CIO

2023-10-31 15:40:12

2014-02-21 16:46:57

英特爾大數(shù)據(jù)技術(shù)實(shí)時(shí)分析

2012-02-21 10:25:35

SAPHANA實(shí)時(shí)分析

2020-04-08 12:03:16

PyFlinkCDN日志

2014-01-22 11:22:44

華為HANA一體機(jī)FusionCube大數(shù)據(jù)分析

2019-08-19 14:24:39

數(shù)據(jù)分析Spark操作

2016-11-09 15:23:44

2024-06-06 08:58:08

大數(shù)據(jù)SQLAPI

2024-06-04 14:10:00

FlinkSQL窗口大數(shù)據(jù)

2024-01-09 16:02:11

數(shù)據(jù)庫(kù)流服務(wù)大數(shù)據(jù)

2013-01-21 09:31:22

大數(shù)據(jù)分析大數(shù)據(jù)實(shí)時(shí)分析云計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)