详细介绍:NoSQL 数据库和内存数据库 - MongoDB简单了解

news/2026/1/24 22:13:24/文章来源:https://www.cnblogs.com/tlnshuju/p/19527673

详细介绍:NoSQL 数据库和内存数据库 - MongoDB简单了解

2026-01-24 22:11  tlnshuju  阅读(0)  评论(0)    收藏  举报

NoSQL 数据库和内存数据库(IMDB)区别

NoSQL 数据库

以 “数据模型与关系型数据库的差异” 为分类标准:指 “非关系型数据库”(Not Only SQL),用于解决关系型数据库在灵活数据模型、水平扩展、大数据量处理等方面的局限性。核心特征是:非结构化 / 半结构化数据模型、无固定 Schema(模式)、支持分布式扩展,数据模型多样(键值、文档、列族、图等)。

内存数据库(IMDB)

以 “数据主要存储位置” 为分类标准:指将数据主要存储在内存(而非磁盘) 中的数据库。核心目标是通过内存的高速读写特性,实现毫秒级甚至微秒级的响应速度,满足高并发、低延迟场景需求。(注:多数内存数据库会通过磁盘进行数据持久化,防止内存断电丢失,但核心读写操作基于内存。)

核心区别对比
维度内存数据库(IMDB)NoSQL数据库
分类标准数据主要存储位置(内存为主)数据模型(非关系型,区别于SQL的表结构)
核心目标极致的读写性能(低延迟、高吞吐)灵活的数据模型、高扩展性、大数据量适配
数据存储位置主要在内存,磁盘仅用于持久化(可选)可在磁盘(如MongoDB)或内存(如Redis)
数据模型无固定模型,可简单(如键值)或复杂(如关系)非关系型,多样(文档、键值、列族、图等)
典型场景高频交易、实时缓存、会话存储、实时分析社交数据、日志存储、内容管理、LBS应用等
持久化依赖依赖额外机制(如RDB/AOF)防止内存数据丢失磁盘存储天然持久化;内存型NoSQL需额外机制
与关系型的关系可兼容关系模型(如VoltDB是内存型关系数据库)明确区别于关系型,不依赖表、行、列结构
典型例子与交叉情况
  • 仅属于内存数据库
    VoltDB(内存型关系数据库,支持SQL,不属于NoSQL)、Memcached(纯内存键值存储,无持久化,属于内存数据库,也常被归为NoSQL)。

  • 仅属于NoSQL数据库
    MongoDB(文档型,数据主要存储在磁盘,不属于内存数据库)、HBase(列族型,分布式磁盘存储)、Neo4j(图数据库,磁盘存储)。

  • 同时属于两者
    Redis(键值型NoSQL,数据主要在内存,支持磁盘持久化,因此既是内存数据库也是NoSQL)。

总结

核心特点

  1. 文档型存储:数据以 BSON(Binary JSON) 格式存储(BSON 是 JSON 的二进制扩展,支持更多数据类型,如日期、二进制数据等)。每个文档类似一个“记录”,可包含嵌套字段和数组,结构灵活。
  2. 动态模式(Schema-less):集合(类似关系型数据库的“表”)中的文档无需遵循统一结构,不同文档可拥有不同字段,无需预先定义“表结构”,适合数据格式频繁变化的场景。
  3. 高可扩展性:支持水平扩展(通过分片将数据分布到多个服务器),可轻松应对数据量增长。
  4. 强大的查询能力:支持复杂查询(如条件筛选、投影、排序、分页、聚合)、索引、地理空间查询等,语法接近自然语言。
  5. 高可用性:通过副本集(Replica Set) 实现数据冗余和自动故障转移(主节点故障时,从节点自动切换为主节点)。

基本概念(与关系型数据库对比)

MongoDB 概念关系型数据库概念说明
数据库(Database)数据库(Database)存储多个集合的容器,一个 MongoDB 实例可包含多个数据库。
集合(Collection)表(Table)存储多个文档的容器,类似表,但集合中的文档结构可不同。
文档(Document)行(Row)数据的基本单元,以 BSON 格式表示(类似 JSON 对象),每个文档有唯一 _id 字段作为主键。
字段(Field)列(Column)文档中的键值对,类似表中的列,但字段可动态添加/删除,无需统一。

数据模型示例

以“用户”数据为例,MongoDB 的文档结构可以灵活包含嵌套信息(如地址、订单),无需像关系型数据库那样拆分到多个表:

// 一个用户文档(BSON格式)
{
"_id": ObjectId("60d21b4667d0d8992e610c85"),  // 自动生成的唯一ID
"name": "张三",
"age": 25,
"email": "zhangsan@example.com",
"address": {  // 嵌套文档
"city": "北京",
"street": "朝阳区XX路"
},
"hobbies": ["篮球", "编程"],  // 数组
"createdAt": ISODate("2023-06-21T08:00:00Z")  // BSON日期类型
}

