Data Lake
Data Lake 是什麼
是什麼在 ByteByteGo 上看到一張有意思的 gif 圖片,是由 Semantix 畫的 Data Pipeline (處理資料流的系統) 示意圖。
其中Data Lake (資料池) 這個名詞吸引我的注意,常看到但根本不了解。
這篇文章分享我收集與瞭解的資料。
此篇文章主要參考 Technically Substack
1 Data Lake 的定義
Data Lake是無結構化存放數據的地方 (unstructured place to put data)。
主要是為了
長期儲存數據(long term storage )
不定時的查詢數據 (infrequent querying)
2 為什麼需要 Data Lake?
3 個原因
企業正在收集比以前還要多的數據,但不會都立刻使用到
用來長期存放數據,但不需特別定義 Schema (數據結構)
閱讀數據的人更容易理解 -> 這是跟Data Warehouses(資料倉儲) 相比,因 Data Warehouses需要事先定義 Schema
3 Data Lake 使用案例
先了解公司會儲存什麼樣的數據。
主要有 2種
Structured operational data (結構化的營運數據 ): 類似一張 Excel 資料表
Unstructured data (非結構化數據) : 想像一個 Key-Value paired (鍵值配對) 的資料,例如「姓名:朱騏, 職業: Technical Writer」
前者的範例有
Users(例如登入的使用者) & Organizations (註冊的公司)
產品銷售數據、訂單數量
SaaS app 數據 (例如 DAU, MAU)
產品的發票或付款數據 (例如金額、支付方式) 特色是有定義好的 Schema 儲存資料。
後者的範例有
文字數據 (例如 Twitter 使用者的 Tweet)
Server 或 Application 的效能數據 (例如System Log)
網站點擊數、瀏覽數
產品使用的瑣碎資料 (例如電商網站上的產品備註) 特色是不需符合關聯式資料庫的結構 (ex. SQL),因為數量太龐大、產生速度太快。
那這些數據可以如何使用呢?
Case 1: 營運場景 (例如日報、月報) 數據種類: 結構化的營運數據。例如
我們有多少的使用者
這個月我們賺多少錢
我們的顧客流失率是多少
Case 2: 專案場景(例如Machine Learning 專案、即時使用者觀察) 數據種類: 非結構化數據。例如Twitter 上的What's happening 動態牆,可即時顯示近幾個小時的熱門 Tweet。
4 Data Lake 和Data Warehouses 的差別
主要差異是
Data Warehouses: 適合存放結構化數據、經常性要使用的數據
Data Lake: 適合存放非結構化數據、為特殊目的使用
可以從下方 2 個點切入比較
Schema on write vs. Schema on read (寫入的數據結構 vs 讀取的數據結構)
Regular reporting vs. Special projects (經常性報告 vs 特殊專案)
Schema on write vs. Schema on read
Data Warehouses
必須先定義數據結構 (Data schema)
例如要追蹤使用者資訊,就必須先定義「哪些使用者的資料要寫到Data Warehouses 的欄位中」。
知名產品例如有Snowflake, BigQuery
Data Lake
不需先定義數據結構,可以將任意結構的數據丟進 Data Lake
當需要讀取時,再定義「讀取」的數據結構
多數的 Data Lake 都會使用 Object(物件) 格式進行儲存,把資料當成 1 個 Object 儲存
Regular reporting vs. Special projects
那如何決定要使用Data Lake 或 Data Warehouses呢? 看使用情境。
例如
考量速度: 想像在整理日報時,今天寫的 query 和昨天寫的 query 會有 90 % 相似,因此使用結構化數據會比較好。
考量成本: 如果是要為了特定專案 (例如產品推薦系統),事前定義詳細結構反而會太花時間,因此可使用非結構化數據。
難道一定要 2 選 1 嗎 ?
多數公司會選擇兩者併用,重點是「如何有效率地同時使用這兩個工具」。在 SaaS 產業中,許多新創公司會先從 Data Warehouses 開始,接著再投資 Data Lake 來收集非結構化的資料。
5 Data Lake 實際產品有哪些
多數是「雲服務提供商 (Cloud service provider)」的原生物件存儲產品 (native object storage products)。例如 AWS: S3 (Simple Storage Service) 服務中,有方便的 Lake Formation 可以快速建立 Data Lake。
另一個有名的是 Hadoop Filesystem(HDFS),它是一個「跨伺服器、可設定分散式檔案系統」的框架,可用來儲存非結構性的數據。
Last updated