您的位置:首页 > 数据库 > Mongodb

JAVA连接MongoDB实践(1)

2013-11-08 18:07 1246 查看
由于业务需要,最近公司将一部分的数据转移的MongoDB数据库中。  

        在配合公司DBA 将 Mongodb数据库部署完毕以后,开始了我们的JAVA连接MongoDB的实践

        

开始前,推荐两个连接数据库的IDE工具

1.rockmongo-on-windows-v0.0.2  (只在火狐浏览器中运行成功)

2. Robomongo (在32机 XP 系统会启动不了)

    

 MongoManager 函数  (实现Mongo 的单例模式)

public class MongoManager {
private static final Logger LOGGER = Logger.getLogger(MongoManager.class);
private static Mongo mongo = null;
private MongoManager() {
}
public static DB getDB(String dbName) {
try {
if (mongo == null) {
init();
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
return mongo.getDB(dbName);
}

private static  void init() {
try {
MongoClient client = new MongoClient();
mongo = MongoClient.connect(127.0.0.1, 27017)).getMongo();
MongoOptions options = mongo.getMongoOptions();
options.socketTimeout = 20000;
options.maxWaitTime = 20000;
options.connectTimeout = 20000;
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}


  在使用的过程中 如果大量的数据插入;每次万条数据, 千万级的数据量  经常会报连接异常(连接超时,找不到对应的db )

检查发现 是由于连接不释放引起的  (

 db.serverStatus().connections; 


   解决的方式:

废弃使用 Mongo 函数   使用MongoClient  问题就解决了

   附上 连接时候的 参数介绍:

如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误。

maxWaitTime:最大等待连接的线程阻塞时间

connectTimeout:连接超时的毫秒。0是默认和无限

socketTimeout:socket超时。0是默认和无限

autoConnectRetry:这个控制是否在一个连接时,系统会自动重试

 

   

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: