非关系型数据库和关系型数据库的区别

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》
💬 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

一、数据模型

  1. 关系型数据库(RDBMS)
    • 基于关系模型:关系型数据库采用关系模型来组织数据,以表(Table)的形式存储信息。表由行(Row,也称为记录)和列(Column,也称为字段)组成。例如,一个存储用户信息的表可能有“用户ID”、“姓名”、“年龄”、“电子邮件”等列,每一行代表一个用户的完整信息。
    • 数据关联与约束:表与表之间可以通过主键(Primary Key)和外键(Foreign Key)建立关联。主键用于唯一标识表中的每一行数据,外键用于建立不同表之间的关系。这种关联使得数据具有完整性约束,例如,在一个订单系统中,“订单表”中的“用户ID”字段作为外键与“用户表”中的“用户ID”主键相关联,保证了订单数据与用户数据的一致性。
  2. 非关系型数据库(NoSQL)
    • 多样的数据模型:非关系型数据库没有固定的表结构,其数据模型更加多样化。常见的数据模型包括键 - 值(Key - Value)存储、文档(Document)存储、列族(Column - Family)存储和图形(Graph)存储等。
    • 键 - 值存储示例:以键 - 值存储为例,数据以键值对的形式存在,就像一个巨大的字典。例如,在一个缓存系统中,键可以是一个缓存项的唯一标识符,值可以是缓存的具体内容,如一个网页片段或用户配置信息。
    • 文档存储示例:文档存储中的数据单元是文档,通常以JSON或XML等格式存储。例如,一个博客系统可以将每一篇博客文章存储为一个文档,文档中包含文章标题、作者、内容、发布时间等字段,这些字段的结构可以根据文章的具体需求灵活变化。

二、数据一致性

  1. 关系型数据库
    • 强一致性保证:关系型数据库遵循ACID原则(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)来确保数据的一致性。原子性保证事务中的所有操作要么全部完成,要么全部不完成;一致性确保数据库在事务执行前后始终保持一致状态;隔离性防止不同事务之间的相互干扰;持久性保证一旦事务提交,其对数据库的修改将永久保存。
    • 示例说明:在银行转账系统中,从一个账户转出资金和转入另一个账户这两个操作被视为一个事务。关系型数据库会确保这个事务要么完全成功(两个账户余额都正确更新),要么完全失败(两个账户余额都不变),不会出现只更新一个账户余额的情况,从而保证了数据的强一致性。
  2. 非关系型数据库
    • 不同的一致性级别:非关系型数据库在一致性方面有多种策略,不一定遵循ACID原则。一些非关系型数据库提供强一致性,例如,某些键 - 值存储系统在特定配置下可以保证每次读取的数据都是最新写入的数据。然而,更多的非关系型数据库采用最终一致性(Eventual Consistency)策略。
    • 最终一致性示例:在一个分布式的文档存储数据库中,当数据在不同节点之间进行复制时,可能会出现短暂的数据不一致。例如,在一个全球分布的内容管理系统中,对一篇文档的更新可能首先在一个数据中心完成,然后通过异步复制传播到其他数据中心。在复制过程中,不同用户在不同数据中心访问这篇文档时,可能会看到不同的版本,但最终所有数据中心的数据会达到一致状态。

三、可扩展性

  1. 关系型数据库
    • 垂直扩展为主:关系型数据库在扩展时,通常先考虑垂直扩展,即通过增加服务器的硬件资源(如CPU、内存、存储容量)来提高性能。这种扩展方式在一定程度上能够满足业务增长的需求,但存在硬件资源瓶颈,当数据量和访问量达到一定规模后,单纯的垂直扩展可能会变得非常昂贵且效果有限。
    • 水平扩展挑战:水平扩展(通过添加更多的服务器节点来分担负载)在关系型数据库中相对复杂。因为关系型数据库的数据结构和关联关系复杂,数据的分片(Sharding)和分布式事务处理等操作难度较大。例如,要将一个大型的电子商务订单数据库进行水平扩展,需要精心设计数据分片策略,以确保订单数据及其关联的用户数据、商品数据等在不同节点之间的合理分配,同时还要处理好分布式事务,避免数据不一致。
  2. 非关系型数据库
    • 天生适合水平扩展:非关系型数据库通常设计为易于水平扩展,能够方便地通过添加更多的节点来处理不断增加的数据量和访问量。例如,在一个大规模的键 - 值存储系统中,新的数据可以均匀地分布到新增的节点上,系统可以自动调整数据的分布,以适应负载的变化。
    • 分布式架构优势:许多非关系型数据库采用分布式架构,数据在多个节点之间进行复制和存储。这种分布式特性不仅提高了系统的可扩展性,还增强了系统的可用性和容错性。例如,在一个基于列族存储的大数据存储系统中,数据被分布在多个节点上,即使部分节点出现故障,系统仍然可以通过其他节点提供服务,并且可以自动进行数据恢复和重新平衡。

