Redis-狂神(1. NoSQL 概述)学习笔记

1 数据库的发展史

  1. 单机 MySQL

    用户 → 查询语句 → 数据库

    90年代,一个基本的网站访问量不会太大,单个数据库完全够用了。

    且基本上使用的都是静态网页,所以服务器没有太大压力。

    这种情况下,整个网站的瓶颈:

    1、数据量如果太大,一个机器放不下
    2、数据的索引(使用的是 B+Tree),一个机器内存放不下
    3、访问量增大,一个服务器承受不了

  2. MemCached(缓存)+ MySQL + 垂直拆分

    Redis-狂神(1. NoSQL 概述)学习笔记
    数据增多,一个数据库放不下,就需要垂直拆分成多个数据库。

    网站 80% 的时间都在执行读操作,所以大部分的数据库复制读操作,少部分复制写操作,也就是使读写分离的技术。

    每次查询操作都要去访问数据库的话,数据库压力会很大。这种情况就需要使用缓存,来减轻数据库的压力。

    发展过程:优化数据结构和索引 → 使用文件缓存(IO) → MemCached

  3. 水平拆分 + MySQL 集群

    Redis-狂神(1. NoSQL 概述)学习笔记

    用户持续增多,少量数据库也满足不了需求了,就需要使用 MySQL 集群。每一个集群都具有 M(master)和 S (slave)

    把之前整个数据库进行拆分,把不同功能的数据进行拆分,减轻单个群的压力。

  • 此时数据库的引擎也发生了变化:
    之前是 MyISAM :表锁,查询数据锁住整个表,影响效率。
    后来是 InnoDB :行锁,查询数据锁住对应的那一行。
  1. 现阶段

    现在数据量巨大,且变化速度极快,所以 MySQL 这种关系型数据库处理起来就很吃力了。

    所以出现了很多新型的非关系型数据 ,专门存储大型文件、图片、博客……

2. 为什么要用 NoSQL

用户的个人信息、社交网络、地理位置、用户自己产生的数据、用户日志…… 数据量暴增。
这时就要使用 NoSQL 数据库,它可以很好的处理以上情况。

3. 什么是 NoSQL

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

泛指非关系型数据库。

  • 关系型数据库 :表格,以行和列作为表格,就像 Excel

随着 web2.0 的互联网的诞生,传统的关系型数据库,很难对付 web2.0 时代的产物 ,尤其是一些高并发的社区,也就暴露出来很多难以克服的问题。

NoSQL 在当今大数据环境下发展的十分迅速,Redis 是发展最快的,而且是我们当下必须要掌握的一个技术。

很多的数据类型用户的个人信息、社交网络、地理位置。这些数据类型的存储不需要一个固定的格式。不需要特定的格式就可以横向扩展的。

4. NoSQl 特点

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

    传统的关系型数据库

    • 结构化组织
    • SQL
    • 数据和关系都存在单独的表
    • 操作,数据定义语言
    • 严格的一致性
    • ……

    NoSQL

    • 不仅仅是数据
    • 没有固定的查询语言
    • 键值对存储、列存储、文档存储、图形数据库
    • 保证最终一致性
    • CAP 定理 和 BASE 理论(异地多活)
    • 高性能、高可用、靠可扩展
    • ……

真正在实践中:NoSQL + 关系型数据库 一起使用才是最强的

5. 了解 3V + 3高

  • 大数据时代的 3V—— 主要是用来描述问题的
    1、Volume (海量数据)
    2、Varity (多样化)
    3、Velocity (实时性)

  • 大数据时代的 3高——主要是对程序的要求
    1、 高并发
    2、 高可扩(可以随时水平拆分)
    3、 高性能(保证用户体验和性能)

6. 数据架构分析

  • 思考问题:一个大型网站上的这么多内容都是放在一个数据库中的吗?

  • 常用的数据库

  1. 存储商品的基本信息

    名称、价格、商家信息 ……
    这些关系型数据库就都可以解决了——MySQL / Oracle

  2. 商品的描述、评论(文字较多的)

    文档型数据库:MongoDB

  3. 图片

    分布式文件系统 FastDFS
    淘宝的:TFS
    Google的:GFS
    Hadoop的:HDFS
    阿里云的:OSS

  4. 商品的关键字(搜索)

    搜索引擎 SOLR 、Elastic Search
    淘宝用的 : ISearch

  5. 商品热门的波段信息(秒杀)

    内存数据库
    Redis、Tair、MemCache

  6. 商品的交易,外部的支付接口

    三方应用

  • 大型互联网应用问题:
    1、数据类型太多
    2、数据源太多,经常重构
    3、数据要改造,大面积改造