【博学谷学习记录】超强总结,用心分享 | 架构师 MongoDB学习总结

news2024/11/15 8:49:17

文章目录

  • MongoDB基本使用
    • Nosql简介
      • 什么是NoSQL
      • 为什么使用NoSQL
      • RDBMS vs NoSQL
      • NoSQL
      • NoSQL的优缺点
      • 缺点
    • MongoDB基础
      • 什么是MongoDB
        • 存储结构
        • 主要特点
      • 基本概念
        • 和传统数据库对比
        • 集合
          • 命令规范
        • 文档
          • key的命令规范
          • 注意事项
      • MongoDB的数据类型
        • BSON
        • 支持的数据类型

MongoDB基本使用

Nosql简介

NoSQL(NoSQL = Not Only SQL ),意即”不仅仅是SQL”。

	在现代的计算系统上每天网络上都会产生庞大的数据量, 这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理, 1970年 E.F.Codd’s提出的关系模型的论文 “A relational model of data for large shared data banks”,这使得数据建模和应用程序编程更加简单。

	通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。

	NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨,NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

什么是NoSQL

NoSQL,指的是非关系型的数据库,NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

	NoSQL用于超大规模数据的存储,(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据),这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

为什么使用NoSQL

今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。

	用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加,我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。

RDBMS vs NoSQL

RDBMS

  • 高度组织化结构化数据
  • 结构化查询语言(SQL)
  • 数据和关系都存储在单独的表中。
  • 数据操纵语言,数据定义语言
  • 严格的一致性
  • 基础事务

NoSQL

  • 代表着不仅仅是SQL
  • 没有声明性查询语言
  • 没有预定义的模式
  • 键 - 值对存储,列存储,文档存储,图形数据库
  • 最终一致性,而非ACID(原子性、一致性、隔离性、持久性)属性
  • 非结构化和不可预知的数据

NoSQL的优缺点

  • 优点
  • 高可扩展性
  • 分布式计算
  • 低成本
  • 架构的灵活性,半结构化数据
  • 没有复杂的关系

缺点

  • 没有标准化
  • 有限的查询功能(到目前为止)
  • 最终一致是不直观的程序

MongoDB基础

什么是MongoDB

MongoDB 是由C++语言编写的,是一个基于分布式文档存储的开源数据库系统。

  • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
  • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

存储结构

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,MongoDB 文档类似于 JSON
对象,字段值可以包含其他文档,数组及文档数组。

在这里插入图片描述

主要特点

  • 非关系型数据库,基于 Document data model(文档数据模型)
  • MongoDB以 BSON (BinaryJSON) 格式存储数据,类似于 JSON 数据形式
  • 关系型数据库使用 table (tables of rows)形式存储数据,而MongoDB使用 collections (collections of documents)
  • 支持 临时查询(ad hoc queries): 系统不用提前定义可以接收的查询类型
  • 索引通过 B-tree 数据结构, 3.2版本的WiredTiger 支持 log-structured merge-trees(LSM)
  • 支持索引和次级索引(secondary indexes): 次级索引是指文档或row有一个 主键(primary key)作为索引,同时允许文档或row内部还拥有一个索引,提升查询的效率,这也是MongoDB比较大的一个特点

基本概念

和传统数据库对比

不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们分别介绍,下表将帮助您更容易理解Mongo中的一些概念:

对比项mongo数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joinsDBRef,$.lookup表连接
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

集合

相当于关系数据库的表,不过没有数据结构的定义。它由多个document组成。

命令规范

因为是无结构定义的,所以你可以把任何document存入一个collection里。每个collection用一个名字标识,需要注意以下几点:

  • 名字不允许是空字符串""
  • 名字不能包含\0字符,因为它表示名字的结束
  • 不能创建以system.开头的

文档

mongoDB的基本单位,相当于关系数据库中的行,它是一组有序的key/value键值对,使用json格式,

如:{“foo” : 3, “greeting”: “Hello, world!”}。

key的命令规范

key是个UTF-8字符串,以下几点是需要注意的地方:

  • 不能包含\0字符(null字符),它用于标识key的结束
  • .和 字符在 m a n g o d b 中有特殊含义,如 字符在mangodb中有特殊含义,如 字符在mangodb中有特殊含义,如被用于修饰符($inc表示更新修饰符),应该考虑保留,以免被驱动解析
  • 以_开始的key也应该保留,比如_id是mangodb中的关键字
