NoSQL理论学习

(下面的东西只是笔记,绝大部分都是尚硅谷老师讲的Redis视频内容。一是为了要部署一个项目,来突击学习一下,二是大学里就学过关系型数据库中的mysql,考试也就是多表查询,嵌套查询,难以满足当今应用。)

1.出现的原因

  • 高并发的操作不太建议多表关联查询,互联网公司用冗余数据来避免关联查询。
  • 性能问题

2.NoSQL的优势

NoSQL(Not Only Sql)

  • 易扩展(需要存储的数据很多,以前mysql给定字段的方式不好拓展)
  • 高性能(为了解决高并发)
  • 多样灵活的数据模型(数据源广泛,而数据服务平台不需要大面积重构)

3.NoSQL的数据模型

聚合模型

  • KV键值
  • Bson
  • 列族
  • 图形

4.NoSQL数据库的四大分类

  • KV键值
    • 新浪:BerkeleyDB+redis
    • 美团:redis+tair
    • 百度、阿里:memcache+redis
  • 文档型数据库(bson格式比较多)
    • MongoDB
    • CouchDB
  • 列存储数据库
    • Cassandra、HBase
    • 分布式文件系统
  • 图存储数据库
    • 它不是放图形的,存放的关系比如:社交网络,推荐系统。专注于构建关系图谱
    • Neo4J、InfoGrid

总结:
在这里插入图片描述
在这里插入图片描述

5.在分布式数据库中CAP原理CAP+BASE

  • 传统的关系型数据库的ACID

    ACID,指数据库事务正确执行的四个基本要素的缩写。

    • 原子性(Atomicity):事务中的操作要么全部执行完,要么一点儿不做
    • 一致性(Consistency):事务运行不改变数据库原本的一致性约束
    • 隔离性、独立性(Isolation):并发事务之间互不影响
    • 持久性(Durability):一旦事务提交,所作修改被DB永久保存
  • NoSQL中有CAP

    • 强一致性(Consistency)
      • 所有节点返回的数据是一致的
    • 可用性(Availability)
      • 每一个非故障节点,都能够对每一个请求做出请求。
      • 部分节点的宕机,不能影响其他节点业务,淘宝京东等大型电商平台必须满足这一点。
    • 分区容错性(Partition tolerance)
      • 当系统中节点因网络原因无法通信时,系统依然可以继续运行
      • 分布式系统由多个节点组成,在计算机网络中学过主机之间传送文件一般采用TCP/IP协议传输;但也有不可靠传输的协议,如果节点之间采用这种协议,就要保证分布式系统节点间出现网络故障时,系统仍然可用。
  • CAP的3进2

    CAP理论的核心是:一个分布式系统不可能同时很好的满足三个需求,最多只能同时较好的满足两个;如果就在本地部署DB的话,实际上P是不用考虑的,所以CAP原理是针对分布式系统来说的。

在这里插入图片描述

由于当前网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须实现的

所以只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。

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

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

AP:分布式、大多数网站架构的选择。满足可用性、分区容错性的系统,通常对一致性要求低一些,不是没有一致性,只是有延时。

  • BASE

    为了解决关系型数据库强一致性引起的可用性降低问题,而提出的解决方案

    • 基本可用(Bascially Available)
    • 软状态(Soft state)
    • 最终一致(Eventually consistent)

    思想:牺牲一致性,换取系统整体伸缩性和性能上的提高。

  • 分布式+集群

    • 分布式系统(Distributed System)

      由多台计算机和通信的软件组件通过计算机网络连接组成。分布式系统是建立在网络之上的软件系统。

    • 分布式和集群的区别

      • 分布式:不同的多台服务器上面部署不同的服务模块,它们之间通过Rpc/Rmi之间通信和调用,对外提供服务和组内协作。
      • 集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问,来实现负载均衡。