複試--關係型數據庫

大數據框架:節省創建工程時間
大數據計算框架,大數據存儲框架
負載均衡:分散到多個服務器上

Hadoop:

1.Hadoop Common:核心,對其他模塊支撐,包含對底層文件、網絡訪問、數據類型的支持,以及對象序列化反序列化操作等。
2.Hadoop Distributed File System(HDFS):分佈式文件系統,存儲大量數據。
3.Hadoop YARN:任務調度與資源管理
4.Hadoop MapReduce:基於YARN的並行大數據處理組建。

Hadoop- Hadoop MapReduce:

解決並行任務的模型,將任務分散到多個計算節點,最後合併結果。(併發計算後彙總結果)

流程:輸入文件 -> Map -> 中間結果 ->Reduce -> 結果
Map: 讀輸入文件,並構造KEY-VALUE文件
Reduce:讀中間結果,對不同的key分給不同的Reduce程序。
兩類進程:MRAppMaster,Yarnchild

運行流程:
啓動mr,啓動MRAppMster,根據任務信息,計算maptast實例數量。
啓動maptask。

關係型數據庫:

許多表組成
關係:表;
元組:行;
屬性:列;
域:屬性的可能集合

超碼:一個或多個屬性的組合,這些組合可以在一個關係中唯一標識一個元組。
候選碼:最小的超碼(去除超碼中無關信息)
主碼:被選中的候選碼
外碼:關係模式(表1)中包含關係模式(表2)的主
碼,該屬性是表1參超表2的外碼
設一個關係爲R(U),X和Y爲屬性集U上的子集,若X→Y且X不包含Y,則X→Y爲非平凡函數依賴。
平凡函數依賴:Y是X的子集,且有X→Y,一組屬性決定所有子集。(職工號,性別)→職工號”和“(職工號,性別)→性別”,因爲對於任何給定的一個元組中的職工號和性別的組合值。
函數依賴:關係中對於屬性(組)X的每一個值,屬性(組)Y只有唯一的值與之對應,則稱Y函數依賴於X,或稱X函數決定Y,記爲X→Y。
部分函數完全依賴:A→B,又有A的真子集A,有A→B,則A→B爲部分函數依賴,否則爲完全函數依賴。
非平凡函數依賴:Y不是X的子集,且有X→Y。

關係代數:

抽象的查詢語言
傳統:並、差-、交∩、笛卡兒積×
選擇:select σ
投影:project ΠA®
自然連接:join R AθB
除:同時從行和列的角度 R÷S

範式:

某一級別關係模式的集合(低級到高級過程成爲規範化)
第一範式: 屬性不可再分
第二範式:沒有部分依賴,非主屬性完全依賴域主鍵
第三範式:非主屬性不傳遞依賴主鍵

標準語言SQL:

核心功能;L:Language
(Data Definition L)定義(CREATE,DROP,ALTER)
(Query L)查詢(SELECT)
(Data Manipulation L)操作(INSERT,UPDATE,DELETE)元組
(Data Control L)控制(GRANT,REVOKE)
DDL: 三級模式模式、外模式、內模式基本對象爲:表、視圖、索引。 數據定義功能:定義表,定義視圖,定義索引,定義數據庫。

ALTER TABLE <表名>
[ADD <新列名><數據類型>[完整性約束]]
[DROP<完整性約束名><完整性約束名>]
[MODIFY<列名> <數據類型><數據類型>];

建立/刪除 索引:
CREATE [UNIQUE] INDEX 索引名 
ON 基本表名(列名[次序][,列名[次序]])
DROP INDEX <表名>.<索引名>;

QL:
將字符串轉換爲日期類型數據:CAST

[WHERE <條件表達式>]
[GROUP BY <列名1>[HAVING <條件表達式>]]
[ORDER BY <列名2>[ASC|DESC]];

