國科大大數據課程複習筆記(1)

個人複習筆記Mark,圖片內容大多來自老師提供ppt,感謝大數據課的陳老師、孫老師的辛苦授課~

目錄

1 大數據背景與趨勢

1.1 計算機硬件的發展

1.2 數據管理系統的發展

1.3 大數據的挑戰

1.4 大數據管理系統

2 關係型數據管理系統

2.1 關係型數據模型

(1)Table/Relation (表)

(2)Key(鍵)

2.2 關係型運算 & SQL語言

2.3 數據庫系統架構

(1)概述

(2)RDBMS系統架構(單機)

2.4 數據存儲與訪問

2.5 運算的實現

(1)Operator tree

(2)Selection & Projection

(3)Join(三種思路)

2.6 事務處理

(1)事務(Transaction)

(2)ACID:DBMS保證事務的ACID性質

(3)Concurrency Control (併發控制)

(4)Crash Recovery (崩潰恢復)

2.7 數據倉庫

(1)OLAP

(2)行式與列式數據庫

2.8 分佈式數據庫

(1)系統架構

(2)分佈式事務處理:事務讀寫的數據分佈在不同機器上,代價昂貴


1 大數據背景與趨勢

1.1 計算機硬件的發展

        晶體管數量-摩爾定律,指數級增加

  • CPU體系結構發展
    • 2005年以前-提高主頻,功耗、散熱等限制主頻的進一步增加
    • 轉向核的增加:單核單線->多核多線->衆核
    • 多種類型的處理器:GPU/ARM/…
  • 存儲層次結構
    • 外存(硬盤、閃存)->DRAM內存->L3緩存->L2緩存->L1緩存->寄存器   =>速度快,容量低,價格高
    • 內存:容量符合摩爾定律,帶寬有一定的方法增加,訪問速度比指令執行慢100倍
    • 硬盤:容量指數級增加,性能(訪問速度慢,帶寬受限於盤片轉速,順序訪問比隨機訪問好)
    • 固態:以閃存爲存儲介質,隨機讀性能、順序讀寫性能優於機械,但隨機寫性能差

1.2 數據管理系統的發展

  • 關係型數據庫(1970-1980)
    • 第一個關係型數據庫:System R
    • 事務處理(Transaction Processing)
      • 大量併發用戶,少量隨機讀寫操作
      • 典型:銀行業務,訂票,購物等
  • 數據倉庫:讀取大量數據的分析操作 1990
  • 數據流處理、GIS、多媒體數據庫等 2000
  • 大數據 2010

1.3 大數據的挑戰

  • 三個重要概念&挑戰
    • 數據量巨大 Volume
    • 數據的產生速度、更新速度快  Velocity
    • 數據種類繁多 Variety

1.4 大數據管理系統

2 關係型數據管理系統

2.1 關係型數據模型

(1)Table/Relation (表)

  • Column 列
    • 一個屬性,有明確的數據類型
    • 必須是原子類型,不可再分,無內部結構
  • Row 行
    • 一個記錄,記錄之間無序
  • 表型瘦長,列數較少,行數成千上萬
  • 原子類型:無內部嵌套結構
    • Int,Double,Char…及Int基礎上表達類型(Date等)
  • 數學定義
  • Schema vs Instance
    • Schema:類型,只需定義一次
    • Instance:具體取值,每列具體值

(2)Key(鍵)

  • 特殊的列
  • 用處:取值唯一,唯一確定一個記錄
  • Primary Key:主鍵,唯一確定本表中的一個紀錄(例如學生信息表的ID,選課信息表中學生ID和課程ID的組合)
  • Foreign Key:外鍵,是另一個表的主鍵,唯一確定另一個表的一個記錄(例如選課信息表的學生ID和課程ID),可理解爲指針或引用

