我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MongoDB中连接池、索引、事务

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MongoDB中连接池、索引、事务

三分钟你将学会:

  • MongoDB连接池的使用方式与常用参数
  • 查询五步走,能活九十九?
  • MongoDB索引与MySQL索引有何异同?
  • MongoDB事务与ACID
  • 什么是聚合框架?

在最开始接触MongoDB的时候,是通过 MongoDatabase database = new MongoClient("localhost", 27017).getDatabase("test"); 的方式连接MongoDB。

它会为每个请求创建一个新的连接,然后销毁,一般数据库的连接都是TCP连接,TCP是长连接,如果不断开,就会一直连着。

众所周知,新建一个数据库连接的代价是很大的,复用现有连接才是首选,连接池就是干这个的。

连接池 = 数据库连接的缓存

因此当需要新的连接时,就可以复用连接池中缓存的连接了。如果使用得当,连接池可以最大程度的降低数据库的新连接数量、创建频率。

可以通过Mongo.get方法获得DB对象,表示MongoDB数据库的一个连接。默认情况下,当执行完数据库的查询操作后,连接将自动回到连接池中,通过api中的finally方法,将连接归还给连接池,不需要手动调用。

MongoDB查询数据五步走

  • MongoDB Client需要找到可用的MongoDB;
  • Server MongoDB Client需要和 MongoDB Server建立 Connection;
  • 应用程序处理线程从 Connection Pool中获取 Connection;
  • 数据传输(获取连接后,进行 Socket 通信,获取数据);
  • 断开 Collection;

MongoDB连接池的参数配置

#线程池允许的最大连接数
connectionsPerHost: 40
#线程池中连接的最大空闲时间
threadsAllowedToBlockForConnectionMultiplier: 20
#1、MongoDB Client需要找到可用的MongoDB Server所需要的等待时间
serverSelectionTimeout: 40000
#2、MongoDB Client需要和MongoDB Server建立(new)Connection
connectTimeout: 60000
#3、应用程序处理线程从Connection Pool中获取Connection
maxWaitTime: 120000
#自动重连
autoConnectRetry: true
#socket是否保活
socketKeepAlive: true
#4、数据传输(获取连接后,进行Socket通信,获取数据)
socketTimeout: 30000
slaveOk: true
dbName: ngo
#是否进行权限验证
auth: false
#用户名
username: ngo
#密码
password: 12345678

下面简单说一下MongoDB的索引

索引可以显著缩短查询时间,但是,使用索引也是有代价的,索引字段的增删改操作会花费更长时间,因为在更改数据时,除了更新文档数据,MongoDB还必须更新索引。这个和关系型数据库是一样的。MongoDB的索引机制和关系型数据库的索引机制大同小异。

要选择为哪些字段建索引,可以查看常用的查询以及那些需要快速执行的查询。

索引基数是指集合中某个字段有多少个不同的值

通常来说,一个字段的基数越高,这个字段上的索引就越有用。这是因为这样的索引能够迅速将搜索范围缩小到一个比较小的结果集。对于基数比较低的字段,索引通常无法排除大量可能的匹配项。

索引可以显著缩短查询时间,但是,使用索引也是有代价的,索引字段的增删改操作会花费更长时间,因为在更改数据时,除了更新文档数据,MongoDB还必须更新索引。这个和关系型数据库是一样的。MongoDB的索引机制和关系型数据库的索引机制大同小异。

要选择为哪些字段建索引,可以查看常用的查询以及那些需要快速执行的查询。

MongoDB内嵌文档是什么?

MongoDB允许深入文档内部,对内嵌字段和数组创建索引。内嵌对象和数组字段可以和顶级字段一起在符合索引中使用。

可以在内嵌文档的键上创建索引,方法与在普通键上创建索引相同。

在info中的address字段上建立索引。对子文档创建索引,只有进行与子文档字段顺序完全匹配的查询时,查询优化器才能使用"address"上的索引。

MongoDB事务是什么?

事务是数据库中处理的逻辑单元,包括一个或多个数据库操作,既可以是读操作,也可以是写操作,MongoDB支持跨个多操作、集合、数据库、文档和分片的ACID事务。

事务的关键:它要么都成功,要么都失败。

ACID是什么?

ACID是一个事务所需要具备的一组属性集合。

ACID是原子性atomicity、一致性consistency、隔离性isolation、持久性durability的缩写。

ACID事务可以确保数据和数据库状态的有效性,即使在出现断电或其它错误的情况下也是如此。

原子性确保了事务中的所有操作要么都被执行、要么都不被执行。

一致性确保可如果事务成功,那么数据库将从一个一致性状态转移到下一个一致性状态。

隔离性是允许多个事务同时在数据库中运行的属性。它保证了一个事务不会查看到任何其它事务的部分结果,这意味着多个事务并行运行于依次运行每个事务所获得的结果都相同。

持久性确保了在提交事务时,即使系统发生故障,所有数据也都会保持持久化。

当数据库满足所有这些属性并且只有成功的事务才会被处理时,它就被称为符合ACID的数据库。如果在事务完成之前发生故障,ACID确保不会更改任何数据。

MongoDB是一个分布式数据库,它支持跨副本集和跨分片的ACID事务。网络层增加了额外的复杂性。

