資料倉儲
如何建立一個可供快速分析的資料庫。
文本於此
複習一下
- 索引,根據鍵快速找到值
- 犧牲少量寫入,提升特定讀取
但是…
- 一月份收入總額?
- 今年成功應徵的人數?
- 哪種職類最多人應徵?
異動和分析
- 線上異動處理(OnLine Transaction Processing,OLTP)
- 線上分析處理(OnLine Analytic Processing,OLAP)
屬性 |
線上異動處理 |
線上分析處理 |
讀取 |
小量資料 |
聚合大量資料 |
寫入 |
低潛時,隨機寫入 |
一次性大量寫入,或透過事件流入 |
用於 |
線上使用者 |
後台分析 |
代表 |
最新狀態 |
事件的歷史紀錄 |
大小 |
GB~TB |
TB~PB |
注重於 |
磁碟中找尋的速度(seek time) |
磁碟中的頻寬(bandwidth) |
磁碟和記憶體
飲水機 |
保溫瓶 |
 |
 |
function decoder(fileName) {
const content = readFile(fileName);
return JSON.parse(content);
}
效能
單位 |
Latency |
第一層快取 |
1 ns |
第二層快取 |
4 ns |
第三層快取 |
40 ns ↑ |
主記憶體(DDR) |
80 ns ↑ |
讀取磁碟 |
80 us ↑ |
Intel - Memory Performance in a Nutshell
概圖

資料倉儲
Data Warehouse
針對線上分析處理而去設計的資料庫。
角色
資料怎麼來
Extract–Transform–Load,ETL
- 萃取
- 定時(periodic data dump)
- 串流(continuous stream of updates)
- 變換
- 載入

有哪些產品
Google [Dremel] 為基礎。
Vendor |
Open Source |
[Teradata] |
[Apache Hive] |
[Vertica] |
[Apache Spark] |
SAP [HANA] |
[Apache Impala] |
[ParAccel] |
[Presto] |
[AWS RedShift] |
[Apache Drill] |
複習
- 資料倉儲,用於 OLAP
- 整合線上資料庫
- 加速搜尋遍歷的資料
- 透過 ETL 得到資料
實作細節
星狀綱目

雪花綱目

比較
大部分都使用星狀綱目:
在假日購買水果的人數


壓縮
很多事件(列,row),很少種類(ID)
產品 |
訂單 1 |
訂單 2 |
訂單 3 |
… |
1 |
1 |
0 |
1 |
… |
2 |
0 |
1 |
0 |
… |
3 |
0 |
0 |
0 |
… |
… |
- |
- |
- |
… |
搜尋
WHERE product_sk IN (30, 68, 69)
WHERE product_sk = 31 AND store_sk = 3
[The Design and Implementation of Modern Column-Oriented Database Systems. Ct4-2][tdaiomcords]
CISC v.s. RISC
LOAD R1, A
LOAD R2, B
ADD R3, R1, R2
STORE R3, C
指令管線化

SIMD

加速

壓縮

多排序
- 列式資料庫多索引:堆積檔、群聚式索引
- 行式資料庫多排序:各行的檔案根據規則排序
暫存聚合
既然常常要聚合(aggregation),那就暫存他吧!

總結
- OLTP v.s. OLAP
- OLAP 適合什麼綱目、硬體
- 資料倉儲的實作細節
行式資料庫(column-oriented)
資料庫的存取

預告

資料倉儲 如何建立一個可供快速分析的資料庫。 文本於此 注意是分析,不是索引提到的搜尋。
{"metaMigratedAt":"2023-06-16T16:58:46.091Z","metaMigratedFrom":"YAML","title":"資料倉儲","breaks":true,"description":"如何建立一個可供快速分析的資料庫。","contributors":"[{\"id\":\"c945b58d-6d0e-4680-a2c3-b297ba669e68\",\"add\":16115,\"del\":3556}]"}