MongDB文档--基本概念

news2024/9/20 5:54:50

阿丹:

        不断拓展自己的技术栈,不断学习新技术。

基本概念

 

MongoDB中文手册|官方文档中文版 - MongoDB-CN-Manual

 mongdb是文档数据库

MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。

文档数据库

        文档数据库是一种数据库模型,它专门用于存储和管理非结构化数据,例如文档、文本和半结构化数据。相比传统的关系型数据库,文档数据库通过将数据组织为灵活的文档集合来提供更高的灵活性和扩展性。

        在文档数据库中,数据以类似于JSON或BSON的文档格式存储,每个文档可以具有不同的结构和字段。这使得文档数据库适用于处理动态数据、半结构化数据或需要频繁变更模式的应用程序。

        另一个重要的概念是文档数据库的查询能力。文档数据库提供了强大且灵活的查询功能,允许开发人员按需检索和操作存储的文档数据。这些查询可以使用结构化查询语言,如MongoDB的查询语言,或通过API进行编程。

        总的来说,文档数据库提供了一种高度灵活的存储和查询解决方案,适合那些需要存储非结构化数据并保持灵活性的应用程序。

使用文档优点:

  • 文档(即对象)对应于许多编程语言中的内置数据类型。

  • 嵌入式文档和数组减少了对昂贵连接的需求。

  • 动态模式支持流畅的多态性。

JSON(JavaScript Object Notation)和BSON(Binary JSON)都是用于表示结构化数据的格式,常用于文档数据库中的文档存储。

JSON是一种轻量级的数据交换格式,易于理解和使用。它使用人类可读的文本格式,采用键值对的形式来表示数据。JSON文档由嵌套的键值对组成,可以包含字符串、数字、布尔值、数组、嵌套的对象等数据类型。JSON格式非常适合简单的数据结构和基本的数据交换。

BSON是JSON的二进制表示形式,旨在提供更高的效率和更紧凑的存储方式。BSON使用二进制编码,以二进制形式表示JSON文档的键值对。与JSON相比,BSON格式存储更加紧凑,减少了存储空间和数据传输的需求,同时提供了更高的读写性能。

BSON支持的数据类型包括字符串、整数、浮点数、日期时间、布尔值、数组、嵌套的文档对象等。它还可以表示特殊类型,如正则表达式、JavaScript代码和二进制数据。BSON还提供了对数据类型的扩展,以支持更复杂的数据结构和功能,例如时间戳、最小、最大值等。

由于BSON的二进制表示形式,它在存储和传输数据时更加高效,并且能够更好地适应文档数据库的要求。因此,BSON是许多文档数据库(如MongoDB)中常用的文档存储格式。

下面是一个bson格式的示例

\x16\x00\x00\x00                          // 整个文档的大小
\x02                                      // 数据类型为字符串
name\x00                                 // 字段名
\x0C\x00\x00\x00John\x00        // 字段值为字符串 "John"
\x10                                      // 数据类型为整数
age\x00                                   // 字段名
\x1E\x00\x00\x00                          // 字段值为整数 30
\x00                                      // 数据类型为结束符

 集合/视图/按需实例化视图

MongoDB将文档存储在集合中。集合类似于关系数据库中的表。

除集合外,MongoDB还支持:

  • 只读视图(从MongoDB 3.4开始)

  • 按需实例化视图(从MongoDB 4.2开始)。

mongdb中的集合

数据库和集合 - MongoDB-CN-Manual

在MongoDB中,集合是文档的组,类似于关系数据库中的表。集合存在于数据库中,集合没有固定的结构,这意味着集合内的文档可以有不同的字段。

集合有以下主要特点:

  1. 集合存在于数据库中,一个数据库可以有多个集合。
  2. 集合类似于关系数据库中的表,但集合没有固定的结构。不同的文档可以有不同的字段。
  3. 集合中的每个文档都有一个主键_id来唯一标识。
  4. 集合可以通过名称来标识,当首次存储文档时会自动创建集合。
  5. 一个集合可以存储任意多个文档。
  6. 集合不会强制执行模式(schema),所以同一个集合中的文档可以有不同的字段。
  7. 集合会继承数据库的权限管理。

