MongoDB笔记

news2024/11/9 1:49:20

mongoDB基础知识

MongoDB的三个核心特性:灵活设计(No Schema)、高可用和分布式(可平行扩展),另外MongoDB自带数据压缩功能,使得同样的数据存储所需的资源更少。

No Schema(BJSON)

MongoDB 是文档型数据库,其文档组织结构BSON(Binary Serialized Document Format) 是类JSON的二进制存储格式,数据组织和访问方式完全和JSON一样。支持动态的添加字段、支持内嵌对象和数组对象。

No Schema特性带来的好处包括:

  • 简化开发:MongoDB文档自然映射到现代的面向对象编程语言。使用MongoDB可以避免将代码中的对象转换为关系表的复杂对象关系映射(ORM)层。
  • 便于开发和快速迭代:灵活的字段管理,使得项目迭代新增字段非常容易
  • 降低运维成本:数据对象结构变更不需要执行DDL语句,降低Online环境的数据库操作风险,特别是在海量数据分库分表场景。

高可用性(复制集)

mongodb的高可用性是通过副本集+选举机制(raft 协议)来实现的。

img

  • primary:主节点,接收所有写操作,并将集合的变化记录到操作日志oplog中,同步到从节点。
  • secondary:从节点。

复制集的作用:

  • 主节点发生故障时自动选举出一个新的主节点,以实现 failover机制(当A无法为客户服务时,系统能够自动地切换,使B能够及时地顶上继续为客户提供服务,且客户感觉不到这个为他提供服务的对象已经更换)。
  • 将数据从一个数据中心复制到另一个数据中心,减少另一个数据中心的读延迟。
  • 实现读写分离。
  • 实现容灾,可以在数据中心故障时快速切换到同城或异地的数据中心。

复制集群确保数据一致性的核心设计是:

  • Journal日志:Journal日志是 MongoDB 的预写日志 WAL,类似 MySQL 的 redo log,然后100ms一次将Journal 日志刷盘。当然触发机制还有其它场景,这里仅仅是讨论异常场景下可能丢失多长时间的数据。更多详细的解释可以参考MongoDB的两种日志journal与oplog

  • **Oplog:**Oplog 是用来做主从复制的,类似 MySql 里的 binlog。MongoDB 的写操作都由 Primary 节点负责,Primary 节点会在写数据时会将操作记录在 Oplog 中,Secondary 节点通过拉取 oplog 信息,回放操作实现数据同步。

  • **Checkpoint:**上面提到了 MongoDB 的写只写了内存和 Journal 日志(Journal 日志是WAL日志),并没有做数据持久化到数据文件中,Checkpoint 就是将内存变更刷新到磁盘持久化的过程。MongoDB 会每60s一次将内存中的变更刷盘,并记录当前持久化点(checkpoint),以便数据库在重启后能快速恢复数据。

  • **节点选举:**MongoDB 的节点选举规则能够保证在Primary挂掉之后选取的新节点一定是集群中数据最全的一个。

    从上面4点我们可以得出 MongoDB 高可用的如下结论:

  1. MongoDB 宕机重启之后可以通过 checkpoint 快速恢复上一个60s之前的数据。
  2. MongoDB 最后一个 checkpoint 到宕机期间的数据可以通过 Journal 日志回放恢复。
  3. Journal 日志因为是100ms刷盘一次,因此至多会丢失100ms的数据(这个可以通过 WriteConcern 的参数控制不丢失,只是性能会受影响,适合可靠性要求非常严格的场景)
  4. 如果在写数据开启了多数写,那么就算 Primary 宕机了也是至多丢失100ms数据(可避免,同上)

可扩展性(分片集)

MongoDB 支持通过分片技术来支持海量数据存储。解决数据增长的扩展方式有两种:垂直扩展和水平扩展。

  • 垂直扩展:通过增加单个服务器的能力来实现,比如磁盘空间、内存容量、CPU 数量等;
  • 水平扩展:通过将数据存储到多个服务器上来实现。

