(下面的东西只是笔记,绝大部分都是尚硅谷老师讲的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协议传输;但也有不可靠传输的协议,如果节点之间采用这种协议,就要保证分布式系统节点间出现网络故障时,系统仍然可用。
- 强一致性(Consistency)
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之间通信和调用,对外提供服务和组内协作。
- 集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问,来实现负载均衡。
版权声明:本文为qq_41342326原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。