成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

億級數據分析性能殺手锏 - 列式存儲

存儲 存儲軟件
我們的用戶不會那么輕易的放過“折磨”我們 IT 工程師的機會,就僅僅圍繞月份來做統計,可能還會加上,產品類型,地區等等維度。這樣一來,就更加麻煩了,眼珠子恨不得貼到屏幕上,一分一秒的看著時間的流逝,可惜了青春啊~

看似非常簡單的一條 SQL,如下圖,我們求解的無非就是月總銷售量

  • SELECT  OrderMonth, SUM( OrderAmount) AS Amount
  • FROM FctOrderSales WITH(NOLOCK)
  • WHERE OrderMonth BETWEEN '2017-01-01' AND '2018-12-31'
  • GROUP BY OrderMonth 

一旦 FctOrderSales 的數據量增長,恐怕不等個半把個小時,是出不來的。

再加上,我們的用戶不會那么輕易的放過“折磨”我們 IT 工程師的機會,就僅僅圍繞月份來做統計,可能還會加上,產品類型,地區等等維度。這樣一來,就更加麻煩了,眼珠子恨不得貼到屏幕上,一分一秒的看著時間的流逝,可惜了青春啊~

[[226442]]

事實上,大家肯定會出一定的方案來解決這種效率奇慢的查詢,比如:

1 加個索引

2 加個分區

3 ETL 先算好聚合數據

4 。。。

解決方案總是有的。在這里我們來看看另一種玩法,列式存儲。

上圖中,表格中的數據,就是典型的row-based data page 行式存儲數據頁。一行相鄰一行的存儲在一個數據頁上,一列肩并著一列存儲在一行上。而 Columnar Storage Layout 就是列式存儲, 每一個列的數據都被存在一個數據文件中,比如date_key 按照順序存儲在 date_key file 中,Product_sk 也一樣,按照二維表中的順序,存儲在 product_sk 文件中。每個列式存儲文件中,對應行號上存儲的數據,都是表結構中相應行號的列數據。即要獲取原表結構中,第20行的數據,那么要分別從這些列式存儲的文件中,取得各自的第20行數據,集合起來!

考慮以下場景,比如我們就要分析 2013年,每個月,某兩個品種,69,31 的銷量:

SELECT 

    getMonth(date_Key) AS Month

  • getProductName(product_sk) AS Product
  •  SUM(quantity) AS Quantity

FROM FctSalesOrdinary

GROUP BY getMonth(date_Key), getProductName(product_sk)

在這里,讓我們做出這些假設:

1 date_key是存在一個數據文件里面的,product_sk 是存在另一個數據文件里面的。2013年整年的銷售數據有 200W 條,每個文件的段能存儲100W,(按照 SQL Server 的存儲容量來計算),這樣就總共抓取 2個段, 按照每次讀取一個segment的機制,連續讀取 2個連續段就只有一次讀取,因此磁頭讀取不需要再次尋址。

2 假設2013年***條數據在源數據表中,是第100萬條數據,2013年***一條數據是第299萬條數據。

按照上面的圖解釋,我們讀取2013年數據的時候,讀取product_sk的字段,即讀取 第100萬條數據到 299萬條數據,然后根據product_sk做限制。比起row-based data page(行式存儲數據頁),其他字段store,promotion,customer字段統統舍去,少讀了很多的無效數據。

列式存儲還帶有一個壓縮的選項。因為每個列式存儲文件都是存儲的同質數據,那么對這些同質數據進行壓縮,會有很好的壓縮效率。壓縮帶來的好處是,減少了吞吐量,使得內存容下了更多的數據,并且還可以有效使用 CPU L1 Cache, 這種技術稱為 vectorized processing.

 *參考The Design and Implementation of Modern Column-Oriented Database systems.

為什么列式存儲更適合分析性數據倉庫:

1. 分析決定了一定是讀取大范圍連續屬性的數據。不是隨機讀,而是順序讀,速度快很多

2. 請求基本上是采取多個維度同時讀的方式,而不會讀取所有的列。這樣很多row-based data page (行式存儲數據頁)都會舍去不必要的相鄰列的數據。

3. 列式存儲的機制:一個數據文件中單獨存儲的是整個列的數據,按照segment來分段,一次至少讀取一個段。一個段中可以存儲大量的同質數據。

目前支持列式存儲的數據有:

  • Greenplum
  • PostgreSQL
  • MariaDB
  • Microsoft Azure SQL Data Warehouse
  • Microsoft SQL Server 2012 及以上
  • BIRT Analytics ColumnarDB
  • IBM Db2
  • Oracle Database/Exadata
  • SAP HANA
  • TeraData
  • Apache HBase
  • ClickHouse
  • Apache Parquet 

以上是我們常用的數據庫品牌,還有一些小眾數據庫,比如 MonetDB,kdb+ 等也支持。所以趁早用起來吧

責任編輯:武曉燕 來源: 有關SQL
相關推薦

2025-06-05 09:08:43

2021-06-17 13:10:47

數據分析自助式分析數據

2019-04-22 08:07:31

MySQL數據庫索引

2022-02-25 08:55:19

BitMapRedis面試題

2013-08-13 09:07:20

大數據

2022-02-10 09:04:18

RediSDS數據結構

2010-01-15 09:43:49

Windows 7殺手

2010-03-23 17:06:01

2015-06-15 14:48:21

蘋果iOS9軟實力

2019-08-29 10:46:42

2011-06-27 22:08:42

臺式機評測

2011-07-04 10:00:02

虛擬化

2014-12-01 15:20:36

微信點評商家

2015-08-11 14:38:34

2021-02-22 09:01:13

Redis宕機日志

2021-03-18 10:31:27

Redis宕機日志

2009-09-03 14:52:12

RHEL5.4發布KVM

2011-06-29 10:08:24

服務器虛擬化解決方案

2009-02-19 11:20:45

TIBCOSOA系統集成

2022-02-26 10:45:56

CSS滾動時間線動畫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产综合视频 | 成人在线一区二区 | 91在线视频一区 | 久久99久久 | 婷婷色网 | 中文字幕1区2区3区 日韩在线视频免费观看 | 少妇一区二区三区 | 在线国产视频观看 | 亚洲一区 中文字幕 | 国产一区二区三区亚洲 | 在线观看国产h | 成年人黄色一级毛片 | 免费成人国产 | 欧美精品一区在线观看 | 亚洲一区二区久久久 | 在线观看 亚洲 | 中文字幕一区二区在线观看 | 伊人99 | 男女羞羞视频在线看 | 91精品综合久久久久久五月天 | 九九久久国产 | 在线观看视频福利 | 青青操av | 欧美日韩在线成人 | 夜夜草天天草 | 日本成人中文字幕在线观看 | 日本超碰| 成人精品在线观看 | 亚洲a视| 99热精品久久| 免费看a | 午夜网 | 欧美日产国产成人免费图片 | 亚洲欧美一区二区三区视频 | 国产精品1区2区 | 国产一区中文字幕 | 中文字幕一区二区三区精彩视频 | 毛片大全 | 国产a爽一区二区久久久 | 91网在线播放 | 91亚洲精品在线观看 |