CAST函數將該條件寫成
InDate>=CAST('2004-12-31'AS DateTimeIN謂詞實際上是多個OR
集函數:
COUNT([DISTINCT|ALL] *) 統計元組個數 
COUNT([DISTINCT|ALL] <列名>) 統計一列中值的個數 
SUM([DISTINCT|ALL] <列名>) 計算一列值的總和(此列必須是數值型) 
AVG([DISTINCT|ALL] <列名>) 計算一列值的平均值(此列必須是數值型) 
MAX([DISTINCT|ALL] <列名>) 求一列值中的最大值 
MIN([DISTINCT|ALL] <列名>) 求一列值中的最小值 

GROUP組進行篩選 HAVING

視圖: 邏輯表

CREATE VIEW <視圖名>[(<列名1>,<列名2>,)]
AS <查詢子句> [WITH CHECK OPTION]

WITH CHECK OPYION子句是爲了防止用戶通過視圖對數據進行增加、刪除、修改時
DCL:
併發控制:多個用戶修改
GRANT 授權

GRANT <權限> [<權限>][ON <對象類型><對象名>]
TO <用戶>[<用戶>][WITH GRANT OPTION];

WITH GRANT OPTION 還可以傳播權限
REVOKE 收回權限

REVOKE <權限>[,<權限>]... 
[ON <對象類型> <對象名>] 
FROM <用戶>[,<用戶>] ... ;
事務

事務:是滿足ACID特性的一組操作。
ACID:原子性(atomicity),一致性(consistency),隔離性(Isolation),持久性(Durability)。

四個特性不是平級關係:①只有滿足一致性,事務執行結果才正確。②無併發時,事務串行,滿足隔離性,如果滿足原子性,一定滿足一致性。③併發時,事務並行,不僅需要滿足原子性還需要滿足隔離性,才能滿足一致性。④持久性是應付數據庫崩潰。

一致性問題:①丟失數據:第二次事務修改覆蓋了第一次。②髒數據:寫後讀,讀時修改。③不可重複讀:讀後寫。④幻影讀:讀後寫,讀時插入。

封鎖

行封鎖,表封鎖。只鎖定修改的部分,鎖定的數據量越少,鎖爭用可能小越小,併發程度越高,但(獲取、釋放、檢查鎖狀態)增加系統開銷,封鎖時需要權衡鎖開銷和併發程度。

鎖類型:
排它鎖(Exclusive),X鎖,寫鎖。
共享鎖(Shared),S鎖,讀鎖。

事務對數據對象A加了 X 鎖之後,其他事務不能對A加任何鎖。(其他事務不能讀和寫)
事務對數據對象A加了 S 鎖之後,只能讀取。但其他事務也可以加S鎖,不能加X鎖。(別人都可以讀)

意向鎖(Intention Locks)。IX/IS:表級別的鎖:事務稍後會將表中某行加上X或者S鎖。
即:事務獲得某行對象的S鎖之前,必須獲得表的IS及其以上鎖。事務獲得某行對象X鎖之前,必須獲得表的IX鎖。

封鎖協議:
三級封鎖:
一級封鎖協議:事務修改數據A時加X鎖,事務結束時釋放:解決丟失修改。
二級:一級基礎上,讀取時加S鎖,讀取完釋放。防止修改時讀取,解決丟失修改和讀髒數據。
三級:二級基礎上,事務結束才釋放S,防止讀取時修改,解決丟失修改,讀髒數據以及不可重複讀。
兩段鎖:事務開始和直到ROLLBACK和COMMIT之前都是加鎖階段。

索引

數據結構:
B+:非葉子結點不保存數據,只是索引。所有數據保存在葉子結點中。並且葉子節點可以順序指針訪問。
B-:所有葉子結點位於同一層,多路平衡查找樹。
MySQL中稱索引爲鍵(KEY):
索引結構類型
(1)B+Tree索引是默認,適用於全鍵值,鍵值範圍和鍵前綴(最左前綴)。
(2)hash索引,只支持精確查找,失去有序,不能部分和範圍查找。
(3)全文索引,倒排索引,關鍵詞到文檔的映射。
(4)空間數據索引,必須使用GIS相關的函數維護。
優點:減少掃描行數。避免排序和分組需要創建的臨時表。隨機I/O變爲順序I/O,因爲B+是有序的,相鄰數據存儲在一起。 非常適合用於排序、分組、範圍搜索創建索引。
缺點:降低INSERT/UPDATE效率,可能重建索引。
優化策略:①獨立的列,不能是表達式或者函數參數。②多個列作爲條件查詢時多列索引比單列更好。③前綴索引:BLOB,TEXT,VARCHAR類型的列,指定前綴長度。④覆蓋索引:只緩存索引,數據用OS緩存。只訪問索引可以不繫統調用,省時。
使用場景:① 非常小的表,全表掃描更高效。②中大型的表,建立索引非常有效。③特大型的表:使用分區技術。 直接分區需要查詢的一組數據。

分區技術:
水平分區和垂直分區。

  • 水平分區一定要通過某個屬性列分區。
  • 垂直分區:減少表的寬度。
    分區類型:range,list,hash,key
//範圍
parition by range(屬性列){
	patition p1 values less than()//範圍A
}
parition by list(屬性列){
	patition p1 values in ()//分區依據
}
HASH分區使用的用戶定義的表達式
partition by hash(year(birthdate))
partitions 4;
KEY分區的哈希函數是由MySQL 服務器提供
partition by key(birthdate)
partitions 4;

複合分區
partition by range(salary)
subpartition by hash(year(birthdate))
subpartitions 3
(
partition p1 values less than (2000),
partition p2 values less than maxvalue
);

分解分區:
alter table [] reorganize patition p1 into{
parition p1 values than (); // 分解成A組
}
合併分區
reorganize partition p1,p3 into
(partition p1 values less than (1000));

B(B- ) , B+, AVL
平衡二叉樹物理結構上使用數組存儲的,邏輯上相鄰的結點在物理上比較遠,不符合局部性原理。
B數:有序數組+平衡多叉樹。每個結點可以以存儲多個關鍵字,磁盤讀取操作次數就會減少,樹的深度也會小。所以B樹比AVL更適合。
B+樹:有序數組鏈表+平衡多叉樹。

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