mongodb的连接池管理

https://blog.csdn.net/lin_tuer/article/details/78480203

用单例模式建立mongoDB的连接,需要每次操作完关闭连接吗?
关于建立单例模式的MongoDB连接,参考这里MongoClient连接池用法

建立了之后,每次操作调用同一个实例,MongoClient又是线程安全的,貌似就没有什么问题了。但是 突然想到,这些连接获取后,操作完不主动释放,会不会一直被占有?

– 于是开始找各种资料,这篇文章给出了很形象的说明,MongoDB的连接池和管理
– 原来,答案是没有必要!
在关系型数据库中,我们总是需要关闭使用的数据库连接,不然大量的创建连接会导致资源的浪费甚至于数据库宕机。

通常我们习惯于new 一个connection并且通常在finally语句中调用connection的close()方法将其关闭。正巧,mongoDB中当我们new一个Mongo的时候,会发现它也有一个close()方法。所以会出现这样的情况:我们在需要DB操作的方法中new一个mongo实例,然后调用mongo.getDB()方法拿到对应的连接,操作完数据之后再调用mongo.close()方法来关闭连接。 看起来貌似是没有什么问题,但是如果你再研究一下mongo的API,你会发现这样耳朵操作就相当于园丁在浇花的时候去打了一桶水,然后舀了一勺水浇一朵花,然后他把一桶水全倒了回去,重新打一桶水,再舀了一勺水浇另外一朵花。。。

说到这里大家应该都已经明白了,其实当你new Mongo()的时候,就创建了一个连接池,getDB()只是从这个连接池中拿一个可用的连接。而连接池是不需要我们及时关闭的,我们可以在程序的生命周期中维护一个这样的单例,至于从连接池中拿出的连接,我们需要关闭吗?答案是NO。你会发现DB根本没有close()之类的方法。在mongoDB中,一个连接池会维持一定数目的连接,当你需要的时候调用getDB()去连接池中拿到连接,而mongo会在这个DB执行完数据操作时候自动收回连接到连接池中待用。所以在mongoDB中大家不必担心连接没有关闭的问题,在你需要在所有操作结束或者整个程序shutdown的时候调用mongo的close()方法即可。

MongoDB带安全验证的连接如何设置MongoClientOptions
管理如何创建MongoClient 这篇文章给了详细的介绍 MongoDB 连接 for java

由于我的需要安全验证,我就选择了这种

MongoClientOptions clientOptions =
new MongoClientOptions.Builder()
.connectionsPerHost(50)
.maxWaitTime(2000).build();
List<MongoCredential> lstCredentials =
Arrays.asList(MongoCredential.createMongoCRCredential(
"admin", "myinfo", "123456".toCharArray()));
client = new MongoClient(new ServerAddress("127.0.0.1"),lstCredentials, clientOptions);
client.close();
1
2
3
4
5
6
7
8
9
可是 运行项目,却报出了认证错误,查了之后发现。。方法不对,。

Arrays.asList(MongoCredential.createMongoCRCredential(
"admin", "myinfo", "123456".toCharArray()));
1
2
改为

Arrays.asList(MongoCredential.createCredential(
"admin", "myinfo", "123456".toCharArray()));
1
2
好了就。。。

————————————————
版权声明:本文为CSDN博主「lin_tuer」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lin_tuer/article/details/78480203

原文地址:https://www.cnblogs.com/lwfy/p/11758829.html

时间: 2024-10-14 05:01:16

mongodb的连接池管理的相关文章

java操作mongodb(连接池)(转)

原文链接: java操作mongodb(连接池) Mongo的实例其实就是一个数据库连接池,这个连接池里默认有10个链接.我们没有必要重新实现这个链接池,但是我们可以更改这个连接池的配置.因为Mongo的实例就是一个连接池,所以,项目中最好只存在一个Mongo的实例. 常见的配置参数: connectionsPerHost:每个主机的连接数 threadsAllowedToBlockForConnectionMultiplier:线程队列数,它以上面connectionsPerHost值相乘的结

