001 关系型
基于ACID模型
例如:Oracle,MySQL,DB2,sybase,Microsoft SQL Server、Microsoft Access
002 非关系型
nosql
无ACID的特性,基于CAP模型
快插入数据
结构化数据
键值对数据
例如:Memcache,redis,mogodb
003 两者的区别
数据库类型 | 数据结构 | 可拓展性 | 数据一致性 |
---|---|---|---|
关系型 | 基础类型,固定的表结构,DDL语句,不容易拓展 | 横向拓展难,不好分配;join这样的多表查询机制的限制,水平拓展或跨水平分配需要拓展,都在应用层和数据库层中间多一层中间层做数据处理 | ACID,高的一致性要求,OLTP场景偏向 |
非关系型 | 多存储机制,基于文档,K_V键值对,基于图等,无固定数据格式存储表结构,方便拓展,适用经常变动,不固定的数据 | 支持数据的水平扩展(比如mongodb的sharding机制) | CAP,OLAP偏向场景 |
数据库类型 | 数据存储 | 易用性 | 读写实时 |
---|---|---|---|
关系 | 存储硬盘 | 复杂的查询 | 插入一条数据之后立刻查询,是肯定可以读出这条数据的 |
非关系 | 存储内存 | 开源,简单部署,简单的查询语句 | web应用来说,并不要求这么高的实时性,比如发一条消息之后,过几秒乃至十几秒之后才看到这条动态是完全可以接受的 |
004 举例子
事务一致性,读写操作,ACID特点,关系型数据库,例如银行系统
网页应用,SNS应用,一致性不那么重要,更新不一致可以容忍,更新时间差可容忍,使用的是提高一级Memcache静态化网页,变化太快,需要更新一种数据结构存储代替关系数据库
005 ACID
数据库事务必须具备ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性。
006 关系型数据库的瓶颈
数据库类型 | 高并发读写 | 海量数据的高效率读写 | 高扩展性和可用性 |
---|---|---|---|
传统数据库 | 网站的用户并发性非常高,往往达到每秒上万次读写请求,硬盘I/O是一个很大的瓶颈 | 每天产生的数据量是巨大的,海量表中查询效率低 | 基于web的结构当中,数据库是最难进行横向扩展的,添加硬件和服务节点拓展性能和负载,升级和拓展痛苦,需要的停机维护和数据迁移 |
007 SQL数据库使用预定义优化方式(比如列索引定义)帮助加速查询操作,而NoSQL数据库采用更简单而精确的数据访问模式。
关系型数据库使用CRUD等操作
008 拓展横向与纵向拓展
要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。
NoSQL数据库是横向扩展的。非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
010 OLAP & OLTP
OLTP 联机事务处理OLTP(on-line transaction processing)
OLAP 联机分析处理OLAP(On-Line Analytical Processing)
OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。
OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,强调绑定变量,强调并发操作;
OLAP 系统则强调数据分析,强调SQL执行市场,强调磁盘I/O,强调分区等。
单个数据库每秒处理的Transaction往往超过几百个,或者是几千个,Select 语句的执行量每秒几千甚至几万个。典型的OLTP系统有电子商务系统、银行、证券等,如美国eBay的业务数据库,就是很典型的OLTP数据库。
OLTP系统最容易出现瓶颈的地方就是CPU与磁盘子系统。
(1)CPU出现瓶颈常表现在逻辑读总量与计算性函数或者是过程上,
(2)磁盘子系统在OLTP环境中,它的承载能力一般取决于它的IOPS处理能力.
OLTP比较常用的设计与优化方式为Cache技术与B-tree索引技术
因为并发量很高,批量更新时要分批快速提交,以避免阻塞的发生。
对于热数据块来说,应尽可能让数据块保存在内存当中,对于SQL来说,尽可能使用变量绑定技术来达到SQL重用,减少物理I/O 和重复的SQL 解析,从而极大的改善数据库的性能。
在OLAP系统中,常使用分区技术、并行技术
磁盘子系统的吞吐量则往往取决于磁盘的个数,
对于OLAP系统来说,绝大多数时候数据库上运行着的是报表作业,执行基本上是聚合类的SQL 操作,比如group by,这时候,把优化器模式设置为all_rows是恰当的。 而对于一些分页操作比较多的网站类数据库,设置为first_rows会更好一些。 但有时候对于OLAP 系统,我们又有分页的情况下,我们可以考虑在每条SQL 中用hint。
011DDL DML
DDL statements are used to define the database structure or schema.
DDL不需要commit.
CREATE
ALTER
DROP
TRUNCATE
COMMENT
RENAME
DML statements are used for managing data within schema objects.
需要commit.
SELECT
INSERT
UPDATE
DELETE
MERGE
CALL
EXPLAIN PLAN
LOCK TABLE
DCL(Data Control Language)数据库控制语言 授权,角色控制等
GRANT 授权
REVOKE 取消授权
TCL(Transaction Control Language)事务控制语言
SAVEPOINT 设置保存点
ROLLBACK 回滚
SET TRANSACTION