初识 MongoDB

news2025/1/30 16:23:23

文章目录

  • 一、简介
  • 二、体系结构
  • 三、数据类型
  • 四、特点
  • 五、应用场景


提示:以下是本篇文章正文内容,MongoDB 系列学习将会持续更新

在这里插入图片描述

一、简介

  • MongoDB 是一个文档数据库,是由字段和值对(field:value)组成的数据结构,底层是 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是 NoSQL 数据库产品中的一种。是最像关系型数据库(MySQL)的非关系型数据库。
  • 它支持的数据结构非常松散,是一种类似于 JSON 的格式叫 BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。

二、体系结构

在这里插入图片描述

SQL概念MongoDB概念
数据库 (database)数据库 (database)
表 (table)集合 (collection)
行 (row)文档 (document)
列 (column)字段 (field)
索引 (index)索引 (index)
主键 (primary key)id (字段)
视图 (view)视图 (view)
表连接 (table joins)聚合操作 ($lookup)

三、数据类型

  1. MongoDB 的最小存储单位就是文档(document)对象。文档(document)对象对应于关系型数据库的行。数据在 MongoDB 中以 BSON(Binary-JSON)文档的格式存储在磁盘上。
  2. BSON(Binary Serialized Document Format)是一种类 json 的一种二进制形式的存储格式,简称Binary JSON。BSON 和 JSON一样,支持内嵌的文档对象和数组对象,但是 BSON 有 JSON 没有的一些数据类型,如 Date 和 BinData 类型。
  3. BSON 采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是空间利用率不是很理想。
  4. BSON 中,除了基本的 JSON 类型:string、integer、boolean、double、null、array、object;MongoDB 还使用了特殊的数据类型,包括 date、object id、binary data、regular expression、code。每一个驱动都以特定语言的方式实现了这些类型,查看你的驱动的文档来获取详细信息。
数据类型描述举例
字符串字符集编码为 UTF-8 的字符串{“x” : “foobar”}
对象id对象id是文档的12字节的唯一 ID{“X” : ObjectId() }
布尔值true 或 false{“x” : true}
数组值的集合或列表{“x” : [“a”, “b”, “c”]}
32位整数类型不可用。JavaScript 仅支持64位浮点数,所以32位整数会被自动转换。shell 不支持该类型,会默认转换成64位浮点数
64位整数不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数shell 不支持该类型,会默认转换成64位浮点数
64位浮点数shell 默认的数字类型{“x” : 3.14159, “y” : 3}
null表示空值或者未定义的对象{“x” : null}
undefined文档中也可以使用未定义类型{“x” : undefined}
符号shell不支持,默认会自动转换成字符串
正则表达式文档中可以包含正则表达式,采用JavaScript的正则表达式语法{“x” : /foobar/i}
代码文档中还可以包含JavaScript代码{“x” : function() { /* …… */ }}
二进制数据可以由任意字节的串组成,不过shell中无法使用
最大值/最小值BSON 包括一个特殊类型,表示可能的最大值。shell 中没有这个类型

四、特点

  1. 高性能
    • MongoDB 提供高性能的数据持久性。特别是,对嵌入式数据模型的支持减少了数据库系统上的I/O活动。
    • 索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。(文本索引解决搜索的需求、TTL索引解决历史数据自动过期的需求、地理位置索引可用于构建各种 O2O 应用)
    • mmapv1、wiredtiger、mongorocks(rocksdb)、in-memory 等多引擎支持满足各种场景需求。
    • Gridfs 解决文件存储的需求。
  2. 高可用性:MongoDB 的复制工具称为副本集(replica set),它可提供自动故障转移和数据冗余。
  3. 高扩展性
    • MongoDB 提供了水平可扩展性作为其核心功能的一部分
    • 分片将数据分布在一组集群的机器上。(海量数据存储,服务能力水平扩展)
    • 从3.4开始,MongoDB 支持基于片键创建数据区域。在一个平衡的集群中,MongoDB 将一个区域所覆盖的读写只定向到该区域内的那些片
  4. 丰富的查询支持:MongoDB 支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合、文本搜索和地理空间查询等。
  5. 其它特点:如无模式(动态模式)、灵活的文档模型。

五、应用场景

  1. 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能。
  2. 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。
  3. 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将
    订单所有的变更读取出来。
  4. 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析。
  5. 视频直播,使用 MongoDB 存储用户信息、点赞互动信息等。

这些应用场景中,在数据操作上的共同特点:
(1)数据量大。
(2)写入操作频繁(读写都很频繁)。
(3)价值较低的数据,对事务性要求不高。
对于这样的数据,我们更适合使用 MongoDB 来实现数据的存储。

什么时候选择 MongoDB?

  • 应用不需要事务及复杂 join 支持。
  • 新应用,需求会变,数据模型无法确定,想快速迭代开发。
  • 应用需要 2000-3000 以上的读写 QPS(更高也可以)。
  • 应用需要 TB 甚至 PB 级别数据存储。
  • 应用发展迅速,需要能快速水平扩展。
  • 应用要求存储的数据不丢失。
  • 应用需要 99.999% 高可用。
  • 应用需要大量的地理位置查询、文本查询。

如果上述有1个符合,可以考虑 MongoDB,2个及以上的符合,选择 MongoDB 绝不会后悔。

回到目录…


总结:
提示:这里对文章进行总结:
本文是对MongoDB的学习,先介绍了什么是MongoDB,又将其和关系型数据库作了体系结构的对比,随之展示了它的数据类型,最后介绍了它的特点和应用场景。之后的学习内容将持续更新!!!

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

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

相关文章

煤矿电子封条视频监控系统 yolov7

煤矿电子封条视频监控系统基于yolov7python网络模型视频AI智能分析技术,煤矿电子封条视频监控算法模型对现场皮带撕裂、跑偏、皮带异物、堆煤等设备异常状态实时监控分析自动识别预警。YOLOv7 的发展方向与当前主流的实时目标检测器不同,研究团队希望它能…

(原创)Flutter基础入门:装饰器Decoration

前言 作为一个Android开发,最近打算把自己学的Flutter相关知识做个积累,所以这会是一个系列的博客。里面讲的都会是一些Flutter相关的知识,有基础的,也有比较深入的,由浅入深嘛。 那么今天作为开篇,就先讲…

经典回顾丨同为科技(TOWE)在2008年奥运场馆防雷建设中都做了什么?

针对大型体育赛事场馆防雷建设工作非常重要,这是因为大型体育赛事通常吸引了大量的观众和运动员聚集,一旦场馆遭受雷击,可能会造成严重的伤亡和财产损失。如今,大型体育赛事的场馆都会配备防雷设施,如建筑物避雷针、接…

代理设计模式解读

目录 代理模式的基本介绍 静态代理 静态代码模式的基本介绍 应用实例 思路分析图解(类图) 代码实战 静态代理优缺点 动态代理 动态代理模式的基本介绍 JDK 中生成代理对象的 API 代码实战 Cglib 代理 Cglib 代理模式的基本介绍 Cglib 代理模式实现步骤 Cglib 代理模…

同为科技(TOWE)机柜PDU电源插头类型详解

机柜PDU电源插座作为机房服务器众多设备运行的“最后一米”也是最为密切的电源配件,专用于精细保护单相交流供电的敏感设备,其品质好坏直接影响到各个设备的正常运行。机柜PDU电源管理器是由插头、线缆、主体三个部分组成,其中电源插头可以分…