注意事项
  • 在mangodb中key是不能重复的
  • value 是弱类型,甚至可以嵌入一个document
  • key/value键值对在mangodb中是有序的 {key: {key1:“1”, key2:“2”}}
  • mangodb是类型和大小写敏感的,如{“foo” : 3}和{“foo” : “3”}是两个不同的document,{“foo” : 3}和{“Foo” : 3}
  • 每个文档最大支持16M
  • 文档字段是有序的

MongoDB的数据类型

BSON

BSON(Binary Serialized Document Format)是一种类JSON的二进制形式的存储格式,简称Binary
JSON

	它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型,它支持下面数据类型。每个数据类型对应一个数字,在MongoDB中可以使用$type操作符查看相应的文档的BSON类型。

支持的数据类型

数据类型描述
String这是最常用的数据类型来存储数据。在MongoDB中的字符串必须是有效的UTF-8。
Integer这种类型是用来存储一个数值,整数可以是32位或64位,这取决于您的服务器。
Boolean此类型用于存储一个布尔值 (true/ false) 。
Double这种类型是用来存储浮点值。
Min/ Max keys这种类型被用来对BSON元素的最低和最高值比较。
Arrays使用此类型的数组或列表或多个值存储到一个键。
Timestamp时间戳。这可以方便记录时的文件已被修改或添加。
Object此数据类型用于嵌入式的文件。
Null这种类型是用来存储一个Null值。
Symbol此数据类型用于字符串相同,但它通常是保留给特定符号类型的语言使用。
Date此数据类型用于存储当前日期或时间的UNIX时间格式。可以指定自己的日期和时间,日期和年,月,日到创建对象。
Object ID此数据类型用于存储文档的ID。
Binary data此数据类型用于存储二进制数据。
Code此数据类型用于存储到文档中的JavaScript代码。
Regular expression此数据类型用于存储正则表达式

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

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

相关文章

DT MongoDB Plug -in description

目录 DT MongoDB | Client Create MongoDB Client Connect By Url Get Collection DT MongoDB | Collection Insert One Insert Many Delete One Delete Many Replace One Update One Update Many Find Find One DT MongoDB | Document Create MongoDB Documen…

【算法与数据结构】顺序表

顺序表 数据结构 结构定义结构操作 顺序表:结构定义 一个数组,添加额外的几个属性:size, count等 size: 数组有多大 count: 数组中当前存储了多少元素 顺序表三部分: 一段连续的存储区:顺序表存储元素的地方整型…

【Linux】Linux安装Java环境(OracleJDK)

文章目录 前言第一步,到官网下载jdk1.8第二步,下载下来上传到/opt目录下,并且解压第三步,解压之后配置环境变量:第四步,刷新配置文件第五步,查看版本 前言 linux环境为CentOS7.8 版本。 上期跟…

shell教程

面试题: 1.Shell中单引号和双引号区别 1)单引号不取变量值 2)双引号取变量值 3)反引号,执行引号中命令 4)双引号内部嵌套单引号,取出变量值 5)单引号内部嵌套双引号,不取出变量值 一、shell脚本 1.shell脚本概…

ChatGLM的搭建过程

本次搭建的是清华大学开源的ChatGLM。源码地址。模型地址。 1、开启BBR加速 如何开启BBR加速可以去看我的这篇文章,Linux开启内核BBR加速。 2、拉取ChatGLM源码和ChatGLM模型 点击这里跳转到源码处。 点击这里跳转到模型下载处。 我这里在下载之前创建了一个目…

与ChatGPT的一次技术对话

文章目录 前言 - 向引领前沿技术的伟大工作者致敬提问:请给我推荐几个最先进的目标检测AI模型提问:YOLOv4是什么原理,有什么创新提问:请问你知道yolov5吗提问: 那yolov5又有什么创新呢提问:你刚刚的回答正确…

SwiftUI 4.0 新 LabeledContent 视图帮您解决所有对齐烦恼

概览 在用 SwiftUI Form 设计 App 界面时,最头疼的就是内部视图对齐的问题了。好不容易适配了 iOS 中的布局,到了 iPadOS 或 MacOS 上却变得一团糟。 有没有一劳永逸,简单方便的办法呢? 如上图所示:我们利用 SwiftUI…

3. SQL底层执行原理详解

一条SQL在MySQL中是如何执行的 1. MySQL的内部组件结构1.1 Server层1.2 Store层 2. 连接器3. 分析器3.1 词法分析器原理 4. 优化器5. 执行器6. bin-log归档 本文是按照自己的理解进行笔记总结,如有不正确的地方,还望大佬多多指点纠正,勿喷。 …

