NoSQL数据库(林子雨慕课课程)

news2024/11/17 21:34:44

文章目录

      • 5.1 NoSQL数据库
      • 5.2 NoSQL和关系数据库的比较
      • 5.3 四大类型NoSQL数据库
        • 5.3.1 键值数据库和列族数据库
        • 5.3.2 文档数据库、图数据库、以及不同数据库比较分析
      • 5.4 NoSQL数据库的理论基石
          • CAP理论:
          • BASE理论:
          • Eventual consistency(最终一致性):
      • 5.5 从NoSQL到NewSQL数据库
      • 5.6 文档数据库MongoDB

5.1 NoSQL数据库

NoSQL兴起原因1:关系型数据库无法满足Web2.0的需求

  • 很多非关系型数据可以作为关系型数据的补充,很多业务场景下需要用到非关系型数据库

    image-20231008215309852

  • NOSQL数据库特点

    • 灵活的可扩展性:有非常强大的水平可扩展性,可以支持在多个机器上水平扩展

    • 灵活的数据模型

    • 和云计算的紧密结合:

      • 云计算基础设施可以根据负载实时变化,来对底层的IT设施进行动态伸缩,负载增加可以将更多机器加入集群,如果负载减少,可以将相关的机器退出;

      • 传统关系型数据库的纵向可扩展性受到一定的限制,在水平可扩展性更是不具备这个特性,不能和云计算紧密结合

      • NoSQL在设计之初就考虑到了它的水平可扩展性,和云计算是紧密结合的

  • 传统关系型数据库在性能上的缺陷

    • 无法满足海量数据的管理需求
    • 无法满足高并发的需求
      • 因为动态数据无法提前生成,不能提前生成一个静态网页让用户来访问,只能实时地根据用户的请求来实时的生成数据
      • 这种实时生成的数据,对数据库的负载非常高
      • 基本上用关系型数据库是无法满足高并发的需求
    • 无法满足高扩展性和高可用性的需求
      • 中小型企业通过mysql集群方式的缺陷
        • 复杂性:整个集群部署非常负载
        • 延迟性:当主库的压力较大时,就会带来较大的延迟
        • 扩容问题:当集群压力过大时,需要增加新机器对整个数据集进行重新分区,非常复杂
        • 动态迁移:在集群使用过程中出现有些分库的负载重,有些分库的负载轻,这时候需要负载均衡,实现数据迁移,需要集群的总控节点来协调数据迁移过程,整个过程需要人工实现,很难实现其自动化

NoSQL兴起的原因2:数据模型的局限性

  • 有些在线业务强调低延时,有些数据分析业务强调高吞吐率,场景不同对于数据架构提出的要求不同,用同一个数据模型适应不同业务场景是不切实际的

  • 因此根据不同的业务需求研究出了不同的产品:例如Hadoop 用于数据分析、批处理;MongDB,Redis用于在线业务
    image-20231008222007592

NoSQL兴起的原因3:Web2.0关系型数据库的许多特性没有发挥

  • 关系型数据库有着完善的事务机制,以及高效的查询机制,但这两个优势在Web2.0无法发挥

    image-20231008222228282

  • Web2.0用更多的存储空间换取更好的性能

    image-20231008222421252