mongdb中的只读视图

Views — MongoDB Manual

 只读视图的使用业务场景

  1. 数据隔离:在某些情况下,我们需要将不同的用户或应用程序隔离开来,让他们只能访问自己需要的数据,而不能修改或删除其他人的数据。只读视图可以帮助我们实现数据隔离,保护数据的安全性和完整性。
  2. 数据审计:只读视图可以用于数据审计,即对数据进行审查和验证。通过只读视图,我们可以方便地查看数据,而不能修改或删除数据,确保数据的完整性和准确性。
  3. 数据共享:只读视图也可以用于数据共享,让不同的用户或应用程序共享数据,但不允许他们修改或删除数据。这样,我们可以确保数据的安全性和完整性,同时让更多的人能够方便地使用数据。

mongdb中的按需实例化视图

又称按需式物化视图,是MongoDB4.2最强大的新增功能之一

按需实例化视图是在MongoDB中一种特殊的只读集合,它会根据用户的查询需求,动态地实例化视图。与传统的只读视图不同,按需实例化视图不会提前创建视图,而是在每次查询时实时创建,并根据查询条件过滤数据。

按需实例化视图可以有效地减少存储空间和计算资源的使用,因为只有在需要查询数据时才会创建视图,并过滤出符合条件的数据。此外,按需实例化视图还可以提高查询性能,因为它们不会受到固定视图所带来的限制,可以更灵活地过滤数据。

在MongoDB中,按需实例化视图可以通过使用$merge阶段来创建。$merge阶段可以将管道结果的集合合并到现有集合中,而不是完全替换集合。这个特性使得按需实例化视图成为可能。通过在管道中添加$merge阶段,我们可以将聚合结果写入到现有集合中,并在需要时动态地实例化视图。

按需实例化视图在某些情况下非常有用,例如当我们需要动态地过滤数据,并根据查询条件实时生成视图时。通过使用按需实例化视图,我们可以更加灵活地处理数据,并确保数据的安全性和完整性。

水平拓展

MongoDB提供水平可伸缩性作为其_核心_ 功能的一部分:

  • 分片将数据分布在一个集群的机器上。

  • 从3.4开始,MongoDB支持基于分片键创建数据区域。在平衡群集中,MongoDB仅将区域覆盖的读写定向到区域内的那些分片。有关 更多信息,请参见区域章节。

支持多种存储引擎

MongoDB支持多个存储引擎:

  • WiredTiger存储引擎(包括对静态加密的支持 )

  • 内存存储引擎。

另外,MongoDB提供可插拔的存储引擎API,允许第三方为MongoDB开发存储引擎。

← MongoDB手册内容

原文链接:Introduction to MongoDB — MongoDB Manual

使用场景

 MongoDB是一种文档型数据库,具有高性能、高伸缩性和易用性等特点,适用于多种场景。以下是一些MongoDB的使用场景:

  1. 实时数据分析:MongoDB可以快速处理大量数据,并提供实时数据分析功能,适用于网络分析、业务智能、市场分析等场景。
  2. 游戏开发:MongoDB适合存储游戏用户信息、装备、积分等数据,并提供强大的查询和更新功能,提高游戏开发效率。
  3. 物流管理:MongoDB可以存储订单信息、订单状态、物流信息等数据,并提供灵活的查询和更新功能,帮助物流企业提高管理效率。
  4. 社交网络:MongoDB适合存储用户信息、朋友圈信息、地理位置信息等数据,并提供了强大的查询和数据分析功能,适用于社交网络应用。
  5. 物联网:MongoDB可以存储智能设备信息、设备汇报的日志信息等数据,并提供了实时查询和分析功能,适用于物联网应用。
  6. 视频直播:MongoDB可以存储用户信息、礼物信息等数据,并提供了高伸缩性和实时查询功能,适用于视频直播应用。

