MongoDB连接池

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

MongoDB的从最开始的Mongo连接到------------>new MongoClient连接.到现在3.7版本的MongoClients.create连接...

但是连接池也发生变化,这里就简单梳理一下三种连接的方式

 

以下的连接都是不完善的....每个都有自己的习惯,

比如我想连接的时候顺便连接mongodb的时候要连接数据库和集合,这要进行判断处理...校验是否是该集合和数据库...是否为空

这些都根据自己的实际情况而定.....我只是讲述三种连接池....侧重点在于参数的配置

第一种:Mongo--->这种已经被淘汰

package com.gaosheng.mongodb.java._day01;

import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoOptions;

//mongo
public class Connection_Mongo {
	private static Mongo mongo = null;

	private Connection_Mongo() {
	}

	public static Mongo getConnection() {
		// 单利模式.双重锁机制
		if (mongo == null) {
			synchronized (Mongo.class) {
				if (mongo == null) {
					mongo = new Mongo("localhost", 27017);
					MongoOptions mongoOptions = mongo.getMongoOptions();
					// 连接池配置
					// 连接数量
					mongoOptions.connectionsPerHost = 34;
					// 队列
					mongoOptions.threadsAllowedToBlockForConnectionMultiplier = 50;
					// 连接时间
					mongoOptions.connectTimeout = 5000;
					// 最大等待时间
					mongoOptions.maxWaitTime = 2000;
				}
			}
		}
		return mongo;

	}
	public static void closeMongoCollection(Mongo mongo) {
		if (mongo != null) {
			mongo.close();
		}
	}
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		Mongo connection = Connection_Mongo.getConnection();
		DBCollection collection = connection.getDB("my_mongoose").getCollection("emps");
		DBCursor find = collection.find();
		while (find.hasNext()) {
			System.out.println(find.next());
		}
	}
}

 

第二种 :new MongoClient()

package com.gaosheng.mongodb.java._day01;

import org.bson.Document;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;

public class Connection_MongoClient {
	private static MongoClient mongoClient = null;

	private Connection_MongoClient() {
	}

	@SuppressWarnings("resource")
	public static MongoClient getMongoClient() {
		if (mongoClient == null) {
			synchronized (MongoClient.class) {
				if (mongoClient == null) {
					ServerAddress serverAddress = new ServerAddress("localhost", 27017);
					mongoClient = new MongoClient(serverAddress);
					MongoClientOptions options = MongoClientOptions.builder().maxWaitTime(2000)
							.maxConnectionLifeTime(2000).maxConnectionIdleTime(2000).build();
				}
			}
		}
		return mongoClient;
	}
	public static void closeMongoCollection(MongoClient mongoClient) {
		if (mongoClient != null) {
			mongoClient.close();
		}
	}

	public static void main(String[] args) {
		MongoClient mongoClient2 = Connection_MongoClient.getMongoClient();
		MongoCollection<Document> collection = mongoClient2.getDatabase("my_mongoose").getCollection("emps");
		FindIterable<Document> find = collection.find();
		MongoCursor<Document> iterator = find.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
}

第三种:MongoClients.create();

package com.gaosheng.mongodb.java._day01;

import org.bson.Document;

import com.mongodb.Block;
import com.mongodb.ConnectionString;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;

public class Connection_MongoCleints {
	private static MongoClient mongoClient = null;

	private Connection_MongoCleints() {
	}

	public static MongoClient getMongClients() {
		if (mongoClient == null) {
			synchronized (MongoClient.class) {
				if (mongoClient == null) {
					ConnectionString connectionString = new ConnectionString(
							"mongodb://localhost:27017/my_mongoose.emps?maxIdleTimeMS=2000&maxLifeTimeM=2000S&maxPoolSize=500&"
									+ "waitQueueMultiple=30&waitQueueTimeoutMS=2000");
					mongoClient = MongoClients.create(connectionString);
				}
			}
		}
		return mongoClient;
	}
	public static void closeMongoCollection(MongoClient mongoClient) {
		if (mongoClient != null) {
			mongoClient.close();
		}
	}

