星狀綱要的圖形表示
+--------------+
| 顧客維度表 |
+--------------+
|
|
|
+-----------------------+
| 購買事實表 |
+-----------------------+
| TransactionID |
| CustomerID |
| BookID |
| PurchaseDate |
| Quantity |
| Price |
+-----------------------+
|
|
+---------------+
| 書籍維度表 |
+---------------+
|
|
+---------------+
| 時間維度表 |
+---------------+
以欄為主(Column-Oriented)的資料儲存方式
資料倉儲系統常使用以欄為主的資料儲存方式,這意味著每個欄位的數據會按欄存儲,而不是按行存儲。以下是例子說明:
資料存儲示例
**購買事實表(Purchase Fact Table)**中的部分資料:
TransactionID | CustomerID | BookID | PurchaseDate | Quantity | Price
-----------------------------------------------------------------------
1 | 101 | 1001 | 2020-01-01 | 1 | 19.99
2 | 102 | 1002 | 2020-01-02 | 2 | 39.98
3 | 103 | 1003 | 2020-01-03 | 1 | 29.99
如果按欄存儲,資料將按如下方式存儲在硬碟中:
TransactionID Column: [1, 2, 3]
CustomerID Column: [101, 102, 103]
BookID Column: [1001, 1002, 1003]
PurchaseDate Column: [2020-01-01, 2020-01-02, 2020-01-03]
Quantity Column: [1, 2, 1]
Price Column: [19.99, 39.98, 29.99]
以欄為主的儲存方式的主要優點
-
提高查詢性能:
- 針對特定欄位的查詢效率更高。因為資料按欄存儲,僅需要讀取相關欄位的數據,而不是整行數據。這對於需要讀取大量資料但僅涉及少量欄位的查詢非常有利。
-
更高的壓縮率:
- 由於相同欄位的數據通常具有相似的特性,按欄存儲的數據更易於壓縮。這不僅節省了存儲空間,還能進一步提高讀取性能,因為壓縮後的數據量更小。
-
優化 I/O 操作:
- 針對列的查詢只需讀取相關的列,減少了不必要的 I/O 操作。這對於需要處理大數據集的分析型查詢特別有效。
-
適合聚合操作:
- 許多分析查詢涉及聚合操作(如 SUM、AVG 等),這些操作可以直接在列數據上進行,避免了行數據的重組,從而加快了聚合計算的速度。
總結
設計星狀綱要時,我們將事實表和多個維度表組合起來,以提供結構化的數據分析基礎。利用以欄為主的儲存方式,我們可以顯著提高查詢性能、壓縮效率和 I/O 操作的效益,這對於處理大規模數據和進行高效的數據分析非常重要。