大数据时代到来,短视频和大量图片导致数据表非常大,频繁的查询导致传统的关系型数据库难以满足需求,因此非关系型数据库就应运而生。Redis数据库是NoSQL是一种,其满足强一致性和高可用性,强一致性就是要保证数据的质量,高可用性即稳定性,本文简单介绍了非关系型数据库是什么、能干嘛,与关系型数据库的区别。

 

一、NoSQL定义

  NoSQL(Not Only SQL),意即“不仅仅是SQL”,泛指非关系型数据库。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,例如谷歌或Facebook每天为他们的用户收集万亿比特的数据,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

 

 

二、NoSQL的优势

1.易扩展

  NoSQL数据库种类繁多,但有一个共同的特点是去掉关系数据库的关系型特性。数据间无关系,这样就非常容易拓展,无形之间在架构层面上带来了可扩展的能力。

 

2.大数据量高性能

  NoSQL数据库具有非常高的读写性能,尤其在大数据量下,一秒钟写8万,读16万次

 

3.多样灵活的数据模型

  NoSQL无需事先为要存储的数据建立字段,随时可以根据存储自定义数据格式,而在关系型数据库里增删字段,比如在存储微信用户信息的表里添加一个手机号字段,简直就是噩梦。

 

4.RDBMS和NoSQL

  关系型数据库&非关系型数据库的对比

nosql数据库 读写性能 nosql数据库的_nosql数据库 读写性能

nosql数据库 读写性能 nosql数据库的_数据库_02

 

 

 

三、3V+3高

nosql数据库 读写性能 nosql数据库的_数据库_03

海量:微博

多样:呈现方式是图片、文字等,终端是手机、电脑、pad等。

实时:12306的铁路信息需要做到实时更新,但是做不到绝对的实时,只能做到准实时。

 

高并发:12306在抢火车票的时候是高并发的

高可扩(扩展性):

  横向扩展:针对多台机器,多台机器整合成一个集群

  纵向扩展:针对一台机器,2G不够了,插两条4G就变8G,但纵向扩展长期来看总有尽头

 

 

四、NoSQL数据模型简介

nosql数据库 读写性能 nosql数据库的_数据库_04

 

(一)我们以一个电商客户、订单、订购、地址模型来对比关系型数据库和非关系型数据库数据库的区别

1.关系型数据库:

  由下图可知关系型数据库是多表关联的

nosql数据库 读写性能 nosql数据库的_数据库_05

 

nosql数据库 读写性能 nosql数据库的_关系型数据库_06

 

2.非关系型数据库:

  非关系型数据库就像一个jason串一样,被称为聚合模型,可以通过查询用户ID,得到该用户基本信息,订单信息等全部信息,不想关系型数据库的表一样多表关联

 

nosql数据库 读写性能 nosql数据库的_关系型数据库_07

 

(二)思考

  为什么上述情况可以用聚合模型来处理?

  1.关系型数据库的缺点

    在关系型数据库里我们使用left join命令进行多表关联查询,如果涉及多张表,查询语句会很长很复杂,查询性能也较低下;

    如果用户信息和订单信息放在不同的数据库里,会使数据查询加大难度;

    分布式事务无法支持太多并发;

   ·2.非关系型数据库的优势

    NoSQL只要查到客户信息的ID,所有的信息都放在一起,不用像关系型数据库查很多表

 

 

(三)聚合模型

1.KV键-值对

nosql数据库 读写性能 nosql数据库的_NoSQL_08

 

2.文档型数据库(Bson格式比较多):见上截图非关系型数据库的数据结构表

典型:CouchDB、MongoDB,其中Monddb是一个基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案,它是最像关系型数据库的非关系型数据库,

 

3.列存储数据库:

典型:Cassandra、HBase、分布式文件系统

nosql数据库 读写性能 nosql数据库的_数据库_09

nosql数据库 读写性能 nosql数据库的_nosql数据库 读写性能_10

 

 

4. 图关系数据库:

典型:Neo4J、InfoGrid

图不是用来放图形的,放的是关系比如:我们复杂的亲戚人际关系,微博上好友关注话题,专注于构建关系图谱

nosql数据库 读写性能 nosql数据库的_nosql数据库 读写性能_11

 

 

nosql数据库 读写性能 nosql数据库的_数据库_12

 

 

 补充:

四种类型的总结

 

nosql数据库 读写性能 nosql数据库的_Redis_13

 

nosql数据库 读写性能 nosql数据库的_Redis_14

 

 

 五、分布式数据库中CAP原理及CAP+BASE

(一)传统的ACID(关系型数据库特点)是什么

1.A(Atomicity)原子性

  事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里所有的操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。例如银行转账,首先从A账户中取出100元,然后转入B账户,这两步要么一起完成,要么一起不完成,如果只完成A账户取钱的操作,转入B账户失败,那么会莫名其妙少了100元。

2.C(Consistency)一致性

  事务的运行不会改变数据库原本的一致性约束,例如年龄这个字段必须输入int值,不能输入字符串。

3.I(Isolation)独立性

  并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另一个事务修改,只要另一个事务未提交,它所访问的数据就不受到未提交事务修改的影响,拿之前转账100元的例子做比方,在100元没有转入B账户的时候,查询B账户余额是看不到新增的100元的。

4.D(Durability)持久性

  持久性是指一旦事务提交,它所做的修改将永远保存在数据库上。

 

 

 

 (二)NoSQL的CAP原理

1.C(Consistency)强一致性

  淘宝商品的点赞数不用做到强一致性;但公司每日的早晚打卡软件就需要做到强一致性,不然影响员工的KPI

2.A(Avaliability)可用性

  网站不能崩了

3.P(Partition tolerance)分区容错性

 

补充1:

CAP原理的三点中满足只能两个,而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须要实现的,我们只能在一致性和可用性之间进行权衡。

采用CA的是传统型Oracle数据库;

采用AP的是大多数网站架构;

采用CP的是Redis、Mongodb,如下图:

nosql数据库 读写性能 nosql数据库的_nosql数据库 读写性能_15

 

 

补充2:C与A的选择

nosql数据库 读写性能 nosql数据库的_NoSQL_16

 

nosql数据库 读写性能 nosql数据库的_nosql数据库 读写性能_17

 

 

 (三)BASE

  BASE是为了解决关系型数据库强一致性,引起的可用性降低问题而提出的解决方案,例如双十一当时可能商品点赞数10000,但是只统计到6000,是弱一致性,但是高峰结束之后还是想让数据不那么离谱,所以加上BASE。他的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上的改观。BASE是三个术语的缩写,最重要的就是最终执行:

1.BA(Basically Available)基本可用

2.S(Soft state)软状态

3.E(Eventually consistent)最终一致