5.2 NoSQL和关系数据库的比较

  • 关系数据库和NoSQL比较

    • 在数据库原理方面

      • 关系型数据库:具有完备的关系代数理论作为基础
      • NoSQL数据库:缺乏理论基础
    • 数据规模

      • 关系型数据库:很难实现横向扩展,纵向扩展非常有限
      • NoSQL数据库:具有非常好的水平可扩展性
    • 在数据库模式方面:

      • 关系型数据库:要定义严格的数据库模式,而且要严格遵守事先定义的数据库模式
      • NoSQL数据库:数据模型非常灵活
    • 在查询效率方面:

      • 关系型数据库:适当数量级查询效率高,当数量级增大时,查询效率下降
      • NoSQL数据库:未构建面向复杂查询的索引,因此查询性能较差
    • 在事务一致性方面:

      • 关系型数据库:遵循ACID实物模型可以保证事务的强一致性
      • NoSQL数据库:未构建面向复杂查询的索引,因此查询性能较差;NoSQL采用Base模型,很多NoSQL数据库只能保证最终一致性,不能保证强一致性
    • 在数据库完整性方面:

      • 关系型数据库:具有保证完整性的完备机制
      • NoSQL数据库:不能实现完整性约束
    • 在可扩展性方面:

      • 关系型数据库:扩展性一般是比较差的
      • NoSQL数据库:水平扩展性非常好
    • 在可用性方面:

      • 关系型数据库:随着规模增大,为了保证严格的一致性,可用性方面就削弱
      • NoSQL数据库:具有非常好的可用性,能够在短时间内迅速返回所需要的结果
    • 在标准化方面:

      • 关系型数据库:关系型数据库遵循SQL标准,标准化比较完善,不同厂家数据库可以相互访问,导入导出
      • NoSQL数据库:未形成通用的行业标准
    • 在技术支持方面:

      • 关系型数据库:关系型数据库很多都是商业数据库,可获得非常强大的技术和后续服务支持
      • NoSQL数据库:NoSQL数据库很多都属于开源产品,处于整个发展的初期阶段
    • 在可维护方面:

      • 关系型数据库:关系型数据库需要管理员维护
      • NoSQL数据库:没有成熟的基础和实践操作,维护较为复杂
  • 关系数据库的优势与劣势

    • 优势

      image-20231009124857519

    • 劣势

      image-20231009124935133

  • NoSQL数据库的优劣势

    image-20231009125043256

  • 两种数据库的应用场景

    image-20231009125130142

5.3 四大类型NoSQL数据库

  • 四大类型NoSQL数据库

image-20231009142847996

  • 举例

image-20231009142923963

5.3.1 键值数据库和列族数据库
  • 键值数据库

    • 相关产品:Redis、Memcached、SimpleDB(云端产品)

    • 数据模型:键是一个字符串对象,值可以是任意类型的数据、比如整型字符型、数组、列表、集合等

    • 典型应用:涉及频繁读写、拥有简单数据模型的应用、内容缓存、如会话、配置文件、参数、购物车等,存储配置和用户信息等移动应用

    • 优点:扩展性好、灵活性号、大量写操作性能高

    • 缺点:无法存储结构化信息,条件查询效率较低

    • 不适用的场景:

      • 键值数据库根本没有通过值查询的途径;
      • 在键值数据库中,不能通过两个或者两个以上的键来关联数据;
      • 在一些键值数据库中中产生故障时,不可以回滚
    • 使用者:百度云数据库(Redis)

    • 键值数据库的应用

      • 键值数据库成为缓冲区,将经常访问的数据放入缓冲层

      image-20231009144015726

  • 列族数据库

    • 相关产品:BigTable、HBase(master-slave架构)、Cassandra(p2p架构)
    • 数据模型:列族
    • 典型应用:
      • 适用于分布式数据存储与管理(尤其适用于海量数据存储管理,水平扩展性质好)
      • 数据在地理上分布于多个数据中心的应用程序
      • 可以容纳副本存在短期不一致情况的应用程序
      • 拥有动态字段的应用程序
    • 优点:查找速度快、可扩展性强、容易进行分布式扩展、复杂性低
    • 缺点:功能较少,大多不支持强事务一致性
    • 不适用场景:需要ACID事务支持的情形,Cassandra等产品就不适用
    • 使用者:Facebook(HBase)、Yahoo(HBase)
5.3.2 文档数据库、图数据库、以及不同数据库比较分析
  • 文档数据库

    • 也是一种键值数据库,值为文档,关系数据库中的每一行记录,其实就是一个文档

    • 特性:可以对自己的数据的内容和类型进行自我描述

      image-20231009144918247

    • 文档数据库的数据格式:JSON格式

    • 其拥有更好的并发性:

      image-20231009145054712

    • 相关产品:MongDB、CouchDB

    • 数据模型:就是一个键值、本质是以键值数据库、只不过值时版本化文档

    • 典型应用:存储、索引并管理面向文档的是数据、或者类似的半结构化数据

    • 优点:性能好(高并发),灵活性高,提供嵌入式文档功能,将经常查询到的数据存储在同一个文档中

    • 缺点:缺乏统一的查询语法

    • 不适用情形:文档是巨苦不支持文档间的事务,如果对这方面有需求则不应该选择这个解决方案

    • 使用者:百度云数据库(MongDB)

  • 图数据库

    • 相关产品:Neo4j

    • 数据模型:图结构

    • 典型应用:专门用于处理具有高度相互关联关系的数据,比较适合于社交网络、模式识别、依赖分析、推荐系统以及路径寻找等问题

    • 优点:灵活性高、支持复杂的图形算法,可用于构建复杂的关系图谱

    • 缺点:数据模型应用范围非常有限

  • 四大类型数据库的比较

    image-20231009145959424