2.2 關係型運算 & SQL語言

        SQL:主流的關係型數據庫語言

  • 一般運算
    • SQL Create Table +聲明主鍵、外鍵

  • SQL Insert
    • 插入完整記錄
    • 插入特定列
  • SQL Delete

 

  • SQL Update
  • 主要關係運算
    • Selection 選擇
      • 從一個表中提取一些行
    • Projection 投影
      • 從一個表中提取一些列

=>SQL 選擇+投影

 

  • Join 連接(等值連接 Equi-join)
    • R表中的a列與S表中的b列,找到兩個表中互相匹配的記錄
  • Group by 分組統計

  • Having 在group by基礎上選擇
  • Order by 排序
    • desc (descending 減少)表示從大到小排序;asc (ascending 增加) 表示從小到大排序
  • 如何計算平均成績?

2.3 數據庫系統架構

(1)概述

  • DBMS(Database Management System)數據庫管理系統
    • RDBMS (Relational Database Management System) 關係型數據庫管理系統
    • 目前主流的三大商用系統:Oracle, Microsoft SQL Server, IBM DB2
    • 通常的系統爲典型的Client/Server

(2)RDBMS系統架構(單機)

  • 前端:思考用戶需求
    • SQL Parser:將SQL語句的程序變爲解析好的內部表達
      • 語法解析,語法檢查,表名、列名、類型檢查
    • Query Optimizer:將SQL內部表達變爲執行方案(Query Plan)
      • 產生可行的執行方案,估計其運行時間和空間代價,並在多個方案中選擇最佳
  • 後端:如何存數據、完成運算
    • Execution Engine :將執行方案轉爲SQL語句的結果
      • 根據執行方案完成相應的運算和操作,數據訪問,關係型運算的實現
    • Buffer Pool :在內存中緩存硬盤數據
    • Data storage and indexing : 在硬盤上存儲數據 & 高效訪問數據
    • Transaction management:事務管理
      • 實現ACID,進行logging寫日誌,locking加鎖,保證並行Transaction事物的正確性

2.4 數據存儲與訪問

  • 數據庫 vs 文件系統
  • 數據在硬盤上的存儲
    • 硬盤最小存儲訪問單位:一個扇區512b
      • 文件系統訪問硬盤單位:4kb
        • RDMS最小存儲單位:database page size,可設置爲1至多個文件系統的page,例如4、8、16kb
    • Page
      • 內部結構:page header,slot and tuples ->方便存儲變長的記錄,記錄超出頁面大小需要特殊處理
      • Tuple結構

<center>tuple長度 |變長的列的起始地址 |定長的列的內容 |變長的列的內容

