MongoDB连接池

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

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。它会为每个请求创建一个新的连接,然后销毁,一般数据库的连接都是TCP连接,TCP是长连接,如果不断开,就会一直连着。众所周知,新建一个数据库连接的代价是很大的,复用现有连接才是首选,连接池就是干这个的。 阅读详情

相关推荐

Benchmark系列——UnixBench测试项深度解析与性能优化指南

本文深度解析UnixBench基准测试套件的各项测试原理,包括Dhrystone、Whetstone、系统调用、进程管理、IPC及文件I/O等核心测试项。通过详细的测试项分析,指导用户解读测试报告,并提供针对性的内核参数调整、编译优化及系统配置实战指南,帮助用户精准定位并优化系统性能瓶颈。

weixin_29230901的博客 275

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 1165

C#图表开发避坑指南:Chart控件的Series和Points属性详解

本文深入解析C#图表开发中Chart控件的Series和Points核心属性,提供避坑指南。详细阐述了Series的数据序列管理、Points的高效操作与空值处理,以及多Series与ChartArea的协同配置,帮助开发者避免常见错误,实现稳定、高性能的数据可视化应用。

weixin_29313239的博客 363

mongodb安装与基本使用

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

trayvontang的博客 1475

告别代码丢失!用Git+Gitee管理你的Keil5单片机项目(保姆级图文教程)

本文详细介绍了如何利用Git和Gitee高效管理Keil5单片机项目,解决嵌入式开发中的代码丢失问题。通过精准配置.gitignore文件、设计适合团队的协作流程以及搭建安全备份体系,开发者可以轻松实现版本控制,提升工作效率。特别针对Keil工程的特殊文件类型,提供了实用的过滤规则和操作技巧。

weixin_33686714的博客 470

2.实体机安装TrueNAS 方法

访问不了可以使用以下连接:提取码:0927。

Unofficial_user的博客 7431

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

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

咕噜君的博客 7361

从命名玄学看单片机江湖:STC、STM32与ESP32的型号密码与设计哲学

本文解析了STC、STM32和ESP32三大主流单片机系列的型号命名规则,揭示了其背后的设计哲学与市场策略。通过详细解读STC89C52、STM32F103C8T6等具体型号,帮助开发者理解芯片核心特性、性能等级及适用场景,为嵌入式系统选型提供实用指南。

g5h6i的博客 761

MongoDb 安装

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

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

【大数据Java基础-Java基础01】环境搭建(一)Sublime Text3搭建Java编译环境(Windows系统)

1. 首先配置好Java环境变量 我的jdk版本是1.8.0_191,存放目录是C:\Program Files\Java,因此添加以下环境变量 (1)系统变量→新建 JAVA_HOME 变量,变量值为: C:\Program Files\Java\jdk1.8.0_191 (2)系统变量→找到 Path 变量→编辑,末尾加入: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 如果Path变量末尾本身有“;”,则上述路径前面则不需要加“;” (3)系统变量→新建 CL

微信搜:import_bigdata,大数据领域硬核原创作者 552

【Claude】Not logged in 错误:未登录状态的判断与 /login 认证路径 bug报错已解决

login 是首选修复:大多数 "Not logged in" 只需重新执行 /login检查系统时间:时间偏差是 Token 验证失败的常见原因避免密钥库被清理:将 Claude Code 添加到系统清理工具的白名单企业环境用 API Key:如果组织禁用 OAuth,使用 API Key 认证区分凭证类型:理解 Not logged in(无凭证)vs Invalid key(有但无效)

博客 7307

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

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

習習君的博客 6727

YOLOv8改进,YOLOv8添加DCNv3可变性卷积,无需编译

DCNv3在DCNv2版本上进行了改进,上一期我们在YOLOv8中添加了DCNv2,这一期我们将添加DCNv3,DCNv3代码详解可以参考链接:代码详解——可变形卷积(DCNv3)

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 5020

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 7905

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MongoDB 连接池

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

czj2019的博客 1198

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

weixin_39989949的博客 2143

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

weixin_39719727的博客 2064

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的博客 617

mongoDB的连接池问题

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

m0_67393593的博客 2263

MongoDb连接池源码追踪

1. 先来看构建MongoClient使用的参数 MongoClientOptions.Builder optionsBuilder = builder() .applicationName(applicationName) .maxConnectionIdleTime(config.getMaxConnectionIdleTime() == 0 ? MAX_CONNECTION_IDLE_T

八荒六合唯我独尊 7133

【MongoDB】连接池设计 NodeJS版

const MongoClient = require('mongodb').MongoClient; function MongoConnectionPool(url){ if(!url){ throw new ReferenceError('url is required!'); return; } let dbs = []; ...

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值