1、NoSQL概述

为什么要使用NoSQL?

引用学习:https://space.bilibili.com/95256449/

发展过程

1、单机MySQL的年代!

 APP:应用,一个网站。

DAL:数据库访问层,简单来说实现对数据库的CRUD

MySQL:数据库

早期的访问量不大的时候,单个数据库足够!那个时候的服务器根本没有太大的压力!

思考一下,在如今的互联网时代,原来的单个数据库,会遇到哪些瓶颈?

  1. 如果数据量太大,一个机器放不下(数据库保存数据是持久化的操作,是需要保存在硬盘上的)

  2. 数据的索引问题,如果一张表有百万条数据,肯定需要建立索引,但是索引太多,一个内存也放不

    • 如果不建立索引,整个的CRUD都会很慢
    • 目前MySQL使用(B + Tree)
  3. 访问可以会有读写混合,一个服务器承受不了

记住,如果创业的都是从最原始的开始,需要确定真的有那么大的访问量的时候,采取扩充

2、Memcached(分布式的高速缓存系统) + MySQL + 垂直拆分(读写分离)

网站80%的情况都是在读,每一次都直接查询数据库的话十分麻烦,数据库也承载不了,所以说我们希望减轻数据库的压力,可以使用缓存来保证效率!

该时代的发展过程:先优化数据库结构和索引(对数据库的底层进行的优化)--> 文件缓存(IO,将数据保存在文件中肯定比数据库的性能要好) --> Memcached(当时最热门的技术!)

针对单机MySQL,为了解决在高并发下读的压力,在中间加入cache缓存,可以很好的解决这个问题。

数据库可以进行垂直查分 ,比如:1个写,2个存,写的内容通过主从复制,同步更新到另外两个数据库。

3、分库分表+ 水平拆分 + MySQL集群

数据库的本质(读、写)

解决了读的问题,现在解决写的问题,这些都是减轻压力的操作。

物理治疗

  • MySQL的存储引擎
  1. 早年使用:MyISAM
    • 早些年MySQL的引擎使用的是这个,它针对写的操作时,利用了表锁。
    • 就是每次写都需要进行等待,所以十分影响效率!在高并发的情况下出现严重的锁问题。
    • 比如:修改一下张三的密码,那么就是锁住整张表,其他的进程只能等待
  2. 后来转战:Innodb
    • 它是一个行锁,顾名思义锁表的行记录,那么效率相比之前肯定有所提高

精神治疗

数据库再怎么优化都只有一个,如果一张表有1亿条数据,就会很麻烦!

所以慢慢的就开始使用分库分表来解决写的压力!MySQL那个年代推出了表分区!这个并没有被许多公司使用!

而MySQL的集群,就很满足那个年代的所有需求!

 用户访问集群,先查看缓存中有没有,再去3个集群中访问,每个集群分别存着数据的一部分,最后将结果合并。

4、如今的时代

关系型数据库所存在的问题:

2010~2020年,十年之间,世界已经发生了天翻地覆的变化;现在大点的公司都可以发布自己的卫星了。

如果要实现一些定位、最新音乐、热榜等功能,这些都是大数据量的!并且数据类型不能以列和行存储。

MySQL等关系型数据库就不够用了!数据量很多,变化又很快!

MySQL会使用它来存储一些比较大的文件,比如:博客的文章,图片!那么对应的数据表就会很大,效率就低了!但是如果有一种数据库专门处理这种数据,那么MySQL压力就变得十分小!

如何处理这些问题?

大数据的IO压力下,如果表有1亿条数据,那么表结构几乎无法更改,现在让你加一个列,相当于加了1
亿条数据。

所以:数据库的结构,都是在一开始,花费大量时间商讨,解决的。

目前 一个基本的互联网的项目!

用户访问都会经过企业防火墙或者路由网关,做转发、验证。

之后利用负载均衡和服务熔断,分别保证资源的分配平均和服务宕机使用备用的情况。

微服务架构,每一个服务分别部署在不同的服务器上,并且对应有着自己独立的数据库。

虽然很好的解决了问题,但是技术成本也很大,最近bilibili的财报分析,亏损了13个亿,为什么b站这
么多用户还是亏损的?就是因为这个东西的技术成本很大。

使用的原因

用户的个人信息,社交网络,地理位置。用户自己产生的数据,用户日志等待爆发式增长!
这时候我们就需要使用NoSQL数据库,它可以很好的处理以上的情况!

什么是NoSQL

NoSQL

NoSQL = Not Only SQL(不仅仅是数据库)

关系型数据库结构:表、行、列

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

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

非关系型数据库一般利用 Map<String, Object> 键值对控制!而这个Object就可以使任何类型的。

NoSQL特点

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

传统的 RDMS
- 结构化组织(有固定的结构)
- SQL(按固定的结构去查询)
- 数据和关系都存在单独的表中,表里只有行和列
- 复杂的操作,数据定义语言(CRUD操作和与数据库的有关的语言,比如:modify)
- 严格的一致性
- 事务
-....
NoSQL
- 不仅仅是数据
- 没有固定的查询语言
- 键值对存储,列存储,文档存储,图形数据库(用于社交关系存储)
- 只保证最终一致性即可
- CAP定理和BASE (异地多活),如果搞懂这两个定理那么可以说就是一个初级架构师!
- 高性能、高可用、高可扩
- ....

了解:3V + 3高

大数据时代的3V:主要是描述问题的(以微信和淘宝举例)

  1. 数据海量Volume:淘宝可能在一瞬间数据量就上亿。
  2. 多样Variety:微信可以发图片,有社交关系(好友),定位,都是不同类型的数据。
  3. 实时Velocity:数据要达到实时的,现在的4G时代,直播可能有延迟。

大数据时代的3高:主要是对程序的要求

  1. 高并发
  2. 高可扩:如果服务器不够用了,可以横向扩展再加一台没有任何影响
  3. 高性能

真正的公司中的实践:NoSQL + RDBMS 一起使用才是最强的。

技术没有高低之分,就看你如何去使用!(提升内功,思维的提高!)

阿里巴巴演进分析

思考问题:这么多东西难道都是在一个数据库中的吗?

 可以看到淘宝随便一个商品的页面,包含了图片、视频、信息、评论等,肯定不会放在关系型数据库。

# 1、商品的基本信息
    名称、价格、商家信息等等
    关系型数据库就可以解决了!比如说MySQL/Oracle (淘宝早年就去IOE了! - 了解王坚,推荐文章:阿里云的这群疯子)
    但是淘宝使用的MySQL不是大家使用的MySQL,底层根据自己的业务改变了

# 2、商品的描述、评论(文字比较多)
    使用文档型数据库,MongDB是一种,所以学完Redis还需要去学习它

# 3、图片
    分布式文件系统 FastDFS
    - 淘宝自己的    TFS
    - Googel    GFS
    - Hadoop    HDFS
    - 阿里云的     oss

# 4、商品的关键字(搜索)
    - 搜索引擎 solr elasticsearch
    - 淘宝自己的: ISerach 这里可以去了解 多隆这个人(多去了解一下这些技术大佬!)

# 5、商品热门的波段信息
    - 内存数据库
    - Redis Tair、Memcache。。。

# 6、商品的交易,外部的支付接口
    - 第三方应用

阿里也解决了这个问题,每个数据展示和功能都有对应的调用,但是也可以看到app是直接调用的底层。

但是你要知道,一个简单的网页背后的技术一定不是大家所想的那么简单!

大型互联网应用问题:

  • 数据类型太多了!

  • 数据源繁多,经常重构!

  • 数据要改造,大面积改造?就好比你增加了列,是不是在代码中要改很多

 

解决问题:

如果你未来相当一个架构师: 要知道没有什么是加一层解决不了的!

 所以阿里在中间加了一层UDSL,肯定去到阿里学习也只需要学习中间的API如何调用即可,然后图中的Mapping DSL可以自动去映射到对应的数据源。

 缓存问题

 这里以上都是NoSQL入门概述,不仅能够提高大家的知识,还可以帮助大家了解大厂的工作内容!

NoSQL的四大分类

介绍

KV键值对

  • 新浪:Redis(必须掌握)

  • 美团:Redis + Tair

  • 阿里、百度: Redis + Memcache

 

文档型数据库(和bson格式 、json格式一样)

  • MongDB(必须掌握)

    • MongDB是一个基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档!

    • MongoDB是一个介于关系型数据库和非关系型数据库中间的产品!MongDB是非关系型数据库中功能最丰富的,最像关系型数据库的!

  • ConthDB

 

列存储数据库

  • HBase

  • 分布式文件系统

图关系数据库

  • 它不是存图形的,存的是关系,比如:朋友圈社交网络,广告推荐!

  • Neo4j,InfoGrid

四者对比

致力于记录学习过程中的笔记,希望大家有所帮助(*^▽^*)!
原文地址:https://www.cnblogs.com/zxhbk/p/13035671.html