四、查询语言

  1. 关系型数据库
    • SQL(Structured Query Language):关系型数据库使用SQL作为标准的查询语言。SQL是一种功能强大的声明式语言,能够进行复杂的数据查询、插入、更新和删除操作。例如,可以使用SELECT语句从多个表中检索数据,通过JOIN操作关联不同的表,使用WHERE子句进行条件筛选,使用GROUP BYHAVING进行分组和分组条件筛选等。
    • 示例查询:在一个包含“学生表”(有“学生ID”、“姓名”、“班级ID”等列)和“班级表”(有“班级ID”、“班级名称”等列)的学校数据库中,可以使用以下SQL查询获取每个班级的学生人数:
    SELECT c.class_name, COUNT(s.student_id) AS student_count
    FROM classes c
    JOIN students s ON c.class_id = s.class_id
    GROUP BY c.class_name;
    
  2. 非关系型数据库
    • 因数据模型而异的查询语言或接口:非关系型数据库没有统一的查询语言。对于键 - 值存储,查询通常是通过键来获取值,操作相对简单,可能使用简单的API函数,如get(key)来获取指定键的值。对于文档存储,可能使用类似JSON查询语言(如MongoDB的查询语言),可以通过文档的字段进行筛选和查询。对于图形存储,则有专门的图形查询语言(如Cypher for Neo4j),用于查询节点和边之间的关系。
    • 文档存储查询示例(以MongoDB为例):在一个存储用户文档(包含“姓名”、“年龄”、“爱好”等字段)的MongoDB数据库中,可以使用以下查询获取年龄大于30岁的用户:
    db.users.find({ age: { $gt: 30 } });
    

五、应用场景

  1. 关系型数据库
    • 事务性系统:适用于对数据一致性和完整性要求极高的事务性应用,如银行系统、财务系统、企业资源规划(ERP)系统等。在这些系统中,需要严格保证每一笔交易的准确性和数据的一致性,关系型数据库的ACID特性能够很好地满足这些需求。
    • 结构化数据存储与分析:对于具有明确结构的数据,如员工信息表、订单明细表等,关系型数据库能够方便地进行存储、查询和数据分析。可以使用SQL进行复杂的查询和报表生成,例如,企业可以通过关系型数据库查询每个部门的员工绩效数据、每个产品的销售趋势等。
  2. 非关系型数据库
    • 大数据和高并发场景:在处理海量数据(如互联网公司的用户行为数据、日志数据)和高并发访问(如社交网络的动态消息、电商网站的商品浏览记录)的场景中,非关系型数据库的可扩展性和高性能读写能力优势明显。例如,一个大型社交网络平台可以使用键 - 值存储来缓存用户的频繁访问信息,使用文档存储来存储用户的动态和个人资料,以应对庞大的用户群体和频繁的操作。
    • 灵活的数据模型需求场景:当数据结构不固定或者需要频繁变化时,非关系型数据库的灵活性就体现出来了。例如,在一个内容管理系统中,文章、图片、视频等不同类型的内容可以采用文档存储,每种内容的元数据结构可以根据需要灵活调整,而不需要像关系型数据库那样频繁修改表结构。
    • 图形数据处理:对于涉及图形关系的数据,如社交网络中的用户关系、知识图谱中的实体关系等,图形存储数据库能够更有效地进行存储和查询。通过图形查询语言,可以方便地查找节点之间的路径、最短距离等关系相关的信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redux react-redux @reduxjs/toolkit

redux团队先后推出了redux、react-redux、reduxjs/toolkit,这三个库的api各有不同。本篇文章就来梳理一下当我们需要在项目中集成redux,从直接使用redux,到使用react-redux,再到react-redux和reduxjs/toolkit配合使用,…

【论文+源码】一个基于SSM(Spring + Spring MVC + MyBatis)的公寓电能计量系统

为了实现一个基于SSM(Spring Spring MVC MyBatis)的公寓电能计量系统,我们需要创建一个简单的Web应用程序来记录和显示每个公寓的电能使用情况。以下是一个基本的实现示例。 我们将包括以下几个部分: 数据库表设计实体类DAO层…

将simpletex 识别的公式 复制到ppt 中

1)点击 复制MathML(word) 2)右击粘贴到任意word 中 3)将word公式粘到 office (2019) 的ppt 中 线上识别链接:SimpleTex - Snip & Get!

MATLAB 车牌自动识别系统设计 SVM支持向量机方法 车牌识别

基于支持向量机(SVM)方法的车牌自动识别系统是一种利用SVM算法对车牌进行分类和识别的技术。该系统通过将车牌的图像处理和特征提取与SVM分类相结合,实现车牌的自动检测与识别。 1. 系统概述 车牌自动识别系统旨在从车辆图像中自动识别车牌…

【Redis】集群配置(主从复制 哨兵搭建)

文章目录 集群配置主从复制哨兵搭建 集群配置 Redis 集群提供了三种分布式方案: 主从模式:一个主节点和一个或多个从节点,主节点负责写操作,从节点负责读操作,实现读写分离,分担主节点的压力。 哨兵模式…