总之,MongoDB适用于需要处理大量数据、需要高伸缩性和实时查询的场景,可以提供高效的数据存储、查询和分析功能,帮助企业提高业务效率和竞争力。

mongdb的使用原因

MongoDB之所以被广泛使用,是因为它具有以下优点:

  1. 文档型数据库结构:MongoDB采用文档型数据库结构,可以存储各种类型的数据,如文本、数字、日期、二进制数据等,而且数据存储不需要固定的结构,可以灵活地插入和更新数据。
  2. 高性能:MongoDB使用了内存映射文件的方式,将数据存储在内存中,提高了读写速度和性能。
  3. 高扩展性:MongoDB支持分片集群,可以将数据分布在多个节点上,提高系统的扩展性和可靠性。
  4. 查询语言丰富:MongoDB支持丰富的查询语言,可以轻松地查询和过滤数据。
  5. 易于使用:MongoDB提供了丰富的的主流客户端库和语言驱动程序,可以方便地与各种应用程序进行集成。
  6. 社区支持:MongoDB拥有一个活跃的社区,提供了大量的的问题解决方案和工具,使得开发人员可以更加轻松地解决技术问题。

综上所述,MongoDB具有文档型数据库结构、高性能、高扩展性、查询语言丰富、易于使用和社区支持等优点,使得它成为一种广泛使用的数据库。

mongdb的同类产品对比

MongoDB与其他数据库产品相比,具有以下特点:

  1. 文档型数据库结构:MongoDB采用文档型数据库结构,可以存储各种类型的数据,如文本、数字、日期、二进制数据等,而且数据存储不需要固定的结构,可以灵活地插入和更新数据。
  2. 高性能:MongoDB使用了内存映射文件的方式,将数据存储在内存中,提高了读写速度和性能。
  3. 高扩展性:MongoDB支持分片集群,可以将数据分布在多个节点上,提高系统的扩展性和可靠性。
  4. 查询语言丰富:MongoDB支持丰富的查询语言,可以轻松地查询和过滤数据。
  5. 易于使用:MongoDB提供了丰富的主流客户端库和语言驱动程序,可以方便地与各种应用程序进行集成。

相比其他数据库产品,MongoDB在文档型数据库结构、高性能、高扩展性、查询语言丰富、易于使用等方面具有优势。但是,每个数据库产品都有其适用的场景和优势,需要根据具体的应用需求来选择最合适的数据库产品。

Cassandra,CouchDB,Redis,Riak,Hbase同类型产品

Cassandra、CouchDB、Redis、Riak和HBase都是流行的数据库产品,每个产品都有其自己的特点和优缺点。

以下是对这些产品与MongoDB的对比和优缺点的简要概述:

  1. Cassandra: Cassandra是高度可扩展的,能够处理大规模数据,并提供了强大的写入和读取性能。它的分布式特性使其能够轻松地跨多个节点进行数据复制和故障恢复。但是,Cassandra的使用相对复杂,需要一定的技术水平。
  2. CouchDB: CouchDB是一个高度可扩展的数据库,具有良好的容错性和可靠性。它使用文档存储数据,并支持全文搜索和附件处理。CouchDB的使用相对简单,但是它的性能相对较差,可能不适合高负载应用。
  3. Redis: Redis是一个内存数据库,具有非常高的读写性能和快速的数据访问速度。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合。但是,Redis的存储容量受到内存限制,不适合存储大量数据。
  4. Riak: Riak是一个高度可扩展的分布式数据库,能够处理大规模数据。它具有良好的容错性和可靠性,并支持多种数据类型和查询语言。Riak的使用相对简单,但是它的性能相对较差,可能不适合高负载应用。
  5. HBase: HBase是一个分布式键值存储数据库,具有高性能和可扩展性。它能够处理大量数据,并支持多种数据类型和查询语言。但是,HBase的使用相对复杂,需要一定的技术水平。

