Nosql 分布式数据库

随着数据量和访问压力的增加,单机数据库无法承受,Nosql 应运而生。Nosql 提供了扩展性、高性能和灵活的数据模型,如键值对、文档存储等。在互联网场景下,Nosql 用于解决高并发、大数据量的问题,例如淘宝使用多种 Nosql 数据库。Nosql 数据库分为键值对、文档型、列存储和图关系数据库等类型。与 SQL 相比,Nosql 放弃了 ACID 的一致性,选择了 CAP 中的 AP 或 CP,以保证系统的高可用性和扩展性。

在之前的学习,以及自己的做练习中,都是只对一个数据库进行操作
在访问量小,数据不多的情况下,这样的设计是没有问题的
BUT

数据库面对的问题:
单个数据库,数据量的增多,对于读写都是同一个数据库,总之就是一点:当你的数据到达一定的量的时候,单机数据库都是扛不住的,频繁的读写也会对数据库造成影响,此时就要采用大量的缓存技术来缓解数据库的压力,优化数据库的结构和索引(数据库结构优化和索引优化是数据库高级技术中的)
数据库的引擎 InnoDB 使用行锁,MyISAM 使用的是表锁.行锁:当前在操作这一行其他对改行的操作就不能进行(进了这个房间就关了门,其他人不能进)

在海量的数据和高并发的访问压力之下,nosql 算是应势而生


以下内容基于nosql 和sql 的不同当前互联网的一些需求介绍nosql

not only sql 泛指非关系型数据库


nosql 的优势

1.Nosql 的特点:

  1. 扩展性:
    1. 数据的存储不需要什么固定的格式(如果是关系型数据库它的横向和纵向是无法无限扩充字段的)
    2. 例如:Redis中的数据都是一堆key-value 值对数据之间是没有关系的,并且对于value 它的类型可以是任意的,使得在架构层面上带来了一定的扩展能力,而关系型数据库你规定了该字段用什么类型的数据就只能使用什么类型的数据
  2. 大数据量的高性能
    例如:Redis 的读写性能是非常好的(每秒读11万,写8万次)
  3. 灵活的数据模型
    在nosql 中无需数据字段的建立,随时可以存储自定义数据格式,而在关系型数据库中增删字段是一个非常麻烦的事情
  4. 存储形式: key-value 键值对存储,列存储,文档存储,图形数据库

2.互联网关键词:

  1. KV Cache persistence
  2. 3高+3V : 海量(Volume) 多样(Variety)实时(Velocity) + 高并发,高可扩,高性能
  3. 高并发:基于海量的数据
  4. 高可扩: 纵向:基于一台机器本身的性能优化,但是纵向的优化是有限的(就算你插CPU你也不能插满吧,那就算插满那也是有限的);横向:一台机器不行就两台…
  5. 高性能: 容灾备份之类的…
    当下nosql 的使用是和sql 一起使用的

3.nosql 的经典场景使用
淘宝,对于这样一个复杂,庞大的网站,面对的数据各式各样(使用了多种nosql 数据库,但是它的程序面向的是一个统一数据服务平台UDSL)

4.nosql 的数据模型简介

  1. sql 中有规定字段的类型,同时关系型数据库中的数据是有一定组织的,一些表与表之间是有十分紧密的关系的,如果在这种情况下要对数据库的字段进行增删,复杂和头度可想而知.强关联的表之间可以多表关联查询,但是在高并发的情况下是不建议进行关联查询.

  2. nosql 中的数据模型是:聚合数据模型;KV/Bson/列族/图形
    在nosql 中比如:mangoDB中的数据模型BSON其实就是和JSON一样的数据串,数据的分开和合并都十分的容易

    例如:复杂的人际关系,亲戚关系如果用传统的表要描述这样的关系是非常吃力的;但是nosql 来表示就要容易的多

    举例对比:一个电商客户,订单,订购物品,地址模型
    关系型数据库的描述:
    在这里插入图片描述
    表与表之间的关系是比较复杂和紧密的
    nosql 使用BSON 进行描述:
    在这里插入图片描述
    区别显而易见

  1. npsql 数据库的四大分类
    1. 键值对------Redis
    2. 文档型数据库(BSON 格式)------MongoDB分布式文件数据库,是介于关系型数据库和非关系型数据库之间的数据库
    3. 列存储数据库
    4. 图关系数据库:不是放图而是放关系的数据库(Neo4J),专注于社交关系等构建图关系
    在这里插入图片描述

SQL 和NoSQL 原理的分析

关键词:ACID CAP 三进二 BASE 分布式/集群

  1. 传统的ACID:A(Atomicity 原子性)C(Consistency 一致性)I(Isonlation 独立性)D(Durability 持久性)
    在这里插入图片描述
  2. 分布式数据库中的CAP
    1. C(Consistency 强一致性) :数据保持高度的一致性例如:在电商平台上点击某个商品,你点在了多少次数据库就精准的记录多少次
    2. A(Availability 可用性) : 具有高可用性 ;可以理解为:在高并发的情况下不会那么容易崩
    3. P(Partition tolerance 分区容错性) : 在nosql 使用中P 是一定要实现的,因为是分布式的数据库,数据库不一定在一起

    cnd :内容分发,会分发离你最近的

  3. CAP 的核心 理论: 对于分布式数据库nosql CAP 只能满足两个(只能3进2)
    1. CA:传统数据库

    2. AP:现目前大多数的网站架构的选择

      例如:在双十二当天对于用户对某个商品的点赞数的统计,按理说应该是用户点赞一次,数据库中就+1 ,但是在双十二数据像洪水一样的时候,数据可以是弱一致性,但是网站不会出问题(可用性)

    3. CP:Redis ,MongoDB
      CA ,AP,CP 之间的关系,CP例如使用Redis 是为保证整个系统的数据大体是一致的,AP则是在某些功能我们暂时对一致性的要求不高,但是要求可用性. CA 就是传统数据库中的保证数据一致

在web 的实时系统中很多时候对读写的一致性要求并不是那么严格,有些场合对读写一致性要求并没有那么高,允许最终实现一致

例如你自己在发说说的时候,你点击发送,首先你自己肯定是马上就能看见的但是对于的你的好友过了几秒或者十几秒你的好友才会看见,但是最终信息好友都会看到,是一致的.此时就是允许弱一致,并最终一致

在大量数据的web 系统中,是十分不建议连表查询的,只有简单的表单主键查询和简单的分页查询才会使用sql ,这样SQL的功能就被弱化了

4. BASE
基本可用,软状态,最终一致性 :它的思想就是通过在某个时刻系统发送对数据一致性的要求来换取系统整体的高可用性(牺牲C 换取CP 最终实现一致性)
5.分布式+集群

  1. 分布式: 在分布式的系统中有一个负载均衡器,会将请求分到不同的tomcat 上, 不同的服务器上部署不一样的服务模块 (就是现在所说的为服务,多提一句:他们之间通过Rpc/Rmi 通信 对外提供服务,组内协调);
  2. 集群: 在不同的服务器上部署一样的服务(例如: 数据库的纵向扩展.实现人多力量大)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值