<center>eg:

 

  • 索引
    • 數據的順序訪問:順序讀取表的每個page->順序訪問page的每個tuple->檢查條件成立與否->成立的讀取對應內容
    • 有選擇性的訪問:使用索引index
      • Tree based index:有序,支持點查詢和範圍查詢
      • Hash based index:無序,只支持點查詢
    • 鏈式哈希表 Chained Hash Table
      • H(hey) % size (H是對key位運算產生一個整數,size是hash表中header數組的元素個數)
      • 在硬盤上存儲時,bucket =page
    • B+樹

 

  • 葉子節點

 

 

  • 內部節點

 

  • Search

 

  • Insertion

 

  • Deletion
  • Range Scan
  • Clustered index(主索引)與 Secondary index(二級索引)
  • Clustered: 記錄就存在index中,記錄順序就是index順序
  • Secondary: 記錄順序不是index順序,index中存儲page ID 和in-page tuple slot ID
  •  
  • 比較順序訪問&二級索引訪問
    • 順序訪問:需要處理每一個記錄,順序讀每一個page
    • 二級索引訪問:有選擇的處理記錄,隨機讀相關的page
    • 如何選擇:由選中多大比例的記錄決定,根據預測的selectivity、硬盤順序讀和隨機讀的性能,估算兩種方式的執行時間,最終選時間小的方案->query optimizer的一個任務
  • Buffer Pool:用於提高性能,減少I/O

  • 數據訪問局部性
    • 時間局部性:同一個數據元素可能會在一段時間內多次被訪問 ->Buffer pool
    • 空間局部性:位置相近的數據元素可能會被一起訪問 ->Page爲單位讀寫
  • 組成
    • 內存空間分成page大小的單元->frame,每個frame可以緩衝硬盤中的一個page
    • 如果一個page在緩衝池中,可直接訪問,節省了i/o操作;不在則找到一個可用的frame,讀取page後放入
  • Replacement 替換
    • 如果沒有空閒frame,需要找到一個已緩存的page(victim page)替換掉;如果page被修改,需要寫回硬盤
    • 如何選擇victim?->替換策略
    •                                                    

          常見替換策略:

        

    • LRU
      • 實現方法1:Buffer Head記錄訪問時間戳,令時間戳最早的頁爲victim ->問題:替換操作O(N)
      • 實現方法2:當一頁被訪問時,將其移動到最前端,令最後一個page爲victim ->代價O(1),但存在修改隊列和代價和多線程共享隊頭的問題
      • Clock算法
      • 數據結構:Buffer Head記錄R,取值爲01
      • 訪問一個頁時,令R=1;替換時,順時針旋轉查看下一頁,如果R爲1則令R=0並繼續旋轉,如果R爲0則選中爲victim

 

                                                        

2.5 運算的實現

(1)Operator tree

 

(2)Selection & Projection

(3)Join(三種思路)

  • Nested loop
    • 最早

 

  • Block Nested Loop

  • Index Nested Loop

  • Hashing
    • Simple hash join:讀R建立哈希表,讀S訪問表找到所有的匹配
    • 如果R比內存大->I/O partitioning,將R和S劃分爲小塊,
      • PartitionID = hash(join key) % PartitionNumber
        • Rj中記錄的匹配只存在於相應的Sj中
    • Grace hash join:對R和S進行I/O partitioning,對於每個Partition進行simple hash join

  • Sorting
    • 思路:將R按照R.a順序排序,S按照S.b順序排序,可Merge找出所有匹配

                             

 

2.6 事務處理

大量併發用戶,少量隨機讀寫操作

(1)事務(Transaction)

             一個事務可能包含多個操作(select、insert等),事務中的所有操作滿足ACID性質

             表現形式:一般每個SQL語句被認爲是一個事務,或者引入特殊語句(begin transaction等)則爲一組語句

(2)ACID:DBMS保證事務的ACID性質

  • Atomicity(原子性):要麼完全執行,要麼完全沒執行
  • Consistency(一致性):從一個正確狀態轉換到另一個正確狀態
  • Isolation(隔離性):每個事務與其它併發事務互不影響
  • Durability(持久性):Transaction commit後,結果持久有效,crash也不消失

(3)Concurrency Control (併發控制)

  • 數據競爭:不同的執行順序會導致不同的結果->寫讀:讀髒結果

                                                                                   讀寫:不可重複讀

                                                                                   寫寫:更新丟失

  • 如何判斷一組事務正確執行?->Serializable(可串行化),判斷一組並行Transactions是否正確執行的標準

  • 解決方案:採用機制保證數據競爭不會出現或提交前檢查存在數據競爭與否
    • 加鎖:2 Phase Locking 兩階段加鎖->有一個集中的加鎖階段和一個集中的解鎖階段

                            讀寫的鎖不同

                                     鎖的粒度不同

                                        死鎖

                                            重要條件:循環等待,多個事務相互等待

                                            處理:1->死鎖避免:人爲規定順序,對數據庫系統不適用

                                                       2->死鎖檢測:週期性檢測,存在則選一個殺掉

 

  • 不採用加鎖:分爲讀、驗證、寫三個階段。決定提交時,檢查是否有衝突,存在則終止事務,清空私有工作區;不存在則驗證通過
  • 優點:衝突較少時沒有加鎖的開銷
  • 缺點:衝突很多時,需要不斷重試,浪費大量資源,甚至無法前進
  • Snapshot Isolation 快照 : 提交時檢查衝突,有則回到上一個快照

                                    在某些情況下,並不是可串行化的