基于ASP.NET的Web应用系统架构探讨

摘要:提出了一种基于ASP.NET开发方式的四层架构的Web应用系统构造思想。其基本内容是:将面向对象的UML建模与Web应用系统开发相结合,将整个系统分成适合ASP.NET开发方式的应用表示层、业务逻辑层、数据访问层和数据存储层四层结构…

[CF复盘] Codeforces Round 871 (Div. 4)20230506

[CF复盘] Codeforces Round 871 Div. 4 20230506 总结A. Love Story1. 题目描述2. 思路分析3. 代码实现 B. Blank Space1. 题目描述2. 思路分析3. 代码实现 C. Mr. Perfectly Fine1. 题目描述2. 思路分析3. 代码实现 D. Gold Rush1. 题目描述2. 思路分析3. 代码实现 E. The La…

UNeXt:基于 MLP 的快速医学图像分割网络

UNeXt是约翰霍普金斯大学在2022年发布的论文。它在早期阶段使用卷积,在潜在空间阶段使用 MLP。通过一个标记化的 MLP 块来标记和投影卷积特征,并使用 MLP 对表示进行建模。对输入通道进行移位,可以专注于学习局部依赖性。 UNeXt 基本架构 U…

考研数学高数1-1综合测试-函数及其性质

今天听完强化课之后去做学习包的题,发现没带平板,如果写到纸上,塞到书里又不知道去哪了,所以索性就拿Latex写了,虽然有一点麻烦,但是好在数量不多,就这么写吧。 都是我自己写的过程,…

第三十八章 Unity GUI系统(下)

上一章节我们将了UI的锚点,关于锚点我们只讲了一半,因为锚点并不只是一个点,它还可以是一个矩形。 我们可以将锚点拆开(鼠标选中后拖动),也就是将“四瓣雪花”拆成“四瓣”。那么此时锚点就成为一个矩形。我…

00-docker篇: linux系统安装docker操作 (最实用的操作)

目录 1. docker 简介 -> 简易理解: -> docker是否有自己仓库呢 -> docker 是靠什么运行呢 -> 简单说点docker优点 2. linux安装docker ps: 如果是新服务器 请直接看2. 3 -> 2.1: 查看内核版本: -> 2.2 如果有残留docker, 删除指令 -> 2.3 yu…

2023年全国职业院校技能大赛网络建设与运维-网络运维部分

全国职业院校技能大赛 网络建设与运维 五、网络运维 某单位网络拓扑架构如下,交换机连接两台服务器,其中Server1服务器是数字取证服务器,Server2服务器是应急响应服务器,通过交换设备相连,通过路由设备连接到安全设…

Portraiture4最新版滤镜P图一键磨皮插件

今天coco玛奇朵给大家带来了一款ps磨皮插件,超级简单好用。Portraiture 滤镜是一款 Photoshop,Lightroom 和 Aperture 插件,DobeLighttroom 的 Portraiture 消除了选择性掩蔽和逐像素处理的繁琐的手工劳动,以帮助您在肖像修整方面…

如何使用 ChatGPT 来快速编写产品需求文档(PRD)

PRD 生成 ChatGPT 即了解具体的编程知识,也了解编程之前的需求设计过程。因此产品经理也可以使用 ChatGPT 来快速编写PRD(产品需求文档, production requirement documentation)。 根据需求编写 PRD 首先,我们可以尝试把需求交给 ChatGPT,…

模型如何压缩?使用轻量化的模型压缩技术剪枝(pruning)

深度学习模型参数太多,本地服务器部署没有问题,但是如果部署到移动端、边缘端,像手机、树莓派等,它们的性能不能满足,所以我们要压缩模型大小,让他们可以部署到边缘端 模型压缩:使用轻量化的模型…

Redis 布隆过滤器总结

Redis 布隆过滤器总结 适用场景 大数据判断是否存在来实现去重:这就可以实现出上述的去重功能,如果你的服务器内存足够大的话,那么使用 HashMap 可能是一个不错的解决方案,理论上时间复杂度可以达到 O(1) 的级别,但是…

Flutter 开发的那些小细节

Flutter 创建应用的小注意 包名 每当创建一个新的 Flutter 应用时,一些 Flutter IDE 插件会请你输入一个类似 com.example 的包名,包名(在 iOS 里叫 Bundle ID)一般都是公司域名的反写。如果你的应用打算上架商店,建…