ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

NoSql的相关介绍(数据库的发展)

2020-12-27 23:03:51  阅读:157  来源: 互联网

标签:存储 缓存 NoSql 数据库 介绍 数据 分布式


NoSQql相关的介绍

文章目录


要学习Redis,就必须先对nosql有一定的了解,这篇就是介绍了nosql的相关概念,下一篇介绍redis。

一,NoSql的入门概述

一,数据库的发展历程

1,单机Mysql

90年代,一个网站的访问量不大,更多是静态网页,动态交互类型网站不多,用单个数据库可以轻松应对。此时的数据库模型为:APP----->DAL------>MysqlInstance
在这里插入图片描述

随着社会的发展,数据量增大,动态交互网站增多,出现了如下几个问题:

(1)数据量的总大小,一个机器放不下

(2)数据库的索引,一个机器的内存放不下

(3)访问量(读写混合)一个实例不能承受

2.Memcached(缓存)+Mysql+垂直拆分

这个阶段:使用缓存技术来缓解数据库的压力,优化数据库的结构和索引,最开始比较流行的是用过文件缓存来缓解数据库的压力,但是访问量持续增大的时候,多台web机器通过文件缓存不能共享,而且大量的小文件缓存带来了比较高的IO压力。

Memcached应用而生,Memached是一个独立的分布式的缓存服务器,为多个web服务器提供了一个共享的高性能缓存服务,在Memached服务器上,又发展了根据hash算法来进行多台Memcached缓存服务的扩展,此时的数据库模型为:APP----->DAL-------->Cached------>多个MysqlInstance
在这里插入图片描述

然而出现了如下问题:一致性hash来解决增加或减少缓存服务器导致重新hash带来的大量缓存失效的弊端

3.Mysql主从读写分离

Memcached只能缓解数据库的读取压力,读写集中在一个数据库上让数据库不堪重负,所以大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性

此时数据库模型为
在这里插入图片描述

4.分库分表+水平拆分+MySQL集群

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

所以此时开始流行使用分库分表来缓解写压力和数据增长的扩展问题,Mysql推出了表分区,Mysql Cluster集群
在这里插入图片描述

5.Mysql的扩展性瓶颈

MySQL数据库如果经常存储一些大文本字段,导致数据库表非常大,在做数据库恢复的时候就导致非常慢,不容易快速恢复数据库。

关系数据库很强大,但不能很好应对现在大数据时代的业务场景,Mysql的扩展性很差,而且大数据时代,一些数据之间的关系很复杂(如,人物之间的关系),如果频繁更改表结构,IO压力太大。

所以就发展出了NOSql数据库(非关系型数据结构)

今天的数据结构模型:
在这里插入图片描述

二,NOSql的概述

一,是什么:

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。

随着互联网web2.0网站的兴起,(超大规模和高并发的SNS类型的web2.0),传统的关系型数据库暴露了很多难以克服的问题,而NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。

像人物关系这种类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展

二,能干嘛:

1.易扩展

NoSQL数据库种类繁多,而且去掉了关系数据库的关系特性,数据之间无关系,就非常容器扩展,不必像操作关系型数据那样频繁的修改表结构,在架构的层面上带来了可扩展的能力

2.大数据量高性能

NoSQL数据库都具有非常高的读写性能

原因:

一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,
在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,
是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了

3.多样灵活的数据模型

NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,

4.传统的RDNMS VS NOSQL

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

三,代表的软件

Redis Memcache Mongdb

对解决大数据时代的3V(数据:海量Volume,多样Variety,实时Velocity)和互联网需求的3高(高并发,高可扩,高性能)

四,当下的NoSql的经典应用

当下的应用是sql和nosql一起使用
在这里插入图片描述

(1)多文字信息描述类,IO读写性能变差,这些存储在文档数据库MongDB中

(2)商品的图片展现类,存储在分布式的文件系统中如淘宝自己的TFS,Google的GFS,Hadoop的HDFS

(3)商品的关键字:搜索引擎,淘宝内用ISearch