5.4 NoSQL数据库的理论基石

  • NoSQL数据库的三个理论基石:CAP、BASE、最终一致性
CAP理论:
  • Consistency 一致性:指任何一个读操作总能读到之前完成的写操作的结果

  • Availability 可用性:指快速获取数据、可以在确定的时间内返回操作结果,保证每个请求不管成功失败都有响应

  • Partition tolerance 分区容忍性:指当出现网络分区的情况时(即系统中的一部分节点无法和其他节点进行通信)分离的系统也能正常运行

    image-20231009150453082

  • 一个分布式系统最多满足这三个需求中的两个:

    image-20231009150617173

  • 牺牲一致性来换取可用性的例子:

    • 假设有两台机器M1和M2,M1上有副本V1,M2上有副本V2,以及两个进程P1,P2

    image-20231009150812146

    • 假设M1上有一个进程对副本P1进行更新操作,需要将更新后的值传播到M2机器,进程P2将其从副本v2中读出

      image-20231009151113261

    • 假设在更新值的传播过程中断,如果要保证可用性,进程p2立即读取v2的值,读到的肯定是不一致的数据;如果需要保证一致性,就一直等到故障恢复后,再从v2中读取数据,中间可能过去了很长时间,无法保证可用性

  • 在面对CAP理论的时有以下几种选择:

    • CA:放弃分区容忍性

    • CP:放弃可用性

    • AP:放弃一致性

      image-20231009151559463

  • 不同产品在CAP理论下的不同设计原则

    image-20231009151703254

BASE理论:
  • BASE:是Basically Available Soft state和Eventual consistency的简写,意思为“碱”

  • ACID:是关系型数据库的事务的四个性质,NoSQL中的BASE(j碱)和ACID(酸)是对应关系

  • Basically Available:指当分布式系统的一部分发生问题变得不可用时,其他部分仍然可以正常使用、也就是允许分区失败的情形出现

  • Soft state(软状态):

    • 硬状态:要求数据库的状态必须一直保持数据一致性,就是任意时刻的数据都是正确的
    • 软状态:指状态可以有一段时间不同步,具有一定的滞后性
Eventual consistency(最终一致性):
  • 强一致性:执行一个更新操作之后,后续的其他操作都能读到你更新的最终数据

  • 弱一致性:执行一个更新操作之后,后续的其他操作不能读到你更新的最终数据;弱一致性可能有一段时间的不一致,但是最终会达到一致状态

    image-20231009152554454

  • 最终一致性:根据更新数据后各进程访问到数据的时间和方式不同,可以区分为

    • 因果一致性

    • “读己之所写”一致性

    • 单调读一致性

    • 会话一致性

    • 单调写一致性

      image-20231009152907976

      image-20231009152953891

  • 如何实现各种类型的一致性?

    • 假设有一个分布式系统:为了实现它的可靠性,要对数据进行冗余存储

    • 假设N表示数据冗余的份数、W表示更新数据时需要保证写完成的节点数,R表示读取数据的时候需要读取的节点数

      image-20231009153751138

  • 实例:

    image-20231009153906443

5.5 从NoSQL到NewSQL数据库

  • 数据库发展

image-20231009154302857

  • 应用场景

    image-20231009154352962

  • NewSQL数据库同时具备OldSQL数据库和NoSQL数据库各自的优点

    • 具有非常好的水平可扩展性

    • 具有强一致性

    • 具有事务一致性

    • 支持SQL查询

    • 支持海量的数据存储

  • 关系型数据库、NoSQL和NewSQL数据库产品分类图

    image-20231009154642028