MongoDB提供了两种API来使用事务

  • 第一种与关系型数据库类似(如start_transaction和commit_transaction),称为核心API;
  • 第二种称为回调API,一般推荐使用这种;

核心API不会为大多数错误提供重试逻辑,它要求开发人员为操作、事务提交函数以及所需的任何重试和错误逻辑手动编写代码。

与核心API不同,回调API提供了一个简单的函数,该函数封装了大量的功能,包括启动与指定逻辑会话关联的事务、执行作为回调函数提供的函数以及提交事务。回调API还提供了处理提交错误的重试逻辑。在MongoDB4.2中添加回调API是为了简化使用事务的应用程序开发,也便于添加处理事务错误的应用程序重试逻辑。

核心API和回调API的比较

核心API回调API
需要显示调用才能启动和提交事务启动事务、执行指定操作,然后提交(可在发生错误前终止)
不包含TransientTransactionError和UnknowTransactionCommitResult的错误处理逻辑,而是提供了为这些错误进行自定义处理的灵活性自动为TransientTransactionError和UnknowTransactionCommitResult提供错误处理逻辑
要求为特定事务将显式的逻辑会话传递给API要求为特定事务将显式的逻辑会话传递给API

聚合框架是什么?

聚合框架是MongoDB中的一组分析工具,可以对一个或多个集合中的文档进行分析。

聚合框架基于管道的概念,使用聚合管道可以从MongoDB集合获取输入,并将该集合中的文档传递到一个或多个阶段,每个阶段对输入执行不同的操作。每个阶段都将之前阶段输出的内容作为输入。所有阶段的输入和输出都是文档,可以称为文档流。

每个阶段都会提供一组按钮或可调参数,可以通过控制它们来设置该阶段的参数,以执行各种任务。

这些可调参数通常采用运算符的形式,可以使用这些运算符来修改字段、执行算术运算、调整文档形状、执行各种累加任务或其它各种操作。

常见的聚合管道包括匹配match、投射project、排序sort、跳过skip、限制limit。

到此这篇关于MongoDB中连接池、索引、事务的文章就介绍到这了,更多相关MongoDB中连接池、索引、事务内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MongoDB中连接池、索引、事务

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MongoDB中连接池、索引、事务

这篇文章主要介绍了MongoDB中连接池、索引、事务的相关资料,需要的朋友可以参考下
2023-01-11

Spring事务管理中关于数据库连接池详解

事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态。事务管理是Spring框架中最为常用的功能之一,我们在使用SpringBoot开发应用时,大部分情况下也都需要使用事务
2022-12-09

MySQL中的索引、左连接、右连接、join、sql执行顺序

逻辑架构:  1、连接层  2、服务层  3、引擎层(插拔式)  4、存储层存储引擎:  常用的有:MyISAM、InnoDB  查看命令:show variables like "%storage_engine%";索引:【单值、复合】 创建索引:creat
MySQL中的索引、左连接、右连接、join、sql执行顺序
2017-09-12

索引在Oracle中优化远程数据库连接

在Oracle中,优化远程数据库连接的索引可以通过以下几种方法来实现:使用远程表的索引:如果远程数据库中的表有索引,可以使用这些索引在查询时加速检索。在查询时确保可以利用远程表的索引,可以通过使用HINT提示或者创建数据库链接时指定使用in
索引在Oracle中优化远程数据库连接
2024-08-14

MongoDB技术开发中遇到的连接池耗尽问题解决方案分析

MongoDB技术开发中遇到的连接池耗尽问题解决方案分析摘要:在进行MongoDB技术开发过程中,连接池耗尽是一个常见的问题。本文将针对这一问题进行分析,并提供解决方案。我们将从连接池管理、连接池大小配置、重试机制等多个方面进行探讨,以帮助
2023-10-22

利用MongoDB技术开发中遇到的连接池管理问题的解决方案探究

标题:MongoDB连接池管理问题的解决方案探究及代码示例摘要:本文将探讨在利用MongoDB技术进行开发过程中遇到的连接池管理问题,并提供了一种解决方案。通过分析连接池管理的必要性和难点,我们将介绍如何利用Node.js中的mongoos
2023-10-22

PHP数据库连接中的事务处理机制详解

php 中的事务处理机制旨在确保数据库操作的完整性,它允许一组操作要么全部执行,要么都不执行。实现方式包括开启事务、执行操作,以及根据情况提交或回滚事务。通过使用事务处理,可以确保数据库在更新过程中始终保持一致。PHP 数据库连接中的事务处
PHP数据库连接中的事务处理机制详解
2024-05-21

C#中常见的数据库连接和事务处理问题及解决方法

C#中常见的数据库连接和事务处理问题及解决方法摘要:随着互联网和信息技术的飞速发展,数据库的使用越来越广泛。作为开发人员,在编写应用程序时,数据库连接和事务处理是必不可少的部分。然而,由于各种原因,可能会出现一些常见的问题。本文将详细介绍C
2023-10-22

Go语言中如何处理并发数据库连接的事务隔离级别问题?

Go语言中如何处理并发数据库连接的事务隔离级别问题?随着大数据时代的到来,数据库操作已成为了程序开发中的重要环节。而在并发环境下,如何处理数据库连接的事务隔离级别问题成为了一个值得探讨的话题。本文将介绍如何使用Go语言来处理这个问题,并提供
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录