(4)商品的波段性热点高频信息:内存数据库 Tair,Redis Memcached

(5)商品的交易,价格计算,积分累计:外部系统,外部第三方支付接口

解决方案:

**统一数据服务层UDSL:**在网站应用集群和底层数据源之间,构建一层代理,统一数据层

统一数据层的特性:

(1)模型数据映射:

实现业务模型各属性与底层不同类型数据源的模型数据映射

目前支持关系型数据库:ISearch redis mongodb

(2)统一的查询的更新API

提供了基于业务模型的统一的查询和更新API,简化网站应用跨不同数据源的开发模式

UDSL自动的分析查询/更新参数,并根据模型字段映射配置,转换成底层各数据源的native语句进行数据操作

(3)性能优化策略

字段延迟加载,按需返回设置

基于热点缓存平台的二级缓存

异步并行的查询数据,异步并行加载模式中来自不同的数据源字段

并发保护 :拒绝访问频率过高的主机IP或IP段

过滤高危的查询,例如会导致数据库崩溃的全表扫描
在这里插入图片描述

三,NoSql数据模型简介

对于一个电商客户这样的一个需求。

传统的关系型数据库,设计为ER图,定义表与表之间的对应的关系

而NoSql是利用BSON来设计,BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象

{
 "customer":{
   "id":1136,
   "name":"Z3",
   "billingAddress":[{"city":"beijing"}],
   "orders":[
    {
      "id":17,
      "customerId":1136,
      "orderItems":[{"productId":27,"price":77.5,"productName":"thinking in java"}],
      "shippingAddress":[{"city":"beijing"}]
      "orderPayment":[{"ccinfo":"111-222-333","txnid":"asdfadcd334","billingAddress":{"city":"beijing"}}],
      }
    ]
  }
}

用聚合模型来处理的原因:

聚合模型包含四种:KV键值 Bson 列族 图形

(1)高并发的操作是不太建议由关联查询的,互联网公司用冗余数据来避免关联查询

(2)分布式事务是支持不了太多的并发的

NoSql数据库的四大分类:

1.KV键值

常用的一种数据模型,阿里,百度使用:memache+redis

2.文档型数据库(bson格式比较多):

CouchDB

MongoDB(MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的)

3,列存储数据库

Cassandra,HBase 分布式文件系统

4,图关系数据库:

存放的是复杂的一些网络关系如:朋友圈的社交网络,广告推荐系统

Neo4J InfoGrid

四种模型的对比
在这里插入图片描述在这里插入图片描述

四,在分布式数据库中CAP原理:CAP+BASE

一,传统的ACID

1.A(Atomicity) 原子性

事务里面的所有操作要么全部做完,要么都不做

2.C (Consistency) 一致性

数据库要一直处于一致的状态,事物的运行不会改变数据库原本的一致性约束

3.I (Isolation) 独立性

并发的事务之间不会互相产生影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

4,D (Durability) 持久性

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

二,CAP

1.C:Consistency(强一致性)

2.A:Availability(可用性)

3.P:Partition tolerance(分区容错性)

CAP理论就是说在分布式存储系统中,最多只能实现上面两点,而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须要实现的,我们只能在一致性和可用性之间进行权衡

CA:传统Oracle数据库 RDBMS

​ 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大

AP:大多数网站架构的选择 CouchDB Cassandra DynamoDb Riak

​ 满足一致性,分区容忍性的系统,通常性能不是特别高

CP:Redis Mongdb HBase

​ 满足可用性,分区容忍性的系统,通常可能对一致性要求低一点

三,BASE

BASE其实是下面三个术语的缩写:
基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)

为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。

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

四,分布式和集群的介绍

1分布式:不同的多台服务器上面部署不同的服务模块(工程),他们之间通过Rpc/Rmi之间通信和调用,对外提供服务和组内协作。

2集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。

标签:存储,缓存,NoSql,数据库,介绍,数据,分布式
来源: https://blog.csdn.net/weixin_44389274/article/details/111827952

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有