数据库基础

一、关系型数据库和非关系型数据库基础

一.1数据库读取/更新问题

  脏读:读取到了别人未提交的事务的数据,而且这个事务,到后面还会滚了。使用数据库的READ_COMMITTED以上的隔离级别可以避免。
  不可重复度: 先读取了数据,有其他的功能修改了数据,导致现在的数据和数据库的不相等。与幻读相比,重点在Update。使用数据库的REPEATABLE_READ以上的隔离级别可以避免。并发产生的锁。不可重复读就像是一个悲观锁。 乐观锁和悲观锁。
  幻读:先读取了数据,后面其他的应用功能再往这个数据表中插入或者删除了数据,导致的数据不一致。重点在Insert和Delete

一.2关系型数据库的ACID规则(针对事务):

  ①A(Atomicity)原子性: 事务的最小单位就是事务。

  ②C(Consistency)一致性: 事务前后,数据状态不变。要么全部成功,要么全部失败。

  ③I(Isolation)隔离性:隔离性表示各个事务之间不会影响,数据库提供了多种隔离级别(isolation Level)。(像sql server的隔离级别有:①READ UNCOMMITTED(未提交读取) ②READ COMMITTED(已提交读取) ③REPEATABLE READ(可重复读取) ④SERIALIZABLE(可序列化))

  ④D(Durability)持久性:一个成功的事务将永远性改变系统的状态,所以在它结束之前,所有导致状态的变化都记录在一个持久的事务日志中。如果我们的系统受到系统崩溃或断电,那么所有未完成已提交的事务可能会重新执行。

一.3四种隔离级别和会出现的数据库读取问题。

下图是主流数据库的默认隔离界别:

Database Default isolation Level
Oracle READ_COMMITTED
MYSQL REPEATABLE_READ
SQL SERVER  READ_COMMITTED
POSTGRESQL READ_COMMITTED


下图是SQL SERVER四种隔离级别介绍和读取问题出现情况: 

Isolation Level 脏读 不可重复读 幻读 Isolation Level说明
READ UNCOMMITED(读取未提交的事务) 允许 允许 允许  读取包含未提交数据。
READ COMMITTED(读取已提交事务) 不允许 允许 允许  这个模式主要作用是避免脏读。
REPEATABLE READ(重复读) 不允许 不允许 允许  事务内的数据,读取到数据后,会把数据锁定,不允许当前事务意外的数据去读取到目标数据。
SERIALIZABLE 不允许 不允许 不允许  事务开启后,对涉及(查询、更新、删除、插入)到的数据表都进行锁定,不允许其他事务对这些表进行增删改操作。

CAP定理,又称为布鲁尔定理,指出对于一个分布式系统,不可能同时满足以下三点:①一致性(Consistency)(所有的节点在同一时间具有相同的数据) ②可用性(Availability)(保证每个请求不管成功或者失败都有响应) ③分隔容忍(Partition tolerance)(系统任意信息的丢失或失败不会影响系统的继续运作)

BASE原则:BASE原则是NoSQL数据库通常对可用性及一致性的弱要求原则:①Basic Availble(基本可用) ②Soft-state(软状态/柔性事务) ③Eventual Consistency(最终一致性,也是ACID的最终目的);

二、MongoDB和Redis比较

MongoDB是一个基于分布式文件存储的数据库。

Redis是一个Key-value存储系统。MongoDB建议集群部署,更多的考虑到集群方案,Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。

MongoDB和Redis比较

数据库   MongoDB Redis
   简介      基于分布式文件存储的数据库,是非关系数据库当中功能最像数据库的。是一个面向集合的、模式自由的文档型数据库。 键值对存储的数据库                                                                                                     
 特征  最大的特点是:支持的查询语言非常强大,还支持对数据建立索引。 数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行。还有丰富的数据结构类型,还支持数据备份。 
 数据类型  BSON、一种类型Json的二进制键值对数据。 ①string(字符串) ②hash(哈希) ③list(列表) ④set(集合) ⑤zset(有序集合) 
 特征说明

 ①面向集合。集合就相当于关系型数据库里面的表。

②文档型。文档就是一种类似于JSON的BSON格式二进制数据。(键值对)

③模式自由。不同格式之间的文档可以组成一个集合。

MongoDB的原子性限制在文档级别,对文档的保存、修改和删除都是原子操作。

 
比较 比较适用数据量大的时候使用。QPS高,没那么安全。因为mongodb的弱类型支持,如果不确定实体类型,可以用mongdb替代传统型关系数据库 比较适合做缓存或者锁。读取速度快,TPS高。

关系型数据库和非关系型数据库(NoSQL)比较

 


 

posted @ 2019-05-16 23:34  落落落落码  阅读(129)  评论(0编辑  收藏  举报