5.6 文档数据库MongoDB

  • MongoDB简介

    • MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统

    • 在高负载的情况下,添加更多的节点,可以保证服务器性能

    • MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案

    • 文档结构:数据结构由键值对组成的MongoDB文档类似于JSON对象

      image-20231009155054221

  • MongoDB特点:

    • 提供一个面向文档存储,操作起来比较简单和容易
    • 可以设置任何属性的索引,实现更快的排序
    • 具有较好的水平可扩展性
    • 支持丰富的查询表达式,可查询文档中内嵌的对象及数组
    • 可替换已完成文档某个指定的数据字段
    • MongoDB中的MapReduce主要是用来对数据进行批处理和聚合操作
    • 安装过程简单
  • MongoDB的概念解析:

    image-20231009155443019

  • 实例:

    image-20231009155540085

  • 关系数据库设计以及MongDB设计实例

    • 关系表的设计可能设计多表连接查询

    image-20231009155632197

    • MongDB使用一个文档就能表现这些信息

      image-20231009155819389

  • MgonDB数据库相关结构内容

    • 一个MongDB中可以建立多个数据库
    • MongoDB的默认数据库为“db”,该数据库存储在data目录中
    • MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限不同的数据库也放置在不同的文件中
  • 文档概念:

    image-20231009160059554

  • RDBMS与MongoDB对应术语

    image-20231009160208921

    image-20231009160240991

  • 集合概念:集合类似于RDMS中的表格image-20231009160447367

  • MongoDB shell访问MongoDB

    image-20231009160634046

  • 使用JAVA程序访问MongoDB

    • 环境配置

      image-20231009160726403

    • 连接数据库

      image-20231009160746645

    • 创建集合

      image-20231009160837342

    • 插入文档

      image-20231009160909926

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1077513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stretched mesh

https://www.particleincell.com/2015/stretched-mesh/

2023年中国光子嫩肤行业市场规模及市场格局分析[图]

随时间推移,光子嫩肤行业朝着功效提升和风险降低的方向发展,所使用的强脉冲光技术不断升级革新。因此,在原有的强脉冲光子嫩肤项目基础上,延伸出完美强脉冲光技术、窄谱强脉冲光技术应用的光子嫩肤细分品类。 光子嫩肤分类 资料来…

绘制一个五角红星图形(Python)

#Five_Star.py from turtle import * #导入turtle库 pensize(10) #设置画笔的宽度 begin_fill() #开始绘画 pencolor(red) #设置画笔颜色 fillcolor(yellow) #设置填充颜色 for i in range(5): #设置一个…

【C++】运算符重载案例 - 字符串类 ② ( 重载 等号 = 运算符 | 重载 数组下标 [] 操作符 | 完整代码示例 )

文章目录 一、重载 等号 运算符1、等号 运算符 与 拷贝构造函数2、重载 等号 运算符 - 右操作数为 String 对象3、不同的右操作数对应的 重载运算符函数 二、重载 下标 [] 运算符三、完整代码示例1、String.h 类头文件2、String.cpp 类实现3、Test.cpp 测试类4、执行结果 一…

多线程(线程互斥)

抢票代码编写 学习了前面有关线程库的操作后,我们就可以模拟抢票的过程 假设我们创建四个线程,分别代表我们的用户 然后设定总票数为1000张,四个线程分别将进行循环抢票操作,其实就是循环对票数进行打印,并进行对应的…

【小记】Java将字符串中的EL表达式动态转换为Map中的值

项目中碰到了这样的问题&#xff0c;例如数据库中有一个字符串模版如下&#xff1a; ${userNamme}开启了一个新的${project}我们要替换里面的${}表达式&#xff0c;来实现动态的生成完整的信息~实现方式很简单如下&#xff1a; 引入pom依赖&#xff1a; <dependency>&l…

【附代码】使用Shapely计算多边形外扩与收缩

文章目录 相关文献效果图代码 作者&#xff1a;小猪快跑 基础数学&计算数学&#xff0c;从事优化领域5年&#xff0c;主要研究方向&#xff1a;MIP求解器、整数规划、随机规划、智能优化算法 本文档介绍如何使用 Shapely Python 包 计算多边形外扩与收缩。 如有错误&…

软件测试面试,5年测试工程师竟被面试官10分钟pass,这些问题一定要注意啊!

随着软件测试领域对于技术要求越来越清晰&#xff0c;到现在测试人员在市场上的岗位需求也变得越来越复杂。极大部分的企业都开始对自动化测试岗位有了更多的需要。自然而然&#xff0c;面试就相对于非常重要了。 网络上有着各式各样的测试框架的存在&#xff0c;我也不知道我…

Mall脚手架总结(三) —— MongoDB存储浏览数据

前言 通过Elasticsearch整合章节的学习&#xff0c;我们了解SpringData框架以及相应的衍生查询的方式操作数据读写的语法。MongoDB的相关操作也同样是借助Spring Data框架&#xff0c;因此这篇文章的内容比较简单&#xff0c;重点还是弄清楚MongoDB的使用场景以及如何通过Sprin…

