package com.cwa.log.mongo;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoOptions;
import com.mongodb.util.JSON;
/**
* @author Pai
* @descirption MongoDB存储类 12.12.24
*/
public class Storage {
private final static Logger logger = LoggerFactory.getLogger(Storage.class);
private Mongo mongo;
private DB db;
private Map<String, DBCollection> collections;
private static Storage _instance;
private Storage(String host, int port, String dbName, int poolSize) {
try {
this.mongo = new Mongo(host, port);
this.db = mongo.getDB(dbName);
this.collections = new HashMap<String, DBCollection>();
MongoOptions opt = mongo.getMongoOptions();
opt.autoConnectRetry = true;
opt.connectionsPerHost = poolSize;
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public static Storage getInstance(String host, int port, String dbName,
int poolSize) {
if (_instance == null) {
_instance = new Storage(host, port, dbName, poolSize);
}
return _instance;
}
/**
* 获取collection,若没有,新建一个
*
* @param colName
* @return
*/
private DBCollection getCol(String colName) {
DBCollection col = collections.get(colName);
if (null == col) {
col = db.getCollection(colName);
collections.put(colName, col);
// logger.info("gamelog try create collection");
}
// logger.error("gamelog collection" + colName);
return col;
}
public void save(String colName, String json) {
DBCollection col = getCol(colName);
// 只有插入操作,没有更新操作
DBObject dbObject = (DBObject) JSON.parse(json);
col.insert(dbObject);
// logger.error("gamelog write in mongodb");
}
}