相比之下,MongoDB具有文档型数据库结构、高性能、高扩展性、查询语言丰富、易于使用等优点。但是,每个数据库产品都有其适用的场景和优势,需要根据具体的应用需求来选择最合适的数据库产品。

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

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

相关文章

解读北鼎股份2023上半年财报:稳营收,高品质才是重点?

从上半年大部分公司的财报来看,降本增效仍是主旋律。这其中北鼎股份走出了自己的风格,在小红书等电商平台上推出了热度颇高的话题活动,借用户之力完成产品推广,北鼎股份将消费者的价值发挥到了最大。 从2023年7月19日北鼎股份披露…

面试题:说一说深拷贝和浅拷贝?

JavaScript中存在两大数据类型: 基本类型 和 引用类型 基本类型数据保存在在栈内存中 引用类型数据保存在堆内存中,引用数据类型的变量是一个指向堆内存中实际对象的引用,存在栈中 深拷贝和浅拷贝都只针对于引用类型。 一、 浅拷贝&#xff1…

31.利用linprog 解决 投资问题(matlab程序)

1.简述 语法:[X,FVAL] linprog(f,a,b,Aeq,Beq,LB,UB,X0); X 为最终解 , FVAL为最终解对应的函数值 *注意:求最大值时,结果FVAL需要取反* f 为决策函数的系数矩阵。 *注意:当所求为最大值…

代码随想录算法训练营第六天| 454.四数相加II,383. 赎金信的交集, 15.三数之和(需要二刷) 18.四数之和(需要二刷)

