NoSql数据库核心思想

一、单机MySql的美好年代

一个网站的访问量一般都不大,用单个的数据库完全可以轻松应对
在那个时代,更多的是静态网页,动态交互类型的网站不多
在这里插入图片描述
上述架构,数据存储会遇到以下问题:

  1. 数据量的总大小 一个机器放不下时
  2. 数据的索引 (B + Tree)一个机器的内存放不下时
  3. 访问量(读写混合)一个实例不能承受

二、Memcached(缓存) + Mysql + 垂直拆分(分库)

后来随着访问量的上升,程序员们开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。
在这里插入图片描述

三、Mysql主从读写分离

由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了。
在这里插入图片描述

四、分表分库+水平拆分+mysql集群

在Memcached的高速缓存,Mysql的主从复制,读写分离的基础上,这时Mysql主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MyISM使用表锁,在高并发下会出现严重的锁问题,大量的高并发Mysql应用开始使用InnoDB引擎代替MyISAM.

同时,开始流行使用分表分库来缓解写压力和数据增长的扩展问题。这个时候,分表分库成了一个热门技术。虽然Mysql推出了mysql Cluster集群,但性能也不能很好满足互联网的要求,只是在可靠性上提供了非常大的保证。
在这里插入图片描述

五、Mysql扩展性瓶颈

Mysql数据库也经常存一些大文本字段,导致数据库表非常的大,在做数据库恢复的时候就导致非常的慢,不容易快速恢复数据库。比如1000万4KB大小的文本就接近40GB的大小,如果能把这些数据从Mysql省去,Mysql将变得非常的小。关系型数据库很强大,但是并不能很好的应付所有的应用场景。Mysql的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更改困难,正是当前使用Mysql开发人员面临的问题。

六、NoSql是什么

NoSQL(not only sql),意思是不仅仅是sql ,泛指非关系型数据库,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

七、关系型数据库和非关系型数据库对比

RDBMS(关系型数据库) NoSQL(非关系型数据库)
高度组织化结构数据 代表着不仅仅是sql
结构化查询语言(SQL) 没有申明性查询语言
数据和关系都存储在单独的表中 没有预定义的模式
数据操作语言,数据定义语言 键-值对存储,列存储,文档存储,图形数据库
严格的一致性 最终一致性,而非ACID属性
基础事务 非结构化和不可预知的数据
CAP定理
高性能,高可用性和可伸缩性

八、主流NoSQL数据库

  1. Redis官方是不支持windows的,但是Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,下载地址:https://github.com/MSOpenTech/redis/releases。注意只支持64位哈。
  2. Memcached官网下载地址:http://memcached.org/
  3. Mongdb官网下载地址:https://www.mongodb.com/try/download

九、3V和3高

3V:海量(Volume)、多样(Variety)、实时(Velocity)
3高:高并发、高扩展、高性能

十、NoSql数据库的四大分类

在这里插入图片描述
在这里插入图片描述

十一、分布式数据库CAP原理

1. 传统的ACID
  • A(Atomicity)原子性:事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里都所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银行转账,从A转100元至B账户,分为两个步骤:1. 从A账户取100元。2. 存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成一步,第二步失败,钱会莫名其妙的少了100元。

  • C(Consistency)一致性:数据库要一直处于一致的状态,事务的运行不会改变数据原本的一致性约束。

  • I(Isilation)独立性:指并发的事务之间不会相互影响,如果一个事务要访问的数据正在被另一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。比如现在有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增的100元的

  • D(Dourability)持久性:一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

2. 非关系数据库CAP
  • C(Consistency)强一致性
  • A(Availability)可用性
  • P(Partition)分区容错性
3. CAP三进二

CAP理论核心:一个分布式系统不可能同时很好的满足一致性可用性分区容错性这三个需求,最多只能同时较好的满足两个

  • CA :单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大,列如:传统Oracle数据库。
  • CP :满足一致性,分区容错性的系统,通常性能不是特别高,大多数网站架构的选择。
  • AP :满足可用性,分区容错性的系统,通常可能对一致性要求低一些,例如:Redis 、MongoDB。
4. BASE

BASE 就是为了解决关系型数据库强一致性引起的可用性降低而提出的解决方案。
BASE 是三个术语的缩写:

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

它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。缘由就在于大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成这些指标,要想获得这些指标,我们必须采用另外一种方式来完成,这里BASE就是解决这个问题的办法。

5. 分布式+集群简介
  • 分布式 :不同的多台服务器上面部署不同的服务模块(工程),他们之间通过Rpc/Rmi之间通讯和调用,对外提供服务和组内协作。
  • 集群:不同的多台服务器上面部署相同的模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。

猜你喜欢

转载自blog.csdn.net/weixin_38739598/article/details/107702777