天天看点

Redis学习(二)-------Nosql数据模型,四大分类及CAP原理

Nosql数据模型

聚合模型

  • KV键值
  • Bson :BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON,

    它和JSON一样,支持内嵌的文档对象和数组对象

  • 列族 :顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,

    对针对某一列或者某几列的查询有非常大的IO优势。

  • 图形

数据库的四大分类

<1>键值(k-v)存储数据库

这是最常见的Nosql数据库,它的数据是以key-value的形式存储的。key-value模型对于IT系统来说优势在于简单、易部署。它的处理速度非常快,但是基本上只能通过key的完全一致性查询数据如果DBA只对部分值进行查询或者更新的时候,key-value就显得效率低下了。根据数据的保存方式可以分为临时性、永久性和两者兼具三种。例如;Redis,Oracle。

<2>列存储数据库

这种数据库通常是用来应对分布式存储的海量数据。键依然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:HBASE,Cassandra,Riak。

<3>文档型数据库

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。

<4>图形数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph.

四大分类对比

分类 Example举例 典型应用场景 数据模型 优点 缺点
键值(key-value) Redis,Oracle,Voldemort 内存缓存,主要同于处理大量数据的高访问父负载,也用于一些日志系统

key指向value的

键值对,通常用

hsah table来

实现

查询速度快

数据无结构化,

通常只被当做字符串

或者二进制数据

列存储数据库 Cassandra,HBASE,Riak 分布式的文件系统

以列族式存储,

将同一列数据存在一起

查找速度快,

可扩展性强,

更容易进行分布式扩展

功能相对局限
文档型数据库 CouchDB,MongoDb

web应用(与Key-Value类似,

Value是结构化的,不同的是数据库能够了解Value的内容)

key-value对应的键值对,

value为结构化数据

结构数据要求不严格,

表结构可变,

不需要像关系型数据库一样需要预先定义表结构

查询性能不高,

而且缺乏统一 的查询语法

图形数据库 Neo4j,infoGrid,Infinite Graph

社交网络,推荐系统。

专注于构建关系图谱

图结构

利用图结构相关算法。

比如最短路径寻址,N度关系查找等

很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式额集群方案

适用情景

1、数据模型比较简单

2、需要灵活性更强的IT系统

3、对数据库性能要求较高

4、不需要高度的数据一致性

5、对于给定key,比较容易映射复杂值的环境

传统数据库的ACID规则

1、A(Atomicity)原子性

原子性就是说事务里的所有操作要么全部完成,要么全部都不做,事务成功的条件是是事务里所有的操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

2、C(Consistency)一致性

一致性是说数据要一直处于一致的状态,事务的运行不能改变数据库原本的一直性约束。

3、I(Isolation)独立性

所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,他所访问的数据就不受未提交事务的影响。

4、D(Durability)持久性

持久性是指一旦事务提交后,他所做的修改将会永久保存在数据库上,即使出现宕机也不会丢失。

CAP理论

CAP理论是Brewer教授提出的:一个分布式系统不能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。最多只能同时较好的满足两个

因此,根据CAP原理,将Nosql数据库分成了满足CA原则、CP原则、AP原则三大类;

CA:单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。(传统型数据库)

CP:满足一致性,分区容错性的系统,通常性能不是特别高。(Redis、MongoDB)

AP:满足可用性,分区容错性的系统,通常可能对一致性的要求要低一点。(大多数的网站架构选择)

CAP详解

<1>一致性(Consistency)

对于所有客户端,具有唯一的、最新的、可读的版本的数据。这和前面的ACID的一直性不太一样。这里的一直性主要关注的是多个客户端从多个复制分区读取的内容并得到一致性的结果。简单的说就是所有节点同一时间看到的是相同的数据;

<2>可用性(Availability)

不管是否成功,确保每一个请求都能接收到响应。

<3>分区容错性(Partition Tolerance)

即使数据库分区之间存在通信故障,系统仍然保持响应客户端请求的能力。

注:CAP定理只适用于集群中出现连接故障的某些情况。网络越可靠,需要考虑CAP定理的可能性就越低

如有总结不当,有问题,错误的地方请大家予以指正,共同学习,共同进步

参考资料

(https://yq.aliyun.com/articles/96844/?spm=a2c4e.11153940.blogcont96902.25.3cd6370cqpe6l9)

(https://blog.csdn.net/xiaojin21cen/article/details/81355811)

https://yq.aliyun.com/articles/47327?spm=a2c4e.11153940.blogcont96844.26.7e637e8aaIcPJc

(https://yq.aliyun.com/articles/524924?spm=a2c4e.11153940.blogcont96844.19.7e637e8aaIcPJc)