核心操作(CRUD)

MongoDB 提供丰富的 API 用于数据操作,以下是基本的 CRUD 示例(基于 MongoDB Shell,一种交互式命令行工具):

1. 插入数据(Create)
// 插入单条文档
db.users.insertOne({
name: "李四",
age: 30,
email: "lisi@example.com"
});
// 插入多条文档
db.users.insertMany([
{ name: "王五", age: 28, email: "wangwu@example.com" },
{ name: "赵六", age: 22, email: "zhaoliu@example.com" }
]);
2. 查询数据(Read)
// 查询所有文档
db.users.find();
// 条件查询(年龄大于25的用户)
db.users.find({ age: { $gt: 25 } });
// 投影(只返回name和age字段,不返回_id)
db.users.find({ age: { $gt: 25 } }, { name: 1, age: 1, _id: 0 });
// 排序(按age降序)
db.users.find().sort({ age: -1 });
// 分页(跳过前1条,取2条)
db.users.find().skip(1).limit(2);
3. 更新数据(Update)
// 更新单条文档(将name为"李四"的用户年龄改为31)
db.users.updateOne(
{ name: "李四" },  // 查询条件
{ $set: { age: 31 } }  // 更新操作($set是更新操作符,只修改指定字段)
);
// 更新多条文档(将所有年龄小于25的用户添加"isYoung": true字段)
db.users.updateMany(
{ age: { $lt: 25 } },
{ $set: { isYoung: true } }
);
4. 删除数据(Delete)
// 删除单条文档(删除name为"赵六"的用户)
db.users.deleteOne({ name: "赵六" });
// 删除多条文档(删除所有age大于30的用户)
db.users.deleteMany({ age: { $gt: 30 } });

索引

索引是提升查询性能的关键,MongoDB 支持多种索引类型:

  • 单字段索引:对单个字段创建索引,如 db.users.createIndex({ name: 1 })(1 表示升序,-1 表示降序)。
  • 复合索引:对多个字段创建索引,如 db.users.createIndex({ name: 1, age: -1 }),优化多字段查询。
  • 文本索引:支持全文搜索,如 db.articles.createIndex({ content: "text" }),可通过 $text 操作符查询包含特定关键词的文档。

事务支持

MongoDB 从 4.0 版本开始支持多文档事务,确保跨多个文档的操作要么全部成功,要么全部失败,满足数据一致性需求。例如:

// 开启事务
const session = db.getMongo().startSession();
session.startTransaction();
try {
// 操作1:扣减用户余额
db.users.updateOne(
{ _id: ObjectId("...") },
{ $inc: { balance: -100 } },
{ session }
);
// 操作2:添加订单记录
db.orders.insertOne(
{ userId: ObjectId("..."), amount: 100 },
{ session }
);
// 提交事务
session.commitTransaction();
} catch (error) {
// 回滚事务
session.abortTransaction();
} finally {
session.endSession();
}

适用场景

  • 大数据量、高并发的 web 应用(如社交平台、电商)。
  • 数据模型灵活多变(如内容管理系统、日志存储)。
  • 需要快速迭代开发(无需预先设计固定表结构)。
  • 地理空间数据(MongoDB 内置地理空间索引,适合LBS应用)。

不适用场景

快速上手

  1. 安装 MongoDB:从 MongoDB 官网 下载对应系统的安装包,或通过 Docker 快速部署。
  2. 启动服务:运行 mongod 命令启动数据库服务(默认端口 27017)。
  3. 连接数据库:使用 mongo 命令启动 Shell,或通过驱动(如 Node.js 的 mongoose、Python 的 pymongo)在代码中操作。

总之,MongoDB 以其灵活的数据模型、高扩展性和易用性,成为现代应用开发中常用的 NoSQL 数据库之一,尤其适合需要快速迭代和处理海量非结构化数据的场景。

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

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

相关文章

【课程设计/毕业设计】基于springboot的校园编程俱乐部管理系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

自主搭建AI系统:全流程硬件配置与实施要点解析

人工智能技术于各行各业越来越深入地应用着,越来越多的组织开始思量着自主去搭建AI系统。这样的部署方式能够更优地满足数据安全、业务定制以及持续优化的需求,然而与此同时也给技术团队提出了更高的要求。一个完整的AI系统搭建牵涉到硬件选型、软件部署…

组织本地化部署AI系统需系统性规划与专业技术知识