MongoDB 通过分片实现水平扩展

img

  • shard:每个分片上可以保存一个集合的子集,所有分片上的子集的数据互不相交,构成完整的集合。每个分片可以被部署为复制集架构。最大为 1024 个分片。
  • mongos:充当查询路由器,在客户端和分片集之间提供读写接口。mongos 提供集群单一入口,转发应用端请求,选择合适的数据节点进行读写,合并多个数据节点的返回。 mongos 是无状态的,分片集群一般需要配置至少 2 个 mongos。
  • config server:存储分片集的相关配置信息。

通过分片集,mongodb自带的分布式特性使得使用者不需要像MySQL那样考虑分库分表的繁琐问题。

MongoDB 支持两种分片算法来满足不同的查询需求:

  • **区间分片:**可以按 shardkey 做区间查询的分片算法,直接按照 shardkey 的值来分片。
  • **hash分片:**用的最多的分片算法,按shardkey 的 hash 值来分片。hash 分片可以看作一种特殊的区间分片。

数据压缩

MongoDB 的另外一个比较重要的特性是数据压缩,MongoDB 会自动把客户数据压缩之后再落盘,这样就可以节省存储空间。

MYSQL与MongoDB对比

虽然MongoDB和Redis同为NoSQL类型的数据库,但二者差别比较大,

  • Redis一般用作缓存,存储结构比较简单,支持string、hash、set等少数几种类型。
  • MongoDB一般用作数据库,存储结构分成数据库、集合、文档这三个层级,而文档以BSON形式存储数据。

因此MongoDB应该与MySQL进行对比,分析二者的优缺点和适用场景,从而可以为自己的系统选择更合适的数据库。

几十年来,关系型数据库已经成为企业应用程序的基础,自从MySQL在1995年发布以来,它已经成为一种受欢迎并且廉价的选择。然而随着近年来数据量和数据的不断激增,非关系数据库技术如MongoDB应运而生,以满足新应用的需求,以及扩充或替换现有的关系型数据库。

关键字对比

MySQLMongoDB解释说明
databasedatabase数据库
tablecollection表/集合
rowdocument行/文档
columnfield字段/域
indexindex索引
join嵌入文档表关联/MongoDB不支持join,MongoDB通过嵌入式文档来替代多表连接
primary keyprimary key主键/MongoDB自动将_id字段设置为主键

MYSQL概述

MySQL是由Oracle公司开发,发布和支持的受欢迎的开源关系数据库管理系统(RDBMS)。

  • MySQL将数据存储在表中,并使用结构化查询语言(SQL)来进行数据库访问。
  • MySQL可以根据需要预先定义数据库模式,并设置规则来管理表中字段之间的关系。
  • 在MySQL中,相关信息可能存储在单独的表中,但通过使用关联查询来关联。通过使用这种方式,使得数据重复量被最小化。

MongoDB概述

MongoDB由 C++ 编写,是基于分布式的、面向文档存储的非关系型数据库,是非关系型数据库当中功能最丰富、最像关系数据库的,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

  • MongoDB将数据存储在类似JSON的文档中,通过MongoDB查询语言进行快速查询访问。
  • 文档的JSON结构可以轻松地代表层次关系,存储数组和其他更复杂的结构。
  • MongoDB使用动态模式,可以在不首先定义结构的情况下创建文档,例如字段或其值的类型。集合中的文档不需要具有相同的一组字段,数据的非规范化是常见的,每个文档的json串结构可能有所不同 。
  • MongoDB还设计了高可用性和可扩展性,并提供了即用型复制和自动分片功能。

MongoDB 最大的特点是支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

优点

  1. MongoDB天然特性:灵活、高可用、高可扩展。
  2. 在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。

缺点

  1. 不支持事务操作。MongoDB本身没有自带事务机制,需要自己实现。因此不保证一致性,不能用于银行交易等复杂业务。
  2. mongodb的数据是存储在硬盘上的,只不过需要经常读取的数据会被加载到内存中,这样提高查询效率,同时也会占用大量的内存。
  3. 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。

