关系型非关系型数据库区别,以MongoDB为例在express中连接MongoDB示例
目录
关系型数据库
关系型数据库常见的类型有:
关系型数据库的优点包括:
非关系型数据库
非关系型数据库常见的类型有:
非关系型数据库的特点包括:
关系型数据库和非关系型数据库区别
MongoDB是什么
MongoDB优势:
在Express中连接MongoDB步骤
Schema
关系型数据库
关系型数据库是以关系模型为理论基础的一类数据库系统。其基本原理是在关系模型的基础上,采用结构化的方式存储数据,以表格的形式存储。最常见的关系型数据库有 Oracle、MySQL、Microsoft SQL Server、PostgreSQL等。
关系型数据库的数据存储方式可以看做是一张张的表格,这些表格可以有多个列,每个列代表了一个数据项,每一行则代表了具体的数据记录。当需要对数据进行查询时,通过 SQL(Structured Query Language)语句来实现。SQL是一种标准化的查询语言,可以用来增、删、改和查数据。
关系型数据库常见的类型有:
1. MySQL:MySQL 是一种开源的关系型数据库管理系统,支持事务处理和 ACID(原子性、一致性、隔离性和持久性)特性。
2. Oracle:Oracle 是一种商用的关系型数据库管理系统,主要用于企业级应用。它包括了完整的事务处理、分布式处理和高可用性特性。
3. Microsoft SQL Server:Microsoft SQL Server 是微软公司推出的商用关系型数据库管理系统,适用于 Windows 平台。
4. PostgreSQL:PostgreSQL 是一种开源的关系型数据库管理系统,它提供了广泛的数据类型、函数和操作符,以及支持完整事务和并发控制等功能。
5. SQLite:SQLite 是一种轻量级的关系型数据库,常用于移动设备和嵌入式系统等场景。它支持许多 SQL 语言的特性,同时具有小巧、易部署、易维护的特点。
关系型数据库的优点包括:
1. 数据之间的联系可以用关系来描述,并在关系之间保持一致性。
2. 数据的描述性要求较低,使用起来比较方便。
3. 在数据逻辑结构简单的情况下,数据的增删改查性能比较高。
4. 处理的数据量相对来说较小,安全性较高,备份容易。
5. 可以进行事务控制和数据完整性的保护。
非关系型数据库
非关系型数据库(NoSQL)是指与传统的关系型数据库不同的一类数据库系统。与关系型数据库基于表格和 SQL 的结构化模式不同,非关系型数据库采用了不同的数据模型和存储方式,以适应不同的需求和场景。
非关系型数据库常见的类型有:
1. 键值存储数据库(Key-Value Store):将数据存储为键值对的形式,类似于字典或映射。示例包括 Redis、Riak 等。
2. 文档数据库(Document Store):将数据存储为文档的形式,通常使用 JSON 或类似的格式。示例包括 MongoDB、CouchDB 等。
3. 列族数据库(Column Family Store):将数据存储为列族的形式,类似于关系型数据库中的表,但具有更大的灵活性。示例包括HBase、Cassandra 等。
4. 图形数据库(Graph Database):将数据存储为图的形式,以节点和边的方式组织数据结构,并支持高效的图查询操作。示例包括Neo4j、OrientDB 等。
非关系型数据库的特点包括:
1. 可扩展性:非关系型数据库通常具备良好的可扩展性,可以方便地进行横向扩展以应对大规模数据和高并发的需求。
2. 高性能:非关系型数据库通常以高性能为目标,针对不同的数据模型和查询方式进行了优化。
3. 灵活的数据模型:非关系型数据库支持各种不同的数据模型,能够适应不同的应用场景和数据结构。
4. 弱化的一致性:非关系型数据库有时会放宽一致性要求,以达到更高的可用性和性能。
5. 存储方式多样:非关系型数据库可以选择不同的存储方式,如内存、磁盘、分布式文件系统等。
非关系型数据库适用于需要处理大量非结构化或半结构化数据、需要高度可扩展性和灵活性、以及需要高性能和低延迟的应用场景。然而,在某些特定的查询需求和复杂的事务控制方面,非关系型数据库可能不如关系型数据库表现出色。因此,选择何种类型的数据库还需根据具体的应用需求和场景来决定。
关系型数据库和非关系型数据库区别
关系型数据库和非关系型数据库(NoSQL)在数据模型、存储方式和使用场景等方面有一些区别。
1. 数据模型:关系型数据库采用基于表格的结构化数据模型,数据以行和列的形式组织,关系通过外键进行连接。而非关系型数据库则支持多种数据模型,如键值对、文档、列族和图等,更加灵活适应不同的数据结构。
2. 存储方式:关系型数据库通常使用固定模式的表格来存储数据,表格的架构需要事先定义,数据需要满足特定的结构和约束。而非关系型数据库则较为灵活,可以存储半结构化和非结构化的数据。
3. 可扩展性:关系型数据库在处理大规模数据和高并发的情况下,通常需要通过复制和分区等技术来实现扩展,但扩展性有限。非关系型数据库则具备良好的扩展性,可以通过水平扩展(添加更多节点)或垂直扩展(增加节点的资源)来应对大规模数据和高并发的需求。
4. 数据一致性:关系型数据库强调数据的一致性和完整性,支持 ACID(原子性、一致性、隔离性和持久性)事务保证数据的可靠性。非关系型数据库则更加倾向于弱化一致性要求,以换取更高的性能和可用性。
5. 查询语言:关系型数据库使用 SQL(Structured Query Language)作为标准查询语言,支持复杂的查询、连接和聚合操作。非关系型数据库则没有通用的查询语言,查询和操作语法由每个数据库所提供的接口和工具决定。
6. 使用场景:关系型数据库适用于需要高度结构化数据和复杂查询的场景,如企业应用、事务处理、数据分析等。非关系型数据库则适用于大规模数据的存储和处理,如大数据、实时日志、社交网络等。
MongoDB是什么
MongoDB是一种开源的文档型数据库管理系统,使用JSON-like的BSON(Binary JSON)格式来存储数据。它是非关系型数据库(NoSQL)的一种类型,以可扩展、灵活的数据模型和高性能而闻名。
MongoDB的设计目标是提供易用性、可扩展性和高性能。它没有严格的预定义模式,数据存储在名为集合(Collection)的文档容器中,并且每个文档可以有不同的结构和字段。这使得MongoDB非常适合存储半结构化和非结构化的数据,同时也方便了数据模型的更改和增量开发。
作为一个文档型数据库,MongoDB提供了强大的查询和索引功能,能够进行复杂的查询操作,还支持各种聚合管道操作。它还能够进行水平扩展,通过分片(Sharding)将数据分布在多个节点上以满足大规模的存储需求和高并发访问。
MongoDB广泛应用于多个领域和场景,如Web应用程序的后端存储、实时分析、移动应用程序的数据持久化和互联网的大数据平台等。它提供了多种编程语言的驱动程序和丰富的工具生态系统,使开发人员能够轻松地与数据库进行交互和管理。
MongoDB优势:
-
灵活的数据模型:MongoDB使用文档型数据模型,数据以类似JSON的BSON(Binary JSON)格式存储,可以灵活地表示复杂的层次结构和嵌套数据。
-
高性能:MongoDB具有快速的读写性能,支持水平扩展,可以通过横向增加服务器来提高系统的性能和吞吐量。
-
高可用性:MongoDB支持数据复制和故障转移,可以配置成多个副本集,当主服务器发生故障时自动切换到备用服务器,提供高可用性和数据冗余。
-
强大的查询功能:MongoDB支持丰富的查询语法,包括灵活的查询条件、索引和聚合管道等,能够满足各种复杂的查询需求。
-
高扩展性:MongoDB支持水平扩展,可以通过分片(Sharding)方式将数据分布在多个服务器上,以应对大规模数据存储和高并发访问的需求。
-
易用性和开发效率:MongoDB的操作和查询语法较为简单和直观,对于开发人员来说比较友好,同时还提供了丰富的驱动程序和开发工具,加快了开发效率。
-
社区支持和生态系统:MongoDB拥有庞大的开发者社区和活跃的生态系统,提供了丰富的文档、教程和各种第三方工具和库,方便开发者学习和使用。
在Express中连接MongoDB步骤
-
首先,安装所需的依赖库。在项目文件夹中打开终端,并执行以下命令:
npm install mongoose -
在Express应用程序的入口文件(一般是app.js或index.js)中引入所需的模块:
const express = require('express'); const mongoose = require('mongoose'); -
建立与MongoDB数据库的连接。在代码的合适位置,使用
mongoose.connect()方法来连接数据库。你需要提供数据库的URL地址以及任何其他的连接选项。示例代码如下:const mongoDBUrl = 'mongodb://localhost:27017/mydatabase'; // 替换为实际的数据库URL mongoose.connect(mongoDBUrl, { useNewUrlParser: true, useUnifiedTopology: true }).then(() => {console.log('MongoDB连接成功!');}).catch((error) => {console.error('MongoDB连接失败:', error);}); -
使用
mongoose.connection对象来监听连接状态。你可以添加事件监听器,以便在连接成功或失败时执行相应的操作。示例代码如下:const db = mongoose.connection; db.on('error', console.error.bind(console, 'MongoDB连接错误:')); db.once('open', () => {console.log('MongoDB连接已建立!'); }); -
现在,你可以在Express应用程序中使用
mongoose模块进行数据库操作了。例如,定义模型、创建文档、执行查询等等。
Schema
在关系数据库中,Schema(模式)是用于定义数据库中表、字段、关系和约束的结构。它描述了数据库的布局和组织方式,以及数据存储和查询的规则。
在MongoDB和Mongoose中,Schema是指定义MongoDB文档结构的对象。它定义了文档中的字段、类型、验证规则和默认值等信息。通过使用Schema,你可以确保MongoDB文档具有一致的结构,并对字段值进行验证。
在Mongoose中,你可以使用mongoose.Schema方法创建一个新的Schema实例。示例代码如下:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;const userSchema = new Schema({name: {type: String,required: true},age: {type: Number,default: 0},email: {type: String,required: true,unique: true},// 可以定义其他字段
});const User = mongoose.model('User', userSchema);
在上面的例子中,我们创建了一个User模型,它基于userSchema定义。userSchema定义了name、age和email字段,每个字段都有不同的数据类型和验证规则。通过使用Schema,你可以定义文档的结构和约束,以及各种操作方法。
如果要导出
module.exports={User}
Schema在MongoDB和Mongoose中起着非常重要的作用,它可以帮助你管理数据的结构和验证,使数据存储更加规范和可靠。
相关文章:
关系型非关系型数据库区别,以MongoDB为例在express中连接MongoDB示例
目录 关系型数据库 关系型数据库常见的类型有: 关系型数据库的优点包括: 非关系型数据库 非关系型数据库常见的类型有: 非关系型数据库的特点包括: 关系型数据库和非关系型数据库区别 MongoDB是什么 MongoDB优势ÿ…...
Java版商城:Spring Cloud+SpringBoot b2b2c实现多商家入驻直播带货及 免 费 小程序商城搭建的完整指南
随着互联网的快速发展,越来越多的企业开始注重数字化转型,以提升自身的竞争力和运营效率。在这个背景下,鸿鹄云商SAAS云产品应运而生,为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的软…...
【Spring Boot】SpringBoot maven 项目创建图文教程
创建一个Spring Boot项目并使用Maven进行构建是一项相对简单的任务。以下是使用IntelliJ IDEA创建Spring Boot Maven项目的详细教程: 步骤 1:安装 IntelliJ IDEA 确保你已经安装了最新版本的 IntelliJ IDEA。你可以从官方网站下载并安装。 步骤 2&am…...
【Python】Sigmoid和Hard Sigmoid激活函数对比总结及示例
Sigmoid和Hard Sigmoid是两种常用的激活函数,它们在神经网络中起到非线性变换的作用。以下是它们之间的对比和优缺点总结: Sigmoid激活函数: 优点: 输出范围是0到1之间,可以用于二分类问题。函数形状相对平滑&#…...
ajax+axios——统一设置请求头参数——添加请求头入参——基础积累
最近在写后台管理系统(我怎么一直都只写管理系统啊啊啊啊啊啊啊),遇到一个需求,就是要在原有系统的基础上,添加一个仓库的切换,并且需要把选中仓库对应的id以请求头参数的形式传递到每一个接口当中。。。 …...
Redis高可用(主从复制、哨兵模式和Cluster集群)
目录 前瞻 主从复制 哨兵 集群 主从复制 主从复制的作用 主从复制流程 搭建Redis主从复制 实验准备 实验流程 修改 Redis 配置文件(Master节点操作) 修改 Redis 配置文件(Slave节点操作) 验证主从效果 哨兵模式 哨兵…...
【Web】CTFSHOW PHP命令执行刷题记录(全)
目录 web29 web30 web31 web32 web33 web34 web35 web36 web37-39 web40 web41 (y4✌脚本) web42 -44 web45 web46 -49 web50 web51 web52 web53 web54 web55-56 web57 web58 web59 web60 web61 web62 web63-65 web66-67 w…...
鸿蒙开发已解决-Failed to connect to gitee.com port 443: Time out 连接超时提示
文章目录 项目场景:问题描述原因分析:解决方案:解决方案1解决方案2:解决方案3:此Bug解决方案总结解决方案总结**心得体会:解决连接超时问题的三种方案**项目场景: 导入Sample时遇到导入失败的情况,并提示“Failed to connect to gitee.com port 443: Time out”连接超…...
使用cURL命令在Linux中测试HTTP服务器的性能
cURL是一个强大的命令行工具,用于从或向服务器传输数据。它支持多种协议,包括HTTP、HTTPS、FTP等。在Linux系统中,cURL可以用于测试和评估HTTP服务器的性能。下面是一些使用cURL命令测试HTTP服务器性能的示例和说明。 1. 基本请求 要向指定…...
机器学习 -- 余弦相似度
场景 我有一个 页面如下(随便找的): 我的需求是拿到所有回答的链接, 再或者我在找房子网上,爬到所有的房产信息,我们并不想做过多的处理,我只要告诉程序,请帮我爬一个类似 xxx 相似…...
LeNet-5(fashion-mnist)
文章目录 前言LeNet模型训练 前言 LeNet是最早发布的卷积神经网络之一。该模型被提出用于识别图像中的手写数字。 LeNet LeNet-5由以下两个部分组成 卷积编码器(2)全连接层(3) 卷积块由一个卷积层、一个sigmoid激活函数和一个…...
Unity中URP下开启和使用深度图
文章目录 前言一、在Unity中打开URP下的深度图二、在Shader中开启深度图1、使用不透明渲染队列才可以使用深度图2、半透明渲染队列深度图就会关闭 三、URP深度图 和 BRP深度图的区别四、在Shader中,使用深度图1、定义纹理和采样器2、在片元着色器对深度图采样并且输…...
类似东郊到家上门预约系统需要具备哪些功能,预约系统应该怎么做
随着上门服务需求的持续增长,各类APP小程序应运而生。吸引了无数商家投资者,纷纷想要开发一款类似于"东郊到家"这样的上门服务软件。要想成功,这样的软件需具备以下核心功能: 1. 快速注册与登录:用户能通过手…...
鸿蒙APP和Android的区别
鸿蒙(HarmonyOS)和Android是两个不同的操作系统,它们有一些区别,包括架构、开发者支持、应用生态和一些设计理念。以下是鸿蒙APP和Android APP之间的一些主要区别,希望对大家有所帮助。北京木奇移动技术有限公司&#…...
给Flutter + FireBase 增加 badge 徽章,App启动器 通知红点。
在此之前需要配置好 firebase 在flutter 在项目中。(已经配置好的可以忽略此提示) Firebase 配置教程:flutter firebase 云消息通知教程 (android-安卓、ios-苹果)_flutter firebase_messaging ios环境配置-CSDN博客 由于firebase 提供的消息…...
2024年中国杭州|网络安全技能大赛(CTF)正式开启竞赛报名
前言 一、CTF简介 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的…...
112.Qt中的窗口类
我们在通过Qt向导窗口基于窗口的应用程序的项目过程中倒数第二步让我们选择跟随项目创建的第一个窗口的基类, 下拉菜单中有三个选项, 分别为: QMainWindow、QDialog、QWidget如下图: 常用的窗口类有3个 在创建Qt窗口的时候, 需要让自己的窗口类继承上述三个窗口类的…...
如何设置电脑桌面提醒,电脑笔记软件哪个好?
对于大多数上班族来说,每天要完成的待办事项实在太多了,如果不能及时去处理,很容易因为各种因素导致忘记,从而给自己带来不少麻烦。所以,我们往往会借助一些提醒类的软件将各项任务逐一记录下来,然后设置上…...
C# HttpClient Get Post简单封装
文章目录 前言封装好的代码测试接口测试代码 前言 微软官方有Get和Post请求,我把他简单化处理一下 封装好的代码 public class MyHttpHelper{private string baseUrl;/// <summary>/// 基础Api/// </summary>public string BaseUrl{get{return baseUr…...
创建网格(Grid/GridItem)
目录 1、概述 2、布局与约束 3、设置排列方式 3.1设置行列数量与占比 3.2、设置子组件所占行列数 3.3、设置主轴方向 3.4、在网格布局中显示数据 3.5、设置行列间距 4、构建可滚动的网格布局 5、实现简单的日历功能 6、性能优化 1、概述 网格布局是由“行”和“列”分…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