关于.NET大数据量大并发量的数据连接池管理

转自:http://www.cnblogs.com/virusswb/archive/2010/01/08/1642055.html 我以前对.NET连接池的认识是错误的,原来以为在web.config中设置了连接池,每次发起的数据库连接也还是会是新的,每个sql请求就是一个连接,需要打开和关闭.因此就想设计一个连接池,然后保持固定的连接数,需要数据库连接就从连接池中取出来一个给请求用,用完毕就设置连接空闲,等待下次请求.这样看来是多余的,ADO.NET已经为我们提供这样的连接池管理,每个连接字

使用MongoDB 2.6 C++驱动中的连接池

.post p{text-indent: 2em;} MongoDB2.6的CXX驱动(mongo-cxx-driver-26compat),内置包含了数据库连接池,方便管理数据库连接,但是官方文档说的比较晦涩,新手入门往往不知道怎样使用连接池获取数据库连接.本文简单介绍如何使用基本的连接池. 首先要明确的一点是,虽然有连接池类,但是不需要显示调用该类,具体使用方法如下: mongo::ScopedDbConnection scopedConn = mongo::ScopedDbConnecti

C# 连接池开发,多连接高效应用开发,多连接自动维护管理。

本文将使用一个Github开源的组件库技术来实现连接池的操作,应用于一些情况下的频繁的网络连接操作. github地址:https://github.com/dathlin/HslCommunication 如果喜欢可以star或是fork,还可以打赏支持,打赏请认准源代码项目. 本项目目前支持C#语言和java语言,C#语言的功能比较齐全,java版本的库还在开发及完善中. nuget地址:https://www.nuget.org/packages/HslCommunication/    

【58沈剑架构系列】一分钟写好连接池

一.如何通过连接访问下游 工程架构中有很多访问下游的需求,下游包括但不限于服务/数据库/缓存,其通讯步骤是为: (1)与下游建立一个连接 (2)通过这个连接,收发请求 (3)交互结束,关闭连接,释放资源 这个连接是什么呢,通过连接怎么调用下游接口?服务/数据库/缓存,官方会提供不同语言的Driver.Document.DemoCode来教使用方建立连接与调用接口,以MongoDB的C++官方Driver API为例(伪代码): DBClientConnection* c = new DBClie

JDBC 连接池

数据库连接池(connection pool) JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开发,存在的问题: 数据库的连接资源并没有得到很好的重复利用. 对于每一次数据库连接,使用完后都得断开. 这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃. 数据库连接池 数据库连接池的基本思

【JAVA】 Java 连接池的工作原理

什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它究竟是什么.[如果你已经知道了,你可以跳到它的工作原理部分]     创建连接的代码片段: String connUrl = "jdbc:mysql://your.database.domain/yourDBname"; Class.forName("com.mysql.jdbc.Driver");

java的几种连接池

连接池的管理用了了享元模式,这里对连接池进行简单设计. 一.设计思路 1.连接池配置属性DBbean:里面存放可以配置的一些属性 2.连接池接口IConnectionPool:里面定义一些基本的获取连接的一些方法 3.接口实现ConnectionPool:对上面操作进行实现,并加入一些其他方法 4.连接池管理ConnectionPoolManager:管理所有的不同的连接池,所有的连接都能通过这里进行获得连接 5.另外还有几个测试类,和连接信息模拟的类,这里就不进行xml 和配置文件信息的读取了

Maven 工程下 Spring MVC 站点配置 (三) C3P0连接池与@Autowired的应用

Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 前两篇文章主要是对站点和数据库操作配置进行了演示,如果单单实现这两个需求的话,那么基本足够,但是很多时候一个网站除了仅仅能够访问数据库是不够的,它还需要对性能以及更简化的步骤有着更多的要求,这一篇重点就是帮助我们如何去实现数据连接池管理与更简化便利的开发步骤. 如果你觉得自己能写出更高效率的连接池,那你可以不需要这篇文章了,我更建议你可以去开源组织毛遂自