(4)Crash Recovery (崩潰恢復)

  • Transaction commit後,結果持久有效,crash不消失
  • 解決方案->WAL (Write Ahead Logging)
    • 事務日誌記錄(記錄寫操作)、commit日誌記錄(提交操作)、abort日誌記錄(回滾操作)->日誌記錄按LSN順序被追加到日誌文件末尾
    • Write-Ahead:總是先寫日誌,再去做實際操作
    • 如何保證持久度Durability:條件爲日誌是持久的,可根據日誌確定所有操作
    •  如何實現?保證日誌記錄先於修改後的數據出現在硬盤上

 

  • Checkpoint(檢查點):使崩潰時間可控,內容包括
    • 當前活動的事務表:包括事務的最新日誌的LSN
    • 當前髒頁表:每個頁最早的尚未寫回硬盤的LSN
    • Log Truncation:如果LSN之前的所有日誌記錄都不需要了,那麼就可以刪除LSN之前的Log
  • Crash Recovery:分析階段->Redo階段(將系統恢復到未崩潰前)->Undo階段(清除未提交事務的修改)

2.7 數據倉庫

讀取大量數據的分析操作

(1)OLAP

         Online Analytical Processing(聯機分析處理),在數據倉庫的基礎上實現的

  • 基本數據模型:多維矩陣->data cube
  • 基本操作:roll up(date to week)、drill down(week to date)、slice(choose x month)、dice(choose many months)

(2)行式與列式數據庫

  • 行式數據存儲:每個記錄中把所有的列相鄰地存放
    • 優點:多個列的值,可以一次I/O都得到;適合於OLTP,同時需要讀寫同一個記錄的多個列的值
    • 缺點:對於數據分析操作,只使用少數列
  • 列式數據存儲:每個列產生一個文件,存儲所有記錄中該列的值
    • 優點:降低讀的數據量;每個文件存儲相同數據類型的值,具有更高壓縮比
    • 缺點:對於調用多個列的情況下的拼裝代價很大

2.8 分佈式數據庫

(1)系統架構

  • 三種類型
    • Shared memory 共享內存:多芯片、多核
    • Shared disk 共享硬盤:多機連接相同的數據存儲設備
    • Shared nothing :由以太網連接多臺服務器,機羣系統

  • 關鍵技術
    • Partitioning(劃分):把數據分佈在多臺服務器上,通常採用Horizontal partitioning(把不同的記錄分佈在不同的服務器上)
      • Hash partitioning: machine ID = hash(key) % MachineNumber->哈希隨機
      • Range partitioning:每臺服務器負責一個key的區間,有序劃分不重疊

                     Join操作的並行執行:

  • 若partition key就是join key,可以並行執行,每臺機器單機join
  • 不是,則需要在Join key上進行分佈式partitioning,然後再join
  • Replication(備份):爲了提高可靠性

(2)分佈式事務處理:事務讀寫的數據分佈在不同機器上,代價昂貴

  • 2 Phase Commit
    • Participant: 完成分佈式事務的部分讀寫操作;Coordinator: 協調分佈式事務的進行
    • phase 1 (voting):Coordinator向每個participant發送是否提交事務的詢問消息,每個participant根據本地情況回答yes 或 no,只要有一個No,整個就不能提交
    • phase 2 (completion):1.當所有的回答都是yes, 事務提交,Coordinator向每個participant發送commit消息。Participant 回答acknowledgment,當至少一個的回答是no, transaction 將abort,coordinator向每個participant發送abort消息,Participant 回答acknowledgment
  • 崩潰恢復

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章