“AI人工智能软件开发公司:创新技术,引领未来

大家好!今天我们来聊聊一个充满未来感的话题——AI人工智能软件开发公司。这个公司,用大白话说,就是专门研究和开发人工智能软件的地方,它们用最新的技术帮我们解决问题,让生活和工作变得更智能、更便捷。听起来是不是…

智能客户服务:科技如何重塑客户服务体验

在数字化时代,客户对于服务的需求和期望在不断演变。传统的客户服务模式已经难以满足现代消费者对于即时性、个性化和高效性的追求。随着人工智能、大数据、云计算等先进技术的蓬勃发展,智能客户服务应运而生,不仅重塑了客户服务的体验&#…

AI 驱动研发模式升级,蓝凌软件探索效率提升之道

深圳市蓝凌软件股份有限公司(以下简称蓝凌软件),自2001年成立以来,一直走在数智化办公领域的前沿。作为国家认定的高新技术企业、知识管理国家标准的参编者以及信创供应商10强之一,蓝凌软件始终以“让组织更智慧”为使…

【leetcode100】二叉树的中序遍历

1、题目描述 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 2、初始思路 2.1 思路 中序遍历的顺序是左→根→右,定义一个函数进行遍历 # Definition for …

折旧后将成本中心折旧费调整到订单中

背景:设备原作为通用设备,按成本中心折旧,在12月月结正常折旧后才明确为专用设备,需要按内部订单折旧。 问:折旧能不能冲销。 回复: 在SAP中,折旧凭证是无法直接冲销的。如果折旧计提有误&#…

YOLO11改进 | 卷积模块 | ECCV2024 小波卷积

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文给大家带来的教程是将YOLO11的Conv替…

Vue 3.0 中封装icon组件使用外部SVG图标

通常在企业级项目开发时,所使用的 icon 图标,一共分为两类: 1. element-plus 的图标 2. 自定义的 svg 图标 对于 element-plus 的图标我们可以直接通过 el-icon 来进行显示,但是自定义图标的话却无法正常显示,所以就…

MySQL数据库笔记——多版本并发控制MVCC

大家好,这里是Good Note,关注 公主号:Goodnote,本文详细介绍MySQL的并发控制:多版本并发控制MVCC。 文章目录 背景介绍数据库并发控制——锁机制悲观锁和乐观锁悲观锁乐观锁 数据库并发控制——MVCC 的引入MVCC 和锁机…

PDF怎么压缩得又小又清晰?5种PDF压缩方法

PDF 文件在日常办公与学习中使用极为频繁,可想要把它压缩得又小又清晰却困难重重。一方面,PDF 格式本身具有高度兼容性,集成了文字、图像、矢量图等多样元素,压缩时难以兼顾不同元素特性,稍不注意,文字就会…

面向机器学习的Java库与平台

学习Java语言中与机器学习相关的各种库与平台,了解每个库的功能,以及可以用它 们解决的问题。  实现机器学习应用时需要具备的Java环境  Weka:一个通用的机器学习平台  Java机器学习库:一系列机器学习算法  Apache Mah…

前端CSS3学习

学习菜鸟教程 火狐-moz- 谷歌 Safari -webkit- 前面都加这个,可能才生效 边框 border: 1px solid #ddd 粗细 样式 样色 经常和border-radius 一块用 border-radius: 50px 20px 第一个左右 第二个右左 border-top-left-radius … box-shadow: 10px 5px 10px 0 #88…

【LoRa】长交织Long Interleaver

目录 1 前言2 CR与长交织3 小结 1 前言 在使用Semtech的第三代LoRa芯片(LR11xx系列)配置参数时,可能会注意到参数CR多出了Long Interleaver参数选项,截取lr11xx_driver代码片段如下: /*!brief LoRa Coding Rate conf…

HAL 库------中断相关函数

HAL_SuspendTick();是对SysTick中CTRL寄存器中TICKINT位清0 HAL_ResumeTick(); 刚好与上面函数相反,对SysTick中CTRL寄存器中TICKINT位置1,恢复stick中断。

IntelliJ Idea常用快捷键详解

文章目录 IntelliJ Idea常用快捷键详解一、引言二、文本编辑与导航1、文本编辑2、代码折叠与展开 三、运行和调试四、代码编辑1、代码补全 五、重构与优化1、重构 六、使用示例代码注释示例代码补全示例 七、总结 IntelliJ Idea常用快捷键详解 一、引言 在Java开发中&#xff…

RabbitMQ端口操作

1、什么是RabbitMQ RabbitMQ 是一种可靠且成熟的消息传递和流式处理代理,易于部署在云环境、本地和本地计算机上。目前,全球有数百万人在使用它。 RabbitMQActiveMQRocketMQKafka公司/社区RabbitApache阿里Apache开发语言ErlangJavaJavaScala&Java…