随着人工智能技术迅猛发展,越来越多组织着手考虑于本地环境里部署、搭建AI系统。这般本地化地部署,不但能够更为妥善地契合数据安全以及隐私保护的要求,而且还能够依照具体业务需求予以深度定制。然而,AI系统搭建属于一个牵涉硬件…

WSL2迁移D盘+修改默认用户

WSL2迁移D盘+修改默认用户1. 迁移 WSL2 到 D 盘查看 WSL 发行版wsl --list --verbose关闭 WSLwsl --shutdown导出镜像到 D 盘wsl --export Ubuntu-22.04 D:\WSL\Ubuntu.tar注销 C 盘旧镜像wsl --unregister Ubuntu-22.…

42.9k Star!Windows 最好用的网速监控工具,支持任务栏显示

Windows 自带的任务管理器能看网速,但得专门打开一个窗口;第三方工具要么太丑、要么太重、要么全是广告。 TrafficMonitor 是一款 Windows 桌面悬浮窗软件:实时显示网速、CPU 和内存占用率,支持嵌入任务栏、更换皮肤、硬件温度监…

Java计算机毕设之基于springboot的高校计算机编程俱乐部管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

技术团队强的商城源码团队核心优势

结合单商户零售商城场景与安全保障需求,技术团队强的商城源码团队优势集中在源码掌控、安全防护、架构适配、高效迭代四大维度,可直接转化为系统竞争力与风险抵御能力,具体如下: 一、源码级深度管控,筑牢安全根基 全…

Elasticsearch 基本使用

版本以 Elasticsearch 7.x 为主(目前最常用) 一、依赖(Maven)<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifact…

AI如何做一部视频

AI 如何做一部视频(实战记录:年会祝福片) 0. 概要(TL;DR) 这篇笔记记录一次「用 AI 快速做一支团队年会祝福视频」的实战过程:从需求澄清 → 剧本/分镜 → 角色与场景图生成 → 智能多帧生成视频 → 锁定片段迭代…

【计算机毕业设计案例】基于SpringBoot+Vue的小说阅读平台基于springboot的小说阅读平台(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【计算机毕业设计案例】基于springboot的游泳馆管理系统营销活动(如会员日折扣、组团优惠)(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【计算机毕业设计案例】基于springboot的智能药箱系统,药品分类、药品咨询(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【计算机毕业设计案例】基于springboot的自行车分享平台车辆监控、租赁流程自动化(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

vue2 表格如何使用 vxe-table 带列头复制单元格内容同步到 excel 中

vue2 表格如何使用 vxe-table 带列头复制单元格内容同步到 excel 中&#xff0c;vxe-table 本身是支持该功能的&#xff0c;通过设置 clip-config.isCopyHeader 启用复制时带列头信息。 https://vxetable.cn 复制粘贴&#xff0c;通过 keyboard-config.isClip 启用,复制带列头…

Java毕设选题推荐:基于springboot的游泳馆运营管理系统水质检测、教练课程预约、排班【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

学长亲荐!继续教育必备TOP8 AI论文平台深度测评

学长亲荐&#xff01;继续教育必备TOP8 AI论文平台深度测评 学术写作工具测评&#xff1a;2026年继续教育必备AI平台深度解析 在当前快节奏的学术环境中&#xff0c;高效、专业的写作辅助工具已成为研究者和学习者的刚需。尤其是对于继续教育群体而言&#xff0c;如何在繁重的工…

降低AI生成内容比例的10大网站排名:免费付费方案详细对比

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

英文SCI论文降AI率,这3款工具亲测有效

英文SCI论文降AI率&#xff0c;这3款工具亲测有效 TL;DR&#xff1a;SCI投稿越来越严格&#xff0c;Turnitin等平台的AI检测让很多作者头疼。本文实测3款英文论文降AI工具&#xff1a;AIGCleaner&#xff08;专攻英文学术写作&#xff0c;Turnitin AI率可降到0%&#xff09;、嘎…

比话降AI vs 千笔AI:专业降AI和一站式平台怎么选

比话降AI vs 千笔AI&#xff1a;专业降AI和一站式平台怎么选 TL;DR&#xff1a;千笔AI是一站式论文平台&#xff0c;写作降AI降重打包卖&#xff0c;本科2万字49.9元&#xff0c;适合从零开始写论文的同学。比话降AI专注做降AI这一件事&#xff0c;8元/千字&#xff0c;承诺知网…

2026智能重构:AI重塑软件全生命周期的深度研究报告

2026智能重构&#xff1a;AI重塑软件全生命周期的深度研究报告 时间&#xff1a; 2026年01月24日 主题&#xff1a; 关于人工智能对软件工程、架构、代码、测试及运维的颠覆性影响与未来演进 摘要&#xff1a;从“工具”到“共生体”的范式迁移 站在2026年的节点回望&#xf…