首页 > 数据库 >mongodb

mongodb

时间:2023-12-11 09:35:28浏览次数:33  
标签:MongoDB 查询 索引 文档 mongodb 集合

mongodb内部培训

目录

mongodbV4.4文档:

https://www.mongodb.com/docs/v4.4/

对于一些基础的安装、crud操作和查询,可以通过官方的文档和教程进行学习,本文内容只涉及开发人员知识。不涉及运维、部署等内容。

简介

MongoDB是一种开源的文档型数据库管理系统,它使用文档来存储数据,文档是一种类似于JSON的数据结构,可以包含键值对、数组和嵌套文档。这种灵活的数据模型使得MongoDB适用于各种类型的数据。

基础概念

  1. 数据库(Database):数据库是MongoDB中的顶层容器,用于存储相关数据的集合。每个数据库都有自己的权限和安全性设置,并且可以在同一台服务器上同时存在多个数据库。在MongoDB中,可以使用命令use <database_name>来切换到指定的数据库。
  2. 集合(Collection):集合是数据库中的一个逻辑分组,类似于关系型数据库中的表。它是一组相关文档的容器,每个文档都可以有不同的结构。集合中的文档可以根据需要动态地添加或删除字段,没有固定的模式要求。在MongoDB中,可以使用命令db.<collection_name>来访问指定的集合。
  3. 文档(Document):文档是MongoDB中的基本数据单元,类似于关系型数据库中的行。它是一个键值对的集合,可以包含各种类型的数据,如字符串、数字、日期、数组、嵌套文档等。文档使用类似于JSON的格式表示,具有灵活的结构。在MongoDB中,文档以BSON(Binary JSON)格式存储,这种格式可以有效地表示复杂的数据结构

和关系型数据库的对应关系

适用场景

  1. 非结构化的数据结构

    我觉得这是相比于mysql等关系型数据库最主要的区别,也是选用mongodb的主要原因~

    MongoDB的文档型数据模型非常灵活,可以根据需要动态地添加或删除字段,没有固定的模式要求。这使得MongoDB适用于需要频繁变化的数据结构或者需要存储半结构化数据的场景。

  2. 大数据量和高性能要求

    在mongodb中常用的数据都缓存在内存里,这样大部分操作只需要读内存,自然很快。此外,文档模式设计一般会是的你所需要的数据都相对集中在一起(这也应该是我们选则monogodb存储数据的最佳范式,即内联文档),减少了关系性数据库需要从各个地方去把数据找过来(然后Join)所耗费的随机读时间。

  3. 复杂的查询需求

    MongoDB提供了强大的查询语言和丰富的查询功能,包括查询操作符、聚合管道和地理空间查询等。这使得在MongoDB中执行复杂的查询变得更加简单和高效。

  4. 天生适用于云原生和微服务架构

    ...

数据建模

mongodb中数据模型设计的最佳实践

mongodb中支持两种数据模型:

嵌入式数据模型

MongoDB可以将相关数据嵌入到单个结构或文档中。这些模式通常被称为“非规范化”模型,如下图:

嵌入式模型应该是我们使用mongodb优先考虑的数据结构,通过使用这种结构,我们可以使用更少的查询和更新语句来完成操作。

同时我们也能减少使用事务操作。

标准化数据模型

和关系型数据库一致,如图:

在mongodb中,通常在以下几种情况下,才考虑这种数据结构:

  1. 嵌入的数据量过多,且包含了很多热门业务不需要的数据,这反而回降低读取操作的速度。

    好比我们的model_origin表。质量、进度、造价都有各自的业务属性。各自主流业务也只关心自己的数据,所以拆开反增加访问速度,和降低技术负债。

  2. 更复杂的多对多关系

    多对多的关系中,使用传统的关系型数据架构能够有更清晰的业务逻辑,数据的一致性保持也更简单,所以多对多不建议使用嵌入式方式。

N对N关系

  • 一对一: 看业务,大多数情况使用嵌入式
  • 一对多: 看业务,大多数使用折中方案, 部分嵌入,部分走引用。
  • 多对多: 关系型

事务

在monogodb中,写操作在单个文档级别上是天生原子的,即使该操作修改了单个文档中的多个嵌入文档(这也是为什么建议优先使用嵌入的原因)。

当单个写入操作修改多个文档,每个文档的修改都是原子的,但操作作为一个整体不是原子的。此时需要引入分布式事务处理。

MongoDB支持多文档事务:

  • 在版本4.0中,MongoDB支持副本集上的多文档事务。
  • 在4.2版本中,MongoDB引入了分布式事务,增加了对分片集群上多文档事务的支持,并结合了对副本集上多文档事务的现有支持。此后mongodb中 【分布式事务】和【多文档事务】是一个意思。
  • ...

在大多数情况下,多文档事务比单文档写入带来更大的性能成本,并且多文档事务的可用性不应取代有效的模式设计。对于许多场景,反规范化的数据模型(嵌入文档和数组)将继续是最适合您的数据和用例的。也就是说,对于许多场景,适当地对数据建模将最大限度地减少对多文档事务的需求。

生产经验

下面列一些实际使用中遇到的关于事务失败的才坑点,详细内容,参看官方文档

  1. 运行时间的限制

    默认情况下,事务的运行时间必须小于一分钟。您可以对 mongod 实例使用 transactionLifetimeLimitSeconds 修改此限制。对于分片集群,必须为所有分片副本集成员修改该参数。超过此限制的事务将被视为已过期,并将由定期清理进程中止。

    //设置事务超时为30s
    db.adminCommand( { setParameter: 1, transactionLifetimeLimitSeconds: 30 } )
    //也可以添加启动参数
    mongod --setParameter "transactionLifetimeLimitSeconds=30"
    
    
  2. Oplog 操作日志的大小限制

    标签:MongoDB,查询,索引,文档,mongodb,集合
    From: https://www.cnblogs.com/cnff/p/17545501.html

相关文章

  • 转载:MongoDB的删除文档、查询文档语句
    本文主要介绍MongoDB的删除文档、查询文档命令语句。 目录MongoDB删除文档MongoDB查询文档 MongoDB删除文档MongoDB是一种基于文档的NoSQL数据库,它使用BSON格式存储文档。删除文档是MongoDB数据库中的常见操作之一。下面是MongoDB删除文档的详细介绍和示例:使用......
  • MongoDB
    MongoDBCommunityServer的安装确认你的系统架构:在终端中运行以下命令来确认你的系统架构:bashdpkg--print-architecture这应该会输出amd64,因为错误信息已经表明了你的系统是amd64架构。下载正确的软件包:你需要下载适用于amd64体系结构的MongoDB服务器软件......
  • MongoDB 备份与恢复
    1.1MongoDB的常用命令mongoexport/mongoimportmongodump/mongorestore有以上两组命令在备份与恢复中进行使用。1.1.1导出工具mongoexportMongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指......
  • MongoDB (操作数据库,操作集合,操作文档)的笔记
    https://www.bilibili.com/video/BV1gV411H7jN/?spm_id_from=333.999.0.0&vd_source=92305fa48ea41cb7bedb3ab5e056d42db站mongodb的视频链接。1,MongoDB是什么?  2,MongoDB和Redis的区别2.1,内存管理机制 2.2,支持的数据结构 2.3,不适用场景3,可视化工具Robomongomon......
  • MongoDB 各种复杂查询彻底弄明白
    查询语法db.collection.find(query,projection)query :可选,使用查询操作符指定查询条件projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需省略该参数即可(默认省略)。querymongoDB的query就好比MySQL中where后的内容。我们知道where后可以跟很多条件语句......
  • mongodb慢查询基础知识
    慢查询基础知识介绍如何定位MongoDB数据库的慢查询,我想应该是很多刚使用MongoDB数据库的朋友最想知道的问题。通过慢查询的定位,可以辅助对MongoDB中的collection进行优化。MongoDB数据库的慢查询数据其实存放在一个数据库集合(collection)中(system.profile),如果你......
  • MongoTemplate操作MongoDB
    集成简介spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。搭建开发环境1、创建springbo......
  • MongoDB的安装使用与监控
    MongoDB的安装使用与监控下载https://www.mongodb.com/try/download/community我这边习惯于下载Windows的MSI进行安装Linux喜欢下载tgz包.这样便于迁移与快速部署.安装解压缩然后将bin目录下的文件复制到/usr/bin目录下添加用户useraddmonogdb添加文件mkdir-p/......
  • 大数据实验(Mysql、hbase、redis、MongoDBjava客户端连接)
    1.MySQL启动:虚拟机输入mysql-uroot-p输入密码:hadoop(黑马的mysql密码是hadoop)pom.xml需要引入mysql<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></proper......
  • 【Python爬虫】第11篇:Mongodb数据库进阶使用。从0到scrapy高手笔记(附代码,可自取)
    本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识,通过本文我们能够知道什么是爬虫,都有那些分类,爬虫能干什么等,同时还会站在爬虫的角度复习一下http协议。全套笔记和代码自取地址:请移步这里感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~共8章,37子模块Mongodb数......