Mongodb CPU使用率分析

Java 中使用 MongoDB 时,创建一个连接,系统会分配一个连接池(可一理解成创建一个连接即创建了一个进程,一个进程里有多个线程而 MongoDB 应用的是里面的某个线程),在代码中,每查询一次数据库都创建了一个连接,导致浪费了许多可用的资源。

解决方法:创建一个工厂类统一创建连接

工厂类代码如下:

package com.cvicse.naba.storage.dao.impl.mongodb;

import com.mongodb.DB;
import com.mongodb.Mongo;
import com.mongodb.MongoOptions;

/**
 * 操作Mongodb的工厂类
 * 
 * @author Wendy
 *
 */
public class MongoDBFactory {
	private static Mongo mongo = null;
	private static boolean isAuth = false;
	
	/**
	 * 构造函数,避免实例化
	 */
	private MongoDBFactory() {
		
	}

	/**
	 * @param dbName
	 * @param userName
	 * @param pwd
	 * @param dbIp
	 * @param dbPort
	 * @return
	 */
	public static DB getDB(String dbName, String userName, String pwd, String dbIp, int dbPort) {
		if(mongo == null) {
			init(dbIp, dbPort);
		}
		//return mongo;
		DB db = mongo.getDB(dbName);
		if(!isAuth) {
			db.authenticate(userName, pwd.toCharArray());
			isAuth = true;
		}
		return db;
	}

	/**
	 * @param dbIp
	 * @param dbPort
	 */
	private static void init(String dbIp, int dbPort) {
		try {
			mongo = new Mongo(dbIp, dbPort);
			MongoOptions opt = mongo.getMongoOptions(); 
			opt.connectionsPerHost = 10;
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

}
 

猜你喜欢

转载自wendy1018.iteye.com/blog/1670573
今日推荐