天天看点

复试--关系型数据库

大数据框架:节省创建工程时间

大数据计算框架,大数据存储框架

负载均衡:分散到多个服务器上

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 DateTime)

IN谓词实际上是多个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+树:有序数组链表+平衡多叉树。