关系型数据库
关系的个人理解:关系就是表内数据之间的、表之间的关系。表内数据是严格的对应关系,字段缺一不可,值缺一不可,也就是一致的数据结构,这也就是django新增字段时,需要删掉数据,重新migrate。表之间的关系三种:一对一、一对多、多对多。关系模型指的就是二维表格模型;
***关系型数据库以行和列的形式存储数据,行和列的形式被称为表,表是由一组相关实体组成的集合。一组表组成了数据库。
***表中的一行称为关系的一个元组,用来存储事物的一个实例;
***表中的一列称为关系的一个属性,用来描述实体的某一特征。
***表内字段的组成一样,即便某个数据不需要某个字段,系统也会强加上这个字段及默认值,这种结构便于表与表之间进行操作,但它也是关系数据库性能瓶颈的一个因素。
1.关系型数据库理论 - ACID
ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。
A – Atomicity – 原子性
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有被执行过一样。
C – Consistency – 一致性
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
I – Isolation – 隔离性
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
D – Durability – 持久性
事务处理结束后,对数据的修改是永久的,即便系统故障也不会丢失。
2.优缺点
关系型数据库的优势:
1: 容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;
2:保持数据的一致性(事务处理)
3:由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)
4:支持SQL,可以进行Join等复杂查询(几张表之间)
关系型数据库的不足:
不擅长的处理
1:大量数据的写入处理
2:为有数据更新的表做索引或表结构(schema)变更
3:字段不固定时应用
4:对简单查询需要快速返回结果的处理
非关系数据库
结构不固定,集合内数据字段可以不一样,自由度高,可以减少一些时间和空间的开销。
四大类型:
键值对存储(key-value),文档存储(document store:mongodb),基于列的数据库(column-oriented),还有就是图形数据库(graph database)
主流的非关系型数据库有 NoSql、MongoDB、Cloudant、
特征:
1、使用键值对存储数据;
2、分布式;
3、一般不支持ACID特性;
4、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
优点:
1、无需经过sql层的解析,读写性能很高;
2、基于键值对,数据没有耦合性,容易扩展;
3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、无事务处理,附加功能bi和报表等支持也不好;