LeetCode862 和至少为k的最短子数组

题目&#xff1a; 解析&#xff1a; 1、先构造前缀和数组 2、单调队列存放滑动窗口&#xff0c;目的求Sj-Si >k的情况下&#xff0c;窗口最小。 代码&#xff1a; class Solution {public int shortestSubarray(int[] nums, int k) {int n nums.length;long[] sums new …

网工内推 | base郑州,上市公司,最高15薪,五险一金全额缴

01 四方达 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责公司数据中心&#xff08;机房&#xff09;的管理与运维工作。 2、负责公司服务器、路由器、防火墙、交换机等设备的管理、以及网络平台的运行监控和维护&#xff1b; 3、负责公司服务器运维管理工作、…

Git相关知识(1)

目录 1.初识Git 1.基础知识 2.centos中下载 2.基本操作 1.创建本地仓库 2.配置本地仓库 3.版本库、工作区、暂存区 4.添加文件 5.add和commit对git文件的作用 6.修改文件 7.版本回退 8.撤销修改 9.删除文件 3.分支操作 1.HEAD与分支 2.创建分支 3.删除分支 …

python中TagMe包的token获取

草&#xff0c;找了40分钟&#xff01;帮助大家少浪费时间。 1.注册Tagme&#xff0c;注册地址https://services.d4science.org/home &#xff08;我用邮箱注册一直说验证码不对&#xff0c;最后用Google账号注册的&#xff09; 2.找sobigdata 3.进入sobigdata后&#xff0c;…

17基于matlab卡尔曼滤波的行人跟踪算法,并给出算法估计误差结果,判断算法的跟踪精确性,程序已调通,可直接运行,基于MATLAB平台,可直接拍下。

17基于matlab卡尔曼滤波的行人跟踪算法&#xff0c;并给出算法估计误差结果&#xff0c;判断算法的跟踪精确性&#xff0c;程序已调通&#xff0c;可直接运行&#xff0c;基于MATLAB平台&#xff0c;可直接拍下。 17matlab卡尔曼滤波行人跟踪 (xiaohongshu.com)

MySQL总结练习题

目录 1.准备数据表 2.表之间的关系 3.题目 3.1 取得每个部门最高薪水的人员名称 3.2 哪些人的薪水在部门的平均薪水之上 3.3 取得部门中&#xff08;所有人的&#xff09;平均的薪水等级 3.4 不准用组函数&#xff08;Max &#xff09;&#xff0c;取得最高薪水 3.5 取…

Java基础之反射机制

背景&#xff1a;Java程序中的所有对一项都有两种类型&#xff1a;编译时类型和运行时类型&#xff08;由于多态导致的&#xff09;&#xff0c;这可能会导致对象的编译时类型和运行时类型不一致。 反射&#xff08;Reflection&#xff09;是被是为动态语言的关键&#xff0c;反…

速通Redis基础(二):掌握Redis的哈希类型和命令

目录 Redis 哈希类型简介 Redis 哈希命令 HSET HGET HEXISTS HDEL HKEYS HVALS HGETALL HMGET HLEN HSETNX ​编辑 HINCRBY HINCRBYFLOAT Redis的哈希类型命令小结 Redis 是一种高性能的键值存储数据库&#xff0c;支持多种数据类型&#xff0c;其中之…

jdbc+数据连接池

1.1 JDBC概念 JDBC 就是使用Java连接并操作数据库的一套API 全称&#xff1a;( Java DataBase Connectivity ) Java 数据库连接 1.2 JDBC优势 可随时替换底层数据库&#xff0c;访问数据库的Java代码基本不变 以后编写操作数据库的代码只需要面向JDBC&#xff08;接口&…

如何在Windows系统搭建VisualSVN服务并在公网远程访问【内网穿透】

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写&#xff0c;是一个开放源代码的版本控制系统…

尚品甄选2023全新SpringBoot+SpringCloud企业级微服务项目

最适合新手入门的SpringBootSpringCloud企业级微服务项目来啦&#xff01;如果你已经学习了Java基础、SSM框架、SpringBoot、SpringCloud&#xff0c;想找一个项目来实战练习&#xff1b;或者你刚刚入行&#xff0c;需要可以写到简历中的微服务架构项目&#xff01; 项目采用前…