1. NoSQL概述

1.1 为什么要用NoSQL

1.1.1 单机MySQL

1. NoSQL概述

90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够!
那个时候,更多的是去使用静态网页 Html, 服务器根本没有太大的压力!
这种情况下网站会产生一些瓶颈:

  1. 数据量如果太大、一个机器放不下了!
  2. 数据的索引 (B+ Tree),一个机器内存也放不下
  3. 访问量(读写混合),一个服务器承受不了~

只要你开始出现以上的三种情况之一,那就意味着网站需要升级了

1.1.2 Memcached(缓存) + MySQL + 垂直拆分 (读写分离)

网站80%的情况都是在读,每次都要去查询数据库的话就十分的麻烦!所以说我们希望减轻数据的压力,可以采用缓存的方式!

缓存:假设数据不变,可以在第一次的时候查询数据库,然后写入缓存,之后查询缓存获取数据!

发展过程: 优化数据结构和索引–> 文件缓存(IO)—> Memcached(当时最热门的技术!)

1. NoSQL概述

解读:

首先扩容到3台数据库,使用2号数据库写入数据,1号跟3号数据库用来同步2号数据库写入的内容,来保证数据一致,而读取的时候,则从1号跟3号数据库中读取,这就叫做读写分离。

1.1.3 分库分表 + 水平拆分 + MySQL集群

本质,数据库(读,写)

以前的MyISAM:表锁(指查询某一项数据时,锁定整张表,剩下的进程则需要等查询出数据之后才可以执行 ),十分影响效率,高并发下会出现严重的问题

Innodb:行锁(每次查询数据,只锁对应的行),效率远超表锁

后来就开始采用分库分表来解决写的压力

MySQL集群就解决了那个时候大部分的需求

1. NoSQL概述

1.1.4 结论

现在的架构

1. NoSQL概述

因为用户的个人信息,社交网络,地理位置,用户自己产生的数据,用户日志等等爆发式增长,所以需要使用NoSQL数据库。

1.2 什么是NoSQL

NoSQL = Not Only SQL(不仅仅是SQL)

关系型数据库:表格,行,列

泛指非关系型数据库,随着web2.0的诞生,传统的关系型数据库很难对付web2.0时代,尤其是超大规模的高并发的社区!暴露出来很多难以克服的问题,NoSQL在当今大数据环境下发展的十分迅速,Redis是发展最快的,而且是我们必须要掌握的一个技术。

很多的数据类型用户的个人信息,社交网络,地理位置,这些数据类型的存储不需要一个固定的格式!不需要多余的操作就可以横向扩展Map<String,Object> 使用键值对来控制!

1.2.1 NoSQL特点

解耦!

  1. 方便扩展(数据之间没有关系,很好扩展!)
  2. 大数据量高性能(Redis 一秒写8万次,读取11万,NoSQL的缓存记录级,是一种细粒度的缓存,性
    能会比较高!)
  3. 数据类型是多样型的!(不需要事先设计数据库!随取随用!如果是数据量十分大的表,很多人就无
    法设计)
  4. 传统 RDBMS 和 NoSQL

传统的 RDBMS

  • 结构化组织
  • SQL
  • 数据和关系都存在单独的表中 row col
  • 操作操作,数据定义语言
  • 严格的一致性
  • 基础的事务

NoSQL

  • 不仅仅是数据
  • 没有固定的查询语言
  • 键值对存储,列存储,文档存储,图形数据库(社交关系)
  • 最终一致性,
  • CAP定理和BASE (异地多活)
  • 高性能,高可用,高可扩

1.3 NoSQL四大分类

1. NoSQL概述