中南大学软件学院大型数据库考试复习手册
- 大型数据库的概念
大型数据库显然没有官方的标准定义,
一个包含大量元组(数据库行)的数据库,或者占用非常大的物理文件系统存储空间。占磁存储在TB的范围内,并且包含数十亿表行。(ppt中的百度翻译) - SQL和NoSQL数据库的区别及特点
SQL和NoSQL的区别:SQL是结构化查询语言,NoSQL是半结构化的查询语言。SQL数据存在特定结构的表中,而NoSQL的则更加灵活和可扩展,存储方式可以是Json,哈希表或者其他方式。在SQL总,必须定义好表和字段结构后才能添加数据。而在NoSQ,数据可以在任何时候任何地方添加,不需要先定义表。SQL中可以使用JOIN表链接方式将多个关系数据表中的数据用一条简单的查询语句查询出来。NoSQL暂未提供类似JOIN的查询方式对多个数据集中的数据做查询。所以大部分NoSQL使用非规范化的数据存储方式存储数据。在查询性能方面,NoSQL要优于SQL。
SQL:
- 优势
a) 保持数据的一致性(事务处理)
b) 由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)
c) 可以进行join等复杂查询
其中能保持数据的一致性是关系型数据库的最大优势 - 不足
a) 大量数据的写入处理
b) 为有数据更新的表做索引或表结构(Schema)变更
c) 字段不固定时应用
d) 对简单查询需要快速返回结果的处理
NoSQL: - 优势
a)易扩展
b)大数据量,高性能
c)灵活的数据模型
d)高可用 - 缺点
a)不支持对SQL的支持
b)支持的特性不够丰富
c)现有产品的不够成熟
- 优势
- 常见的SQL数据库和NoSQL数据库
SQL数据库:SQLServer、MySQL、Oracle…
NoSQL数据库:HBase,MongoDB,Redis… - 数据库系统的性能优化
- 应用层面的优化
应用响应请求的瓶颈在于缓慢的查询、CPU饱和、网络延时和文件I/O,不要把性能方面的问题都归咎到数据库身上。检查是否使用了连接池、缓存、是否执行了太多的查询,是否在毫无必要的时候连接了数据库,连接数据库的次数是不是太多… - 数据库设计与配置优化
Schema与Index
优化设计不良或者索引不佳的schema,能把性能提高几个数量级
schema的优化和索引既需要大局观,有需要专注细节
优化通常需要权衡取舍。 - 操作系统和硬件优化
- 最弱的部分决定了性能,操作系统和硬件通常也会成为限制因素(如CPU饱和内存不够、I/O饱和)
- 架构的优化
- 构建大型、高性能的应用程序
- 分散式数据库架构
- 集中式数据库架构
- 分布式数据库架构
- 应用层面的优化
- LJ:服务器发展架构案例
LJ原来的服务器架构(Master-Slave)存在的问题是写操作被大量分发,每台机器都要执行。服务器越多,浪费就越大,随着写操作的增加,用于服务读操作的资源越来越少。在每一台服务器上对所有的数据进行备份是对资源的浪费,属于冗余极端过度。
最终架构方案:
a)采用用户分组——把不同用户的数据分布到不用的服务器上进行存储,以实现数据的分布式存储让每台机器只为相对固定的用户服务,以实现平行的架构和良好的可扩展性。注意,在数据库组内不要使用自增ID,迁移数据库组之间的用户时不能有写操作。
b)Master-Master架构模式。该模式实际上是人工实现的,并不是有MySQL直接提供的,实际上也就是两台机器同时是Master,也同时是Slave,互相同步。 - 阿里数据库进化历程,去ioe化(什么是去ioe,为什么要去ioe)
I:就是以IBM为代表的高价小型机(服务器);O:就是以Oracle为达标的集中式数据库(数据库);E:就是以EMC为代表的高端存储设备(存储设备)。所谓去IOE化就是废弃使用IOE服务。
去IOE化的原因:垂直扩展走到了极限、集中式,稳定性的挑战。闭源的Oracle,封闭的小机/存储。——阿里PDF文档给出的解释 - Oracle数据库基础及体系架构
体系架构组件图,数据库文件,控制文件,重做日志文件
Oracle由实例和数据库组成… - Oracle的重要进程有什么
PMON 进程监控
SMON 系统监控
DBWR 数据写进程
LGWR 日志写进程
CKPT 检查点进程 - Oracle实例是什么?
Oracle实例是指数据库启动时初始化的一组进程和内存结构。 - Oracle的基本操作(添加表空间,用户授权等基本操作)
添加表空间:
create tablespace user_data
logging
datafile ‘absolute path’
size 50m
autoextend on
next 50 maxsize 20480m
extent management local;
//临时表空间如下
create temporary tablespace user_temp
tempfile ‘absolute path’
size 50m
autoextend on
next 50 maxsize 20480m
extent management local;
用户授权:
//创建用户并指定表空间
create user username identified by userpass
default tablespace userdata
temporary tablespace user_temp
//给用户授权
grant connet,dba to username; 重做和在线重做日志,归档日志文件的原理
Oracle引入重做日志的目的:数据库的恢复。当数据库自动对原来的日志文件进行备份的话就叫归档模式,不需要对数据库进行自动备份就叫非归档模式。归档日志文件是指对处于非活动INACTIVE状态的重做日志文件的备份。PL/SQL的优点
a)PL/SQL是Oracle在标准SQL语言上的过程性扩张,允许嵌入SQL语句,允许定义常量和变量,允许过程语言结果,允许使用异常处理Oracle错误。
b)Pl/SQL能提高程序的运行性能,将PL/SQL块内嵌到应用程序中,最大优点可以降低网络开销,提高应用程序的性能。
c)PL/SQL提供模块化的程序设计功能,假话应用程序的开发和维护工作,可以将企业规则和商业逻辑继承到PL/SQL程序中,包括存储过程,函数等,然后在应用程序中调用相关的功能。
d)具有过程语言控制机制,允许使用条件分支语句和循环语句。
e)具有良好的兼容行,Oracle运行的任何凭条都可以使用PL/SQL块。PLSQL编程
循环控制(1+2+..+1000中偶数的和)
set serveroutput on;
declare
result number:=0;
count number:=0;
BEGIN
while count<=1000 LOOP
IF MOD(count,2)=0 THEN
result:=result+count;
END IF;
END LOOP;
dbms_output.put_line(‘The answer is :’||result);
END;
定义表结构,对表进行操作
create table test(
id int primary key not null,
name varchar(20)
)
//PLSQL对表的操作?
复合数据类型(type)
Type typename is record(
//声明变量,与declare块大致相同
)
variable 表名%rowtype;//记录类型与表行相同
variable 表名.列名%type;//记录类型与表列相同
type variable is table of 表名%rowtype;游标(定义、特点)
游标在PL/SQL的编程中非常的重要。其定义为:用游标来指代一个DML SQL操作返回的结果集。即当一个对数据库的查询操作返回一组结果集时,用游标标注这组结果集,以后通过对游标的操作来获取结果集中的数据信息。
定义游标的语法结果如下:
cursor cursorname is SQL语句;
当需要操作该结果集时,必须完成散步:打开游标、使用fetch语句将游标里的数据取出、关闭游标。
declare
/定义游标/
cursor c_student is select name,sex from students;
begin
open c_students;
loop
fetch c_students into variable exit when c_students%notfound;
end loop
close c_students;
end
循环控制
//loop循环
loop [s]
…
exit [s]
when condition
end loop;
//while 循环
while condition loop [label name]
statement
end loop [label name]
//for 循环
for index_name in [reverse] lower..upper loop
statement
end loop
条件控制if condition then statement; else statement; end if;
过程和函数
PL/SQL中的过程和函数与其他语言的过程和函数的概念一样,都是为了执行一定的任务而组合在一起的语句。过程无返回值,函数有返回值。存储过程编译后存储在数据库中。
//过程:
create or replace procedure procname(a in number, x out varchar2) as|is PL/SQL语句块
//函数
create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块
异常处理
对于用户自定义的异常,只需要raise exceptionname程序便会转移到exception块执行,在此块中根据异常名称即可进行异常处理。trigger:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE|AFTER} triggering_event ON table_name
[FOR EACH ROW]
[WHEN condition]
DECLARE
Declaration statements
BEGIN
Executable statements
EXCEPTION
Exception-handling statements
END;什么是内存数据库,它的优势?
内存数据库,即将数据放在内存中直接操作的数据库。相对于磁盘,内存数据库读写速度要高出好几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用性能。它的优势是:极快的响应速度和极高的处理能力。它是针对物理内存而特别设计优化的数据库。- 分布式数据库的优缺点?(答案来自百度知道)
优点:
- 更适合分布式的管理与控制
- 具有灵活的体系结构
- 系统经济,可靠性高,可用性好。
- 在一定条件下响应速度加快。
- 可扩展性好,易于继承现有系统,也易于扩充。
缺点: - 通信开销较大,故障率高。
- 数据的存取结构复杂。
- 数据的安全性和保密性较难控制。
- DML DDL DCL
DML(data manipulation language):
它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。
DDL(data definition language):
DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。
DCL(数据控制语言):
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有
Commit,Rollback,Savepoint - 存储过程和函数的区别
不同点:存储过程和函数在定义的时候两者所用的关键词不一样。存储过程是procedure,而函数是function。同时,函数值可以有一个返回值而存储过程允许返回多个值。函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。函数的限制比较多,比如不能用临时表,只能用表变量。存储过程的限制相对少很多。 - LJ事例架构
参见第五点
ps:从本地导入的md文档到CSDN这里样式就变了…是规则不匹配吗?