参考文章

MongoDB 学习笔记: BSON 结构分析

万字详解,吃透 MongoDB!

MySQL 和 MongoDB 对比,一文看全

MongoDB 高性能、高可用之副本集、读写分离、分片、操作实践

MongoDB 基础浅谈

MongoDB - 全方位知识图谱

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

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

相关文章

NeRF-Diffusion系列文章阅读

文章目录 前置知识《Latent-NeRF for Shape-Guided Generation of 3D Shapes and Textures》【CVPR23】《NeRDi: Single-View NeRF Synthesis with Language-Guided Diffusion as General Image Priors》【CVPR23】《SparseFusion: Distilling View-conditioned Diffusion for …

【系统找不到D盘指定驱动设备之解决方法】

文章目录 1.原因2.解决经过3.最终解决办法 1.原因 今天在搞课设,突然之间电脑一顿卡,然后整个电脑屏幕空白,D盘以及所有的安装软件都不见了。点击屏幕出现提示系统找不到指定驱动设备等等提示,查看此电脑发现D盘神奇的消失了。 …

Kafka面试题01

1、kafka有哪些特点 高吞吐,低延迟 可以热扩展 并发度高 具有容错性(即使挂的只剩下一台也可以正常工作) 可靠性高2、请简述你在那些场景下会选择kafka?kafka的应用 日志收集: 一个公司可以用kafka收集各种服务的log…

B站、抖音上那些4K、60帧视频是如何修复的?

如何把一个不清晰的视频变成高清的视频?今天就来教大家视频画质修复把720p的渣画质变成4K超清画质。 相信对于电影和后期爱好者来说,糊成马赛克的画质一定劝退了无数人,那不妨试试这个 牛学长视频修复工具 牛学长视频修复工具通过高级的AI…

Java网络开发(Tomcat)—— 登陆 和 注册功能 的实现 从html 到 jsp 迭代升级 session保存登陆信息

目录 引出登陆功能---从html到jsp1.登陆--用post请求2.用html文件的form表单登陆(1)index.html页面(2)login.html登陆的页面(3)LoginServlet.java处理输入信息的代码(4)登陆成功&…

ChatGPT提示大解析:如何有效定制Prompt并用插件管理

有时候,你可能在编程时遇到难题,需要解决方法。有时候,你在学习新的语言时,想要找到一位悉心的教师。又或者,你可能只是需要一些新的灵感,来润色你的文章。在所有这些情况下,ChatGPT都可以发挥巨…

轻量应用服务器哪款性价比高?

最近云服务器618活动正在火热进行中,选对时间入手自己心仪的云服务器其实可以为你省去一大笔费用,这里先开门见山将三家的云服务器活动粒度做个对比。 腾讯云 懂行的人一看这种配置性价比就会内心无比激动,按照平时的价格根本买不到这么实惠的…

JavaSE基础知识笔记

​1、基础语法 在一个Java源文件中可以声明多个class,但是最多只有一个类可以被声名为public,而且被声名为public的类的类名必须与源文件名相同。 计算机底层都以补码的方式来存储数据!目的是为了简化计算机的结构设计,同时提升运…

如何在Moonbeam设置多重签名钱包,加固资产安全

