数据库基本概念
数据库相关:
CAP:
分布式系统中,三个特性只能满足其中2个特性
一致性(Consistency)
分布式中一致性又分强一致性和弱一致性,强一致性是任何时刻任何节点看到的数据都是一样的,弱一致性一般实现的是最终一致性,最新的数据是一样的就行
可用性(Availability)
集群在任何时间内都正常使用
分区容错性(Partition Tolerance)
某一部分集群坏掉,另一部分仍能正常工作
二选一模型
CA模型
- 在分布式系统中不存在,因为舍弃P,意味着放弃分布式系统。比如单机版本的MySQL,如果MySQL考虑主备或集群部署时,它必须考虑P
CP模型
- 舍弃了可用性,一定会读取到最新的数据,不会读取到旧数据。一是因为消息丢失、延迟过高发生了网络分区,就影响用户的体验和业务的可用性。例如Etcd,Consul和Hbase
AP模型
- 舍弃了一致性,实现了服务的高可用。用户访问系统的时候,都能得到响应数据,不会出现响应错误,但会读到旧数据。比如Cassandra 和 DynamoDB
常见算法
- raft
- Paxos
- ZAB协议
ACID:
本质是对事务特性的抽象和总结,实现了ACID就实现了事务,一致性强,但是伸缩性差
事物的本质是基于加锁实现的
原子性(Atomicity)
要么全部完成,要么全部失败
一致性(Consistency)
事务开始和完成时,数据必须保持一致的状态,数据库的完整性约束没有被破坏。比如A给B转账,不论转账事务是否成功,两者存款的原始总额不变
隔离性(Isolation)
多个事务并发访问时,事务之间是隔离的,一个事务不能影响到其他事务的结果,不能看到其他事务运行时中间某个时刻的数据
持久性(Durability)
事务完成后,该事务对数据库所作的更改便持久地保存在数据库中,并不会被回滚
关于两个阶段提交协议
分成提交请求阶段(投票阶段)和提交执行阶段(完成阶段)
- 第一个阶段,每个参与者投票表决事务是放弃还是提交
- 第二个阶段,事务的每个参与者都执行最终统一的决定
BASE:
一致性弱,伸缩性强
基本可用(Basic Availability)
分布式系统出现故障时,允许损失部分可用性,保证核心可用
流量削峰、延迟响应、体验降级
软状态(Soft-state)
允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有3个副本,允许不同节点间副本同步的延时就是软状态的体现
最终一致性((Eventual Consistency)
指所有副本经过一定时间后,最终能达到一致的状态
ACID与BASE理解:
BASE和ACID代表两种截然相反的设计理念,ACID注重一致性,是传统关系型数据库(MySQL)的设计思路,BASE关注高可用,大多数分布式事务适合BASE
ACID:
- 大家在买同一本书的过程中,每个用户的购买请求都把库存锁住,等减完库存,把锁释放,后续的人才能进行购买。于是我们同是时间不可能有多个用户下单,订单流程要有排队的情况,这样就不能做出性能比较高的系统来
先买票再上车,有先后顺序
BASE:
- 大家可以同时下单,这个时间不需要真正的去分配库存,然后系统异步地处理订单,而且是批量的处理
因为下单的时候没有扣减库存,是直接确认购买,所以有可能会有超卖的情况。而后台的系统在处理订单时,发现库没有了,才会告诉用户你没有购买成功
关系数据库
关系统型数据库相关概念
| 名称 | 含义 |
|---|---|
| 关系 | 关系就是二维表,其中:表中的行、列次序并不重要 |
| 行row | 表中的每一行,又称为一条记录record |
| 列column | 表中的每一列,称为属性,字段,域field |
| 主键PK Primary key | 用于惟一确定一个记录的字段,一张表只有一个主键 |
| 域domain | 属性的取值范围,如,性别只能是‘男’和‘女’两个值,人类的年龄只能0-150 |
关系型数据库的理论:
实体-联系模型E-R:
实体Entity:
- 客观存在并可以相互区分的客观事物或抽象事件称为实体,在E-R图中用矩形框表示实体,把实体名写在框内
属性:
- 实体所具有的特征或性质
联系:
- 联系是数据之间的关联集合,是客观存在的应用语义链
实体内部的联系:
- 指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之间有一种关联关系
实体之间的联系:
- 指不同实体之间联系。例:学生选课实体和学生基本信息实体之间
实体之间的联系用菱形框表示
联系类型:
- 一对一联系(1:1)
- 对多联系(1:n):外键
- 多对多联系(m:n):增加第三张表
数据库的正规化分析
范式越高级,性能越低,数据越复杂,但磁盘占用越小。有时设计时追求性能会不准守范式
第一范式:1NF
无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,确保每一列的原子性。除去同类型的字段,就是无重复的列
说明:
- 第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库
第二范式:2NF
属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分,通常为表加上每行的唯一标识PK,非PK的字段需要与整个PK有直接相关性
例:
- 如果一个表有a、b、c、d字段,a和b是复合主键,c依赖a、b的内容,d只依赖于a的内容,就不能满足第二范式
第三范式:3NF
属性不依赖于其它非主属性,满足第三范式必须先满足第二范式。第三范式要求一个数据表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系
例:
- 如果一个表a、b、c、d四个字段,a为主键,c和d不能有依赖关系
数据抽象:
物理层: 数据存储格式,即RDBMS在磁盘上如何组织文件
逻辑层: DBA角度,描述存储什么数据,以及数据间存在什么样的关系
视图层: 用户角度,描述DB中的部分数据
NoSQL相关:
NoSQL特点:
- 非关系模型、分布式、不支持ACID数据库设计范式
- 简单数据模型
- 元数据和数据分离
- 弱一致性
- 高吞吐量
- 较高水平扩展能力和低端硬件集群
nosql数据存储模型:
相关信息: https://hostingdata.co.uk/nosql-database/
列式存储模型
应用场景:
- 在分布式文件系统提供支持随机读写的分布式数据存储
产品:
- HBase、Hypertable
数据模型:
- 以列为中心进行存储,将同一列数据存储在一起
优点:
- 快速查询、高可扩展性、易于分布式扩展
文档数据模型
应用场景:
- 非强事物需求的web应用
产品:
- MongoDB、ElasticSearch
数据模型:
- 键值模型,但存储为文档(json、xml)
优点:
- 数据模型无需事先定义
键值数据模型
应用场景:
- 内容缓存,用于大量并行数据访问,高负载场景
产品:
- redis、memcached、DynamoDB、Riak
数据模型:
- 基于hash表实现的key-value
优点:
- 查询迅速
图式数据模型
应用场景:
- 社交网络、推荐系统、关系图谱
产品:
- Neo4J、Infinite Graph
数据模型:
- 图式结构
优点:
- 适用于图式计算场景
关系数据库和nosql数据库特点及优缺点:


浙公网安备 33010602011771号