	public static void main(String[] args) {
		// 获取连接
		MongoCollection<Document> collection = Connection_MongoCleints.getMongClients().getDatabase("my_mongoose")
				.getCollection("emps");
		// 第一种迭代数据使用iterator进行迭代数据
		/*
		 * // 查找数据 FindIterable<Document> find = collection.find(); // 迭代数据
		 * MongoCursor<Document> iterator = find.iterator(); while
		 * (iterator.hasNext()) { System.out.println(iterator.next()); }
		 */

		// 第二种使用forEach进行迭代数据
		collection.find().forEach(new Block<Document>() {
			@Override
			public void apply(Document doc) {
				System.out.println(doc.toJson());
			}
		});
	}
}

 

前几天写的时候忘记加上关闭连接了..已经添加上了

 

 

以上就是三种简单的配置..注重是参数的配置,并不是进行完善......

 

如果想做的更好,可以传递自己的端口,地址密码,参数配置,数据库,集合等等很多参数,只要自己一个方法,传递值的时候需要获取到值的需要进行值的校验----->可以这样又存在弊端,,,如果我很多参数,,这不是不太好了?------>我们可以写成一个配置文件,将所有的配置信息写入配置文件,,我们只要加载配置文件即可

 

可是配置文件该如何加载进里面:

建议定义个static{}静态代码块..将所有的配置都放在静态代码块中一次性加载完毕,,到下面获取连接(eg:getconnection)

这个时候将配置信息传递个连接就行

聊聊MongoDB连接池、索引、事务 索引可以显著缩短查询时间,但是,使用索引也是有代价的,索引字段的增删改操作会花费更长时间,因为在更改数据时,除了更新文档数据,MongoDB还必须更新索引。这个和关系型数据库是一样的。索引可以显著缩短查询时间,但是,使用索引也是有代价的,索引字段的增删改操作会花费更长时间,因为在更改数据时,除了更新文档数据,MongoDB还必须更新索引。事务是数据库中处理的逻辑单元,包括一个或多个数据库操作,既可以是读操作,也可以是写操作,MongoDB支持跨个多操作、集合、数据库、文档和分片的ACID事务。 阅读详情

相关推荐

MongoDB连接池、索引、事务

本文主要介绍了MongoDB连接池、索引、事务的相关资料,需要的朋友可以参考下在最开始接触MongoDB的时候,是通过的方式连接MongoDB。它会为每个请求创建一个新的连接,然后销毁,一般数据库的连接都是TCP连接,TCP是长连接,如果不断开,就会一直连着。众所周知,新建一个数据库连接的代价是很大的,复用现有连接才是首选,连接池就是干这个的。

hdxx2022的博客 322

2021-10-28 java Mongo

参考链接:MongoDB Java API操作很全的整理 - 21cm - 博客园 MongoDB的操作分为同步操作和异步操作一、同步操作API 使用API时,先引入maven依赖 <!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mo

do what you like && brave 1163

信道估计准则演进:从LS、MMSE到LMMSE的工程权衡

本文深入探讨了信道估计准则的演进历程,从LS、MMSE到LMMSE的工程权衡。通过对比分析三大经典算法的数学本质、工程实现及适用场景,揭示了在计算复杂度、实时性和性能之间的关键取舍。文章结合4G/5G基站项目实战经验,提供了算法选型的三维决策模型和前沿发展建议,为无线通信系统设计提供实用指导。

weixin_29327525的博客 249

mongodb安装与基本使用

文章目录1. 下载安装2. 配置3. 服务4. 连接MongoDB服务器5. 常用命令6. 通过Java驱动连接7. 用户与密码8. 内建角色9. MongoDB优缺点10. 文档资料 1. 下载安装 MongoDB一个明显的优点就是安装使用比较方便,基本不用做过多的配置。 MongoDB下载 在Windows下安装完成,只需要简单的配置一下就可以使用。 安装的时候,建议只安装MongoDB服务器就可以了,图形界面安装比较慢,个人感觉现阶段也不是特别好用。 使用mongodb shell也是一个不错的选择

trayvontang的博客 1474

Java连接Mongodb,并进行增删改查操作(eclipse)

目录 Java操作MongoDB 导入驱动 连接数据库 创建集合 获取集合 插入文档 查看文档 更新文档 删除文档 Java操作MongoDB 导入驱动 准备好适合版本的MongoDBJDBC驱动 MongoDB JDBC 驱动下载链接:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/ 将驱动...

咕噜君的博客 7359

MongoDb 安装

添加mongodb环境变量# 重新加载配置文件# 检查环境变量echo $PATH#指定数据库路径#指定MongoDB日志文件# 使用追加的方式写日志#端口号port=27017#方便外网访问,外网所有ip都可以访问,不要写成固定的linux的ipfork=true # 以守护进程的方式运行MongoDB,创建服务器进程#auth=true #启用用户验证。

记录下日常遇到的问题或者一些思考,不喜勿喷 894

IDEA操作MongoDB快速上手开发(maven项目)

最近在公司实习,需要完成一个实习任务。这个任务用的是SSH框架,数据库需要使用mongoDB完成。由于刚接触MongoDB,所以不是很熟练,在网上查找了大量的资料,许多都是抄来抄去的,运行一堆错误。如今,我的工作任务已经完成,现在写下此篇,希望后来的打工人少一点痛苦!首先,我有一定的数据库基础,但对于mongo还是一无所知的小白。所以有以下疑问:1. 数据库怎么连接?(工具类封装)2. 数据库连接后怎么进行CRUD?(API调用肯定和命令行有区别)3. java实体类怎么才能入mongo的库?

習習君的博客 6717

mongodb 连接池配置

mongodb 连接池配置 spring.data.mongodb.address=127.0.0.1:27017 # 为集群设置所需的副本集名称 # spring.data.mongodb.replica-set=rs0 spring.data.mongodb.database=test spring.data.mongodb.username spring.data.mongodb.passw...

Men-DD 7889

MongoDB 连接池

转自https://www.cnblogs.com/huangfox/archive/2012/04/01/2428947.html 一.mongoDB中的连接池 刚上手MongoDB,在做应用时,受以前使用关系型数据库的影响,会考虑数据库连接池的问题! 关系型数据库中,我们做连接池无非就是事先建立好N个连接(connection),并构建成一个连接池(connection pool),提供去连接和归还连接等操作。 而在MongoDB中,我们先来看看怎么进行操作,以insert为例: Mongo m = n

czj2019的博客 1197

python mongodb连接池_mongoDB中的连接池(转载)

.mongoDB中的连接池刚上手MongoDB,在做应用时,受以前使用关系型数据库的影响,会考虑数据库连接池的问题!关系型数据库中,我们做连接池无非就是事先建立好N个连接(connection),并构建成一个连接池(connection pool),提供去连接和归还连接等操作。而在MongoDB中,我们先来看看怎么进行操作,以insert为例:Mongo m =newMongo("localh...

weixin_39989949的博客 2143

python mongodb连接池_[ mongoDB ] - MongoDB 连接池

.mongoDB中的连接池刚上手MongoDB,在做应用时,受以前使用关系型数据库的影响,会考虑数据库连接池的问题!关系型数据库中,我们做连接池无非就是事先建立好N个连接(connection),并构建成一个连接池(connection pool),提供去连接和归还连接等操作。而在MongoDB中,我们先来看看怎么进行操作,以insert为例:Mongo m = new Mongo( "loca...

weixin_39719727的博客 2061

MongoDB连接池的实现

几乎每一种数据库都会有连接池, 来减少频繁的创建删除连接的开销, 在MongoDB里面是通过信号量线程同步方式来对创建、销毁进行管理。 信号量基础 int sem_init(sem_t *sem, int pshared, unsigned int value) sem是要初始化的信号量,pshared表示此信号量是在进程间共享(=1)还是线程间共享(=0),value是信号量的初始值。 int...

baijiwei的博客 1万+

java实现mongodb连接池

mongodb java驱动包下载(百度云盘:http://pan.baidu.com/s/1i4aRfzZ  分享密码:wc61) 引入jar包 1.mongodb连接配置参数 2.mongodb连接池管理管理类 package com.znie.mypro.mongodb; import java.util.ArrayList; import java.util.Li

闲暇定终生 1万+

mongodb连接池 php,mongodb连接池

mongo实例其实已经是一个现成的连接池了,而且线程安全。这个内置的连接池默认初始了10个连接,每一个操作(增删改查等)都会获取一个连接,执行操作后释放连接。连接池的重要参数内置连接池有多个重要参数,分别是:connectionsPerHost:每个主机的连接数,默认是10threadsAllowedToBlockForConnectionMultiplier:线程队列数,它以上面connecti...

weixin_39918043的博客 615

mongoDB连接池问题

mongoDB连接池问题 1.引言 2.问题分析 3.佐证 4.分析目标mongoDB 5.实际测试 6.得出结论 1.引言 最近在优化后端接口的时候,因为不同接口都需要去操作数据库,这就产生了一个疑惑,我是应该一直连着还是连接并操作完数据库之后断开连接呢,然后每次需要操作数据库连接,然后关闭,这样有点尴尬,一个接口对应一次连接和断开,是不是有点憨憨的,但是如果我不断开,会不会导致连接池达到上限呢? 结论:应该操作数据库之后断开连接 2.问题分析 一般数据库操作都是追求安全的,也就意味

m0_67393593的博客 2257

MongoDB连接池耗尽

异常日志: Out of semaphores to get db connection 查看源代码发现是连接池资源用尽:    查代码看原因: DBPortPool 写道 if ( ! _waitingSem.tryAcquire() ) throw new SemaphoresOut();   _waitingSem初始化代码   DBPortPool 写道 _wa...

专注! 1239

基于java实现mongodb的数据库连接池

转载请注明出处: MongoDB是介于关系数据库和非关系数据库之间的一种产品,文件的存储格式为BSON(一种JSON的扩展),关于MongoDB的其他介绍请参考百度百科  http://baike.baidu.com/subview/3385614/9338179.htm          关于mongodb的下载安装以及一些基本的命令操作可以参照  http://user.qzone.qq.

小鸡慢慢的专栏 8787
上一篇: 安装Gitlab(适用于Centos6和7)
下一篇: Centos6.8环境下安装MongoDB
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值