Moonbeam Safe是以太坊上Safe(先前名为Gnosis Safe)的分叉。Safe于2018年正式推出,并发展成为了以太坊上知名的去中心化托管协议和集体资产管理平台。 Moonbeam Safe可用于创建多重签名Safe钱包,通过配置一个多签(mul…

02.Web大前端时代之:HTML5+CSS3入门系列~H5结构元素

Web大前端时代之&#xff1a;HTML5CSS3入门系列&#xff1a;Web大前端时代之&#xff1a;HTML5CSS3入门系列 - 毒逆天 - 博客园 1.结构元素 可以理解为语义话标记&#xff0c;比如&#xff1a;以前这么写<div id"nav"></div> 现在偷懒写&#xff1a;&l…

JavaWeb笔记_SpringBoot原理

JavaWeb笔记_SpringBoot原理 配置优先级Bean管理获取BeanBean作用域第三方Bean SpringBoot原理自动配置原理ComponentScan组件扫描Import导入源码跟踪Conditional自定义starter创建aliyun-oss-spring-boot-starter模块创建aliyun-oss-spring-boot-autoconfigure 来源 配置优先级…

opencv、dlib、paddlehub人脸检测

opencv、dlib、paddlehub检测效果对比。dlib和paddlehub的效果相对好一点。 说明&#xff1a;本文只做人脸检测不识别&#xff0c;找识别的不用看本文。 ## 部署说明 # 1. 安装python或conda # 2. 安装依赖&#xff0c;pip install -r requirements.txt # 3. 192.168.1.41 修…

Docker 基本使用

安装 Linux安装 # 1、查看当前Linux系统版本 Linux系统版本需要>3.0 [rootzjrs_test2_152 ~]# uname -a Linux zjrs_test2_152 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [rootzjrs_test2_152 ~]# uname -r 3.10.0-957.el…

Baumer工业相机堡盟工业相机如何使用BGAPI SDK控制相机数据流的开启和关闭(C#)

Baumer工业相机堡盟工业相机如何使用BGAPI SDK控制相机数据流的开启和关闭&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机BGAPI SDK的技术背景Baumer工业相机使用BGAPISDK控制相机数据流的方式1.引用合适的类文件2.使用BGAPISDK控制相机数据流的方式2.使用BGAPISDK控…

AOP--@DeclareParents--引入新功能

目录 引入 解析 示例 引入 Java不是动态语言&#xff1b;一旦类编译完成了&#xff0c;我们就很难再为该类添加新的功能了切面能够为现有的方法增加额外的功能&#xff0c;为什么不能为一个对象增加新的方法呢&#xff1f;实际上&#xff0c;利用被称为引入的AOP概念&#x…

从数据开始,构建值得信赖的生成式AI应用

生成式AI有望从根本上打开新世界机遇的大门&#xff1a;从能够个性化回复的对话式聊天机器人&#xff0c;到各种应用的代码&#xff0c;再到营销传播的定制化内容......生成式AI正在彻底改变企业的运作方式。越来越多的领先企业正在构建可信的生成式AI应用&#xff0c;让它们在…

信息共享、管理协作!工程劳务管理模板让企业内部更加通畅

随着建筑行业的快速发展&#xff0c;工程劳务管理变得越来越复杂&#xff0c;同时企业也需要更加高效地管理劳务人员的信息、工资、考勤等方面。因此&#xff0c;工程劳务管理系统应运而生&#xff0c;帮助企业解决这些问题。作为一款低代码开发平台&#xff0c;百数根据市面上…

面向 MSP 的IT管理

MSP&#xff08;管理服务提供商&#xff09;是通过建立自己的网络运作中心(NOC&#xff0c;Network Operating Center)来实施管理服务的。用户的网络通过WAN与MSP的NOC相连&#xff0c;并使用加密技术保证信息在网络上的传输安全。通过NOC&#xff0c;MSP可以实现远程的管理、实…

LVS负载均衡群集----DR部署

文章目录 一、数据包流向分析二、DR模式的特点三、LVS-DR中的ARP问题四、LVS单网段DR模式部署第一步配置负载调度器第二步设置两台节点服务器第三步设置DR 服务器第四步在本地查看调度服务器 一、数据包流向分析 &#xff08;1&#xff09;客户端发送请求到 Director Server&a…

前后端 java 对接海康威视监控-hls实现h5播放

海康的获取监控预览流的接口当中支持 rtsp、rtmp、hls等协议。 这篇文章主要是说hls协议的。 贴上海康的开发平台地址&#xff0c;其中有对应的API&#xff1a;海康开发平台 1、java层面代码 这里除了main方法之外&#xff0c;有两个方法&#xff0c;分别是&#xff1a; 1&am…