聊聊MongoDB中连接池/索引/事务

科技资讯 投稿 5600 0 评论

聊聊MongoDB中连接池/索引/事务

三分钟你将学会:

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

MongoDatabase database = new MongoClient("localhost", 27017.getDatabase("test"; 的方式连接MongoDB。

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

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

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

MongoDB查询数据五步走

    MongoDB Client需要找到可用的MongoDB;
  1. Server MongoDB Client需要和 MongoDB Server建立 Connection;
  2. 应用程序处理线程从 Connection Pool中获取 Connection;
  3. 数据传输(获取连接后,进行 Socket 通信,获取数据);
  4. 断开 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内嵌文档是什么?

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

"address"上的索引。

MongoDB事务是什么?

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

ACID是什么?

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

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

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

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

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

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

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

核心API和回调API的比较

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

聚合框架是什么?

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

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

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

编程笔记 » 聊聊MongoDB中连接池/索引/事务

赞同 (31) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