454.四数相加II 暴力超时 class Solution {public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {//超出时间限制//分别从4个数组中任选一个,四数相加0int n nums4.length,index0;int count0;int[] arr1new int[n*n];int[] arr2new i…

机器学习:训练集与测试集分割train_test_split

1 引言 在使用机器学习训练模型算法的过程中,为提高模型的泛化能力、防止过拟合等目的,需要将整体数据划分为训练集和测试集两部分,训练集用于模型训练,测试集用于模型的验证。此时,使用train_test_split函数可便捷高…

Go语言性能优化建议与pprof性能调优详解——结合博客项目实战

文章目录 性能优化建议Benchmark的使用slice优化预分配内存大内存未释放 map优化字符串处理优化结构体优化atomic包小结 pprof性能调优采集性能数据服务型应用go tool pprof命令项目调优分析修改main.go安装go-wrk命令行交互界面图形化火焰图 性能优化建议 简介: …

python用来做什么的,python用来干什么的

大家好,小编为大家解答python用来干什么的的问题。很多人还不知道python用来做什么的,现在让我们一起来看看吧! 编程语言python是用来干什么的? python的作用: 1、系统编程:提供API(ApplicationProgrammin…

【算法提高:动态规划】1.3 背包模型 TODO

文章目录 例题列表423. 采药(01背包)1024. 装箱问题(大小和价值相等的01背包)1022. 宠物小精灵之收服(二维费用的背包问题)补充:相关题目——8. 二维费用的背包问题 278. 数字组合(0…

阿里云负载均衡SLB网络型NLB负载均衡架构性能详解

阿里云网络型负载均衡NLB是阿里云推出的新一代四层负载均衡,支持超高性能和自动弹性能力,单实例可以达到1亿并发连接,帮您轻松应对高并发业务。网络型负载均衡NLB具有超强性能、自动弹性伸缩、高可用、TCPSSL卸载、多场景流量分发和丰富的高级…

【初阶C语言】数组

目录 一、一维数组 1.一维数组的创建和初始化 2.一维数组的使用 3.一维数组在内存中的存储 二、二维数组 1.二维数组的创建 2.二维数组的初始化 3.二维数组的使用 4.二维数组在内存中的存储 三、数组的越界问题 四、数组传参 前言: 数组在C语言中是一个…

express学习笔记6 - 用户模块

新建router/user.js const express require(express) const routerexpress.Router() router.get(/login, function(req, res, next) {console.log(/user/login, req.body)res.json({code: 0,msg: 登录成功})})module.exportsrouter 在router/user.js引入并使用 const us…

一起学算法(链表篇)

1.链表的概念 对于顺序存储的结构最大的缺点就是插入和排序的时候需要移动大量的元素&#xff0c;所以链表的出生由此而来 先上代码&#xff1a; // 链表 public class LinkedList<T extends Comparable> {// 结点类class Node {T ele; // 当前结点上的元素内容Node ne…

java学习路程之篇四、进阶知识、石头迷阵游戏、绘制界面、打乱石头方块、移动业务、游戏判定胜利、统计步数、重新游戏

文章目录 1、绘制界面2、打乱石头方块3、移动业务4、游戏判定胜利5、统计步数6、重新游戏7、完整代码 1、绘制界面 2、打乱石头方块 3、移动业务 4、游戏判定胜利 5、统计步数 6、重新游戏 7、完整代码 java之石头迷阵单击游戏、继承、接口、窗体、事件、组件、按钮、图片

【Spring】Spring 中事务的实现

目录 1.编程式事务&#xff08;手动编写代码&#xff09;2.声明式事务&#xff08;利用注解&#xff09;2.1 Transactional作用范围2.2 Transactional参数说明2.3 Transactional工作原理 3.Spring 中设置事务隔离级别3.1 事务四大特性ACID3.2 事务的隔离级别3.2 Spring中设置事…

(13) Qt事件系统(two)

目录 事件分发函数 无边框窗口拖动 自定义事件 发送事件的函数 自定义事件 系统定义的事件号 自定义事件号 自定义事件类 发送和处理事件 sendEvent与postEvent的区别 栈区对象 堆区对象 事件传播机制 事件传播的过程 事件传播到父组件 鼠标单击事件与按钮单击信…

【STM32零基础入门教程03】GPIO输入输出之GPIO框图分析

本章节主要讲解点亮LED的基本原理&#xff0c;以及GPIO框图的讲解。 如何点亮LED&#xff08;输出&#xff09; 首先我们查看原理图&#xff0c;观察电路图中LED的连接情况&#xff0c;如下图可以看出我们的板子中LED一端通过限流电阻连接的PB0另一端连接的是高电平VCC&#xf…

30. 利用linprog 解决 生产决策问题(matlab程序)

1.简述 线线规划的几个基本性质&#xff1a;【文献[1]第46页】 (1)线性规划问题的可行域如果非空&#xff0c;则是一个凸集-凸多面体&#xff1b; (2)如果线性规划问题有最优解&#xff0c;那么最优解可在可行域的顶点中确定&#xff1b; (3)如果可行域有界&#xff0c;且可行域…

【数据中台】DataX源码进行二开插件

参考官方 使用的离线数据同步工具/平台&#xff0c;实现不同数据库等各种异构数据源之间高效的数据同步功能 工具部署 https://github.com/alibaba/DataX/blob/master/userGuid.md 拉取下来的代码&#xff0c;pom.xml里面注释 <!--<module>tsdbreader</module&g…

大整数截取解决方法(java代码)

大整数截取解决方法&#xff08;java代码&#xff09; 描述输入描述输出描述输入示例输出示例前置知识&#xff1a;代码 解题思路来自这个博客&#xff1a;简单^不简单 https://blog.csdn.net/younger_china/article/details/126376374 描述 花花有一个很珍贵的数字串&#xf…

P4053 [JSOI2007] 建筑抢修(贪心)(内附封面)

[JSOI2007] 建筑抢修 题目描述 小刚在玩 JSOI 提供的一个称之为“建筑抢修”的电脑游戏&#xff1a;经过了一场激烈的战斗&#xff0c;T 部落消灭了所有 Z 部落的入侵者。但是 T 部落的基地里已经有 N N N 个建筑设施受到了严重的损伤&#xff0c;如果不尽快修复的话&#x…