leetcode24. 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出:[2,1…

什么是机器学习?

目录 简介 机器学习可以做什么 机器学习未来的趋势 总结 简介 机器学习是一种人工智能领域中的技术,其主要目的是让计算机能够自动进行模式识别、数据分析和预测。 机器学习的起源可以追溯到20世纪50年代,当时美国的Arthur Samuel在一篇论文中提出了相关…

(转)使用Midjourney进行图生图

原文链接:使用Midjourney进行AI绘画的基础手册-虎课网 接下来,我们讲一下,如果使用Midjourney的垫图功能,创作相同风格的图片 第一步: 1、打开discord,查看自己的服务器 2、我们双击“+”,来上传图片,图片上传后,按下enter发送图片; 图片发送成功后,点击图片放大…

不得不说的创建型模式-单例模式

单例模式是创建型模式的一种,它的作用是确保一个类只有一个实例,并提供全局访问点。单例模式通常用于管理共享资源,如配置文件、数据库连接池等,它可以保证这些资源只被创建一次,并且可以被全局共享。 下面是一个使用C…

AI 智能会有自主意识吗?会不会伤害人?

随着科技的高速发展,人工智能已逐渐融入我们的日常生活。从智能家居设备到自动驾驶汽车,人工智能的应用领域越来越广泛。然而,在这个趋势背后,我们面临着一个极具争议的问题:人工智能是否会觉醒自我意识?我…

程序员阿里三面无理由挂了,被HR一句话噎死,网友:这可是阿里啊

进入互联网大厂一般都是“过五关斩六将”,难度堪比西天取经,但当你真正面对这些大厂的面试时,有时候又会被其中的神操作弄的很是蒙圈。 近日,某位程序员发帖称,自己去阿里面试,三面都过了,却被…

近期遇到的vscode 插件开发的问题,when表达式,正则匹配路径

前言 最近在修改dbt插件的时候,遇到了几个比较奇怪的问题,猜测应该是因为跟新了VSCode导致的。 这里稍微记录一下,如果能帮助其他的同学,那就太值啦。 when 正则表达式 之前有在packgae.json 中使用 when 的正则表达式&#xf…

文章修改润色软件-中文文章自动润色

在今天这个信息爆炸的时代,写作已经成为了生活和工作中不可或缺的一部分。无论是企业宣传材料、项目报告、还是日常沟通,我们都需要写作来表达自己的意见和观点。但是,对于大多数人来说,写作带来的不仅仅是创作的乐趣,…

Nacos 1.4.x 升级至 2.x 详细步骤及遇到的问题

此前使用的nacos版本是1.4.5,现在nacos最新版本为2.2.2,且修复了旧版本的一些安全问题,下面把详细的升级步骤记录一下,大家一起学习。主要参照了nacos官方升级文档:https://nacos.io/zh-cn/docs/v2/upgrading/2.0.0-up…

MongoDB 分片集群架构中的分片策略

一、分片集群架构 1-1、分片简介 分片(shard)是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。分片在概念上非常类似于应用开发中的“水平分表”。不同的点在于,MongoDB本身就自带了分片管理的能…

【Linux】基于单例模式懒汉实现方式的线程池

目录 一、LockGuard.hpp 二、Task.hpp 三、Thread.hpp 四、ThreadPool.hpp 一、LockGuard.hpp #pragma once #include <iostream> #include <pthread.h> class Mutex//锁的对象 { public:Mutex(pthread_mutex_t* lock_pnullptr):_lock_p(lock_p){}~Mutex(){}v…

设计模式-看懂UML类图和时序图

这里不会将UML的各种元素都提到&#xff0c;只讲类图中各个类之间的关系&#xff1b; 能看懂类图中各个类之间的线条、箭头代表什么意思后&#xff0c;也就足够应对 日常的工作和交流&#xff1b; 同时&#xff0c;应该能将类图所表达的含义和最终的代码对应起来&#xff1b;1.…

Qt音视频开发39-海康sdk回调拿到数据GPU绘制的实现

一、前言 采用海康的sdk做开发&#xff0c;最简单最容易的方式就是传入句柄&#xff08;windows和linux都支持/很多人以为只有windows才支持&#xff09;即可&#xff0c;这种方式不用自己处理绘制&#xff0c;全部交给了sdk去处理&#xff0c;所以cpu的占用是最低的&#xff…

ERTEC200P-2 PROFINET设备完全开发手册(8-1)

8.1 IRT通讯实验 这里我们使用APP3 IsoApp&#xff0c;修改源代码usrapp_cfg.h的宏为 #define EXAMPL_DEV_CONFIG_VERSION 3 使能App3&#xff0c;对应的主程序为“usriod_main_isoapp.c” 编译后下载运行。打开4.2建立的TIA项目&#xff0c;添加等时模式组织块&#xff0c…

SAS学习第3章:试验数据处理的心决

sas中数据的输入格式一般分为2种&#xff0c;一种是直接输入&#xff0c;另一种是循环输入。input 后跟几个变量名&#xff0c;数据卡cards就要据此逐次处理&#xff0c;且一定是倍数关系。 1.直接输入在自变量及数据较少的情况下较好使用。 例&#xff1a; 甲、乙、丙三个奶…