mongod.exe --bind_ip 192.168.1.202 --port 50001 --logpath E:\MongoDB\logs\log.txt --logappend --dbpath E:\MongoDB\data\db --replSet zhangwei
mongod.exe --bind_ip 192.168.1.202 --port 50002 --logpath E:\MongoDB\logs\log1.txt --logappend --dbpath E:\MongoDB\data\db1 --replSet zhangwei
mongod.exe --bind_ip 192.168.1.202 --port 50003 --logpath E:\MongoDB\logs\log2.txt --logappend --dbpath E:\MongoDB\data\db2 --replSet zhangwei
#连接主服务器,此处设置192.168.1.202:50001为主服务器
mongo --host 192.168.1.202 --port 50001
#初始化,哪个服务器先初始化就是主服务器
rs.initiate()
#查看当前状态
rs.status()
#添加副本集
rs.add('192.168.1.202:50002')
rs.add('192.168.1.202:50003')
#连接从服务器
mongo --host 192.168.1.202 --port 50002
mongo --host 192.168.1.202 --port 50003
#设置可读
rs.slaveOk()
接下来就是java客户端的配置
package com.system;
import java.util.ArrayList;
import java.util.List;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.ReadPreference;
import com.mongodb.ServerAddress;
/*
* mongodb数据库链接池
*/
public class MongoDBDaoImpl
{
private MongoClient mongoClient = null;
private static final MongoDBDaoImpl mongoDBDaoImpl = new MongoDBDaoImpl();// 饿汉式单例模式
private MongoDBDaoImpl()
{
if (mongoClient == null)
{
ReadPreference preference = ReadPreference.secondary();
MongoClientOptions.Builder buide = new MongoClientOptions.Builder();
buide.connectionsPerHost(100);// 与目标数据库可以建立的最大链接数
buide.connectTimeout(1000 * 60 * 20);// 与数据库建立链接的超时时间
buide.maxWaitTime(100 * 60 * 5);// 一个线程成功获取到一个可用数据库之前的最大等待时间
buide.threadsAllowedToBlockForConnectionMultiplier(100);
buide.maxConnectionIdleTime(0);
buide.maxConnectionLifeTime(0);
buide.socketTimeout(0);
buide.socketKeepAlive(true);
MongoClientOptions myOptions = buide.readPreference(preference).build();
try
{
List addresses = new ArrayList();
ServerAddress address1 = new ServerAddress("192.168.1.202" , 50001);
ServerAddress address2 = new ServerAddress("192.168.1.202" , 50002);
ServerAddress address2 = new ServerAddress("192.168.1.202" , 50003);
addresses.add(address1);
addresses.add(address2);
mongoClient = new MongoClient(addresses,myOptions);
} catch (Exception e)
{
e.printStackTrace();
}
}
}
public static MongoDBDaoImpl getMongoDBDaoImpl()
{
return mongoDBDaoImpl;
}
public DBCollection getCollection(String dbName, String collectionName)
{
DB db = mongoClient.getDB(dbName);
return db.getCollection(collectionName);
}
}
需要实现为mongodb分压,我们的读都放到secondary节点,写都放到primary节点
ReadPreference preference = ReadPreference.secondary();
MongoClientOptions myOptions = buide.readPreference(preference).build();
这两句最重要。这两句实现了读数据只到secondary节点。
接下来是java api对数据的操作
package com.system;
import java.util.List;
import org.json.JSONObject;
import util.CommEnum;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.ReadPreference;
public class MongoDB {
// private static final String HOST = PublicParameter.mongo_ip;
// private static final int PORT = PublicParameter.mongo_port;
// private static final String HOST = "218.5.26.21";
// private static final int PORT = 27017;
// private static Mongo mongo;
// private static DB db;
//
// static {
// // 连接到MongoDB
// mongo = new Mongo(HOST, PORT);
// // 打开数据库 testDB
//
// }
//
// ====================================查询开始==============================================
/**
* @Title: queryOne
* @Description: TODO 查询 name为 张三的 一条记录 21212214321432432324
* @param dbCollection
* @return: void
*/
public static DBObject queryOne(String dbName, String collName, DBObject documents){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
// DBObject documents = new BasicDBObject();
// documents.put("name","张三");
DBObject result = dbCollection.findOne(documents);
return result;
}
/**
* @Title: queryOne
* @Description: TODO 查询 name为 张三的 一条记录 21212214321432432324
* @param dbCollection
* @return: void
*/
public static DBCursor queryIn(String dbName, String collName, DBObject queryCondition){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
DBObject index = new BasicDBObject();
index.put("c_phone", 1);
index.put("c_account_id", 1);
dbCollection.createIndex(index);
DBCursor limit = dbCollection.find(queryCondition).skip(0).limit(1);
return limit;
}
public static long queryCount(String dbName, String collName, DBObject queryCondition){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
DBObject index = new BasicDBObject();
index.put("c_phone", 1);
index.put("black_state", 1);
dbCollection.createIndex(index);
long count = dbCollection.count(queryCondition);
return count;
}
/**
* @Title: queryPage
* @Description: TODO 分页查询
* @param dbCollection
* @return: void
*/
public static DBCursor queryPage(String dbName, String collName,int skip,int limit){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
DBCursor cursor = dbCollection.find().skip(skip).limit(limit);
// while (cursor.hasNext()) {
// System.out.println(cursor.next());
// }
return cursor;
}
/**
*
* @Title: queryPage
* @Description: TODO 分页查询
* @param dbCollection
* @return: void
*/
public static DBCursor queryPage(String dbName, String collName,int skip,int limit,DBObject where){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
DBCursor cursor = dbCollection.find(where).skip(skip).limit(limit);
// while (cursor.hasNext()) {
// System.out.println(cursor.next());
// }
return cursor;
}
/**
* @Title: queryRange
* @Description: TODO 范围查询,查询 第3条 到 第5条 之间的记录
* @param dbCollection
* @return: void
*/
public static DBCursor queryRange(String dbName, String collName,DBObject range,String column_name) {
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
// DBObject range = new BasicDBObject();
// range.put("$gte", 50);
// range.put("$lte", 52);
DBObject dbObject = new BasicDBObject();
dbObject.put(column_name, range);
DBCursor cursor = dbCollection.find(dbObject);
// while (cursor.hasNext()) {
// System.out.println(cursor.next());
// }
return cursor;
}
/**'
* @Title: queryList
* @Description: TODO 查询出全部的 记录
* @param dbCollection
* @return: void
*/
public static DBCursor queryList(String dbName, String collName) {
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
DBCursor cursor = dbCollection.find();
// DBObject dbObject = null;
// while(cursor.hasNext()){
// dbObject = cursor.next();
// System.out.println(dbObject);
// }
return cursor;
}
// ====================================增加开始==============================================
/**
* @Title: addOne
* @Description: TODO 新增 一条记录
* @param dbCollection
* @return: void
*/
public static void addOne(String dbName, String collName,DBObject documents){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
// DBObject documents = new BasicDBObject();
// documents.put("xxx", 1);
dbCollection.insert(documents);
}
/**
* @Title: addList
* @Description: TODO 批量新增 记录 , 增加的记录 中 可以使用各种数据类型
* @param dbCollection
* @return: void
*/
public static void addList(String dbName, String collName, List listdbo){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
// DBObject dbObject = new BasicDBObject();
// dbObject.put("name", "老张");
// dbObject.put("age", 52);
// dbObject.put("job", "看守老王");
// dbObject.put("remark", new BasicDBObject("address", "广东省深圳市").append("street", "深南大道888号"));
// listdbo.add(dbObject);
dbCollection.insert(listdbo);
}
// /**
// * @Title: addByJson
// * @Description: TODO json转对象后 ,执行新增
// * @param dbCollection
// * @return: void
// */
// public static void addByJson(DBCollection dbCollection){
// String json = "{ \"name\" : \"王五\" , \"age\" : 66 , \"job\" : \"看守老王\" , \"remark\" : { \"address\" : \"广东省深圳市\" , \"street\" : \"深南大道888号\"}}";
// DBObject dbObject = (DBObject) JSON.parse(json);
// dbCollection.insert(dbObject);
// }
// ====================================修改开始==============================================
/**
* @Title: updateMulti
* @Description: TODO 修改 记录
* @param dbCollection
* @return: void
*/
public static void updateMulti(String dbName, String collName,DBObject newdbObject, DBObject olddbObject,boolean is_insert) {
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
// DBObject newdbObject = new BasicDBObject();
// newdbObject.put("name", "张三");
//
// DBObject olddbObject = new BasicDBObject();
// olddbObject.put("name", "yisheng");
// 需要加上这个
DBObject upsertValue = new BasicDBObject("$set", newdbObject);
// 后面的两个参数(is_insert,):1.若所更新的数据没有,则插入 ; 2、同时更新多个符合条件的文档(collection)
dbCollection.update(olddbObject, upsertValue, is_insert, false);
}
// ====================================删除开始==============================================
/**
* @Title: deleteFirst
* @Description: TODO 删除第一个
* @param
* @return: void
*/
public static void deleteFirst(String dbName, String collName){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
DBObject dbObject = dbCollection.findOne();
dbCollection.remove(dbObject);
}
/**
* @Title: deleteOne
* @Description: TODO 删除指定的一条记录
* @param dbCollection
* @return: void
*/
public static void deleteOne(String dbName, String collName,String key,String value){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
DBObject dbObject = new BasicDBObject();
dbObject.put(key, value);
dbCollection.remove(dbObject);
}
/**
* @Title: deleteByIn
* @Description: TODO 删除多条记录 例如:select * from tb where name in('12','34')
* @param dbCollection
* @return: void
*/
public static void deleteByIn(String dbName, String collName,List list,String column_name) {
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
// List list = new ArrayList();
// list.add("老张");
// list.add("老王");
// list.add("张三");
DBObject dbObject = new BasicDBObject();
dbObject.put("$in", list);
DBObject delObject = new BasicDBObject();
delObject.put(column_name, dbObject);
dbCollection.remove(delObject);
}
/**
* @Title: deleteByIn
* @Description: TODO 删除表
* @param dbCollection
* @return: void
*/
public static void deleteByTable(String dbName, String collName) {
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
dbCollection.drop();
}
/**
* @Title: deleteAll
* @Description: TODO 删除全部的记录
* @param dbCollection
* @return: void
*/
public static void deleteAll(String dbName, String collName){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
DBCursor cursor = dbCollection.find();
while(cursor.hasNext()){
dbCollection.remove(cursor.next());
}
}
/**
* @Title: deleteAll
* @Description: TODO 删除某些记录
* @param dbCollection
* @return: void
*/
public static void deleteAll(String dbName, String collName,DBObject filter){
DBCollection dbCollection = MongoDBDaoImpl.getMongoDBDaoImpl().getCollection(dbName, collName);
DBCursor cursor = dbCollection.find(filter).skip(1).limit(10);
while(cursor.hasNext()){
dbCollection.remove(cursor.next());
}
}
}