📚 章節筆記:大數據 (3.15.2) 📊
歡迎來到大數據的迷人世界!這個課題帶我們超越傳統數據庫,探討現代系統所處理的龐大資訊規模——想像一下每秒處理數十億次交易的情況。理解大數據至關重要,因為它是我們數位時代面臨的數據結構挑戰。別擔心這些概念聽起來很宏大;我們會將這種「大」拆解成簡單易懂的組成部分!
1. 定義大數據:三個 V
大數據 (Big Data) 是一個總稱,指那些規模過大、複雜度過高且變化極快,以至於無法使用傳統數據庫方法(如單一標準關聯式數據庫伺服器)進行有效儲存、管理或處理的數據集。
為了理解大數據,我們通常使用三個關鍵特徵來定義它,這就是著名的 三個 V (Three Vs) (V³):
數據量 (Volume,大到無法容納)
數據量 (Volume) 指的是數據的規模。
- 意義: 產生的數據量極其龐大——我們談論的是拍位元組 (petabytes) 和艾位元組 (exabytes) 的級別。
- 挑戰: 數據量往往 大到無法存放在單一伺服器上。
- 類比: 試想你要把整座湖的水裝進一個水杯裡,這顯然需要一套完全不同的策略!
傳輸速度 (Velocity,快到無法停止)
傳輸速度 (Velocity) 指的是數據產生及需要被處理的速度。
- 意義: 數據通常是 串流數據 (streaming data),意味著它是持續不斷湧入的(例如股市報價或社交媒體動態)。
- 響應時間要求: 處理過程必須非常迅速,通常要求在毫秒到秒級別內做出響應。
- 範例: 詐騙偵測系統必須在交易發生的瞬間即時進行分析。
數據多樣性 (Variety,多到無法製表)
數據多樣性 (Variety) 指的是數據所呈現的不同形式和結構。
- 意義: 大數據以多種格式存在:
- 結構化數據 (Structured): 能夠整齊地放入列與欄的數據(如傳統數據庫)。
- 非結構化數據 (Unstructured): 沒有預定義格式的數據(例如原始文字文件、電子郵件、社交媒體貼文)。
- 多媒體數據 (Multimedia): 影片、圖像和音訊檔案。
- 主要困難: 課程大綱指出,缺乏結構是大數據中最棘手的問題,這使得分析過程比處理整齊的結構化數據困難得多。
快速複習:3 Vs 助憶法
Volume (數據量/大小)
Velocity (傳輸速度/速度)
Variety (數據多樣性/類型與結構)
2. 為什麼傳統關聯式數據庫會力不從心?
在處理大數據時,傳統的 關聯式數據庫 (relational databases)(例如使用 SQL 的那些)通常 不再適用。
- 它們要求數據必須符合嚴格的 列與欄格式 (row-and-column format)(即結構化數據)。
- 當數據高度多樣化或非結構化時(大數據中約 90% 的情況),強行將其塞進固定的表格中既沒效率,也不切實際。
- 關聯式系統的設計初衷,並非為了處理需要分散在成百上千台伺服器上進行的作業(分散式處理)。
重點總結: 大數據的定義在於其規模、速度和雜亂無章的本質。它缺乏統一結構的特性,打破了傳統關聯式數據庫的規則。
3. 處理大數據:分散式處理
由於數據的 體積 (Volume) 太大,無法在單一伺服器上處理,解決方案是使用 分散式處理 (distributed processing)。
這意味著處理任務必須 分散到多台共同協作的機器上 同時執行。
函數式編程作為解決方案
編寫正確且高效、並能同時在多台獨立伺服器上運行的程式碼(分散式代碼)是非常困難的。在大數據環境中,我們通常偏好使用 函數式編程 (Functional Programming, FP),因為它的核心特性簡化了這一挑戰:
- 不可變數據結構 (Immutable Data Structures): 數據一旦創建就不能更改。這在分散式系統中至關重要,因為如果兩台伺服器同時讀取同一份數據,它們可以確信該數據不會被第三台伺服器突然修改。
- 無狀態 (Statelessness): 函數不依賴也不會改變任何外部的「狀態」(函數之外的數據)。這使得伺服器完成任務的先後順序變得不再重要,並能避免不可預期的副作用。
- 高階函數 (如 Map-Reduce): 這些函數對於整合多台伺服器的結果至關重要。
- Map (映射): 在各個獨立伺服器上處理數據。
- Reduce (歸約): 將所有伺服器的結果整合成單一的最終輸出。
你知道嗎? 許多大數據處理核心技術(如 Hadoop 和 Spark)都深受 Map-Reduce 原則的影響,而這正是根植於函數式編程的概念。
重點總結: 大數據必須透過分散式運算來處理,而函數式編程的概念(不可變性、無狀態、Map-Reduce)讓這項複雜任務變得可控。
4. 大數據結構模型化
因為數據無法放入傳統表格中,我們使用不同的模型來理解其結構。
基於事實的模型 (Fact-Based Model)
基於事實的模型是一種簡單的表示方式,將每一條資訊都記錄為一個 單一、不可否認的事實。
- 原則: 每一個事實只捕捉極小的一條資訊。
- 範例: 系統不使用龐大的記錄表,而是記錄三個獨立的事實:「學生 X 的出生日期是 11/03/2012」、「學生 X 是男性」、「學生 X 是 11R 班的成員」。
圖形結構模型 (Graph Schema Model)
圖形化架構模型側重於關係,非常適合用來建立複雜且相互連結的數據(如社交網絡或供應鏈)。
它使用三個組件來捕捉 數據集的結構:
- 節點 (Nodes,實體): 代表存儲數據的個體項目或實體。
- 圖形符號: 用 橢圓形 表示。
- 範例: 一位學生、一門課程、一個房間。
- 屬性 (Properties,特性): 詳細說明實體的特徵。
- 圖形符號: 繪製在 長方形 中,並透過 虛線 連接到代表實體的橢圓形上。
- 範例: 學生的名字、出生日期或性別。
- 邊緣 (Edges,關係): 代表實體之間的連接或關係。
- 圖形符號: 用連接在節點之間的 實線邊緣 表示。
- 標籤: 這些線條必須 標註文字 來描述關係的性質(例如:「參加」、「……的成員」、「由……教導」)。
圖表繪製的重要注意事項: 請務必正確使用虛線來連接屬性與實體節點,並使用實線來連接各個實體節點!
重點總結: 當關聯式表格失效時,大數據通常會使用基於事實的模型或圖形化架構(利用節點、屬性和標籤邊緣)來管理數據結構。