MongoDB的簡單QPS測試(單機)

mongoDB官方網站下載:

1、mongodb-linux-i686-2.2.1.tgz

2、java驅動 mongo-2.2.jar

 

 測試服務器爲Dell  E5410 的Debian linux 2.6,配置爲:

1、4核,2.33GHz

2、內存3G

3、SATA硬盤2T

 

 web服務器:tomcat5.5

打壓工具:Apache Bench

監控工具:mongostat

 

測試思路:

1、因爲MongoDB內置了連接池,所以客戶端程序相對簡單,只需從一個Mongo的單例獲取連接即可;

2、每個請求做1000次插入;

 

測試代碼MongoDBManager:

public class MongoDBManager {
	static private MongoDBManager instance; // 唯一實例
	//	public static final String DB_NAME = "lab";
	//  public static final String MESSAGE_COLLECTION = "email";   

	static synchronized public  MongoDBManager getInstance(final String ip, int port, int poolSize) throws UnknownHostException {
		if (instance == null) {
			instance = new MongoDBManager(ip,port,poolSize);
		}		
		return instance;
	}

	private MongoDBManager() {
	}
	
	private MongoDBManager(final String ip, int port, int poolSize) throws UnknownHostException {
		init(ip,port,poolSize);
	}

	public DB getDB(String dbname) {
		return mongo.getDB(dbname);
	}

	private Mongo mongo;

	public void init(final String ip, int port, int poolSize)
			throws java.net.UnknownHostException {
		System.setProperty("MONGO.POOLSIZE", String.valueOf(poolSize));
		if (mongo == null) {
			MongoOptions options = new MongoOptions();
			options.autoConnectRetry = true;
			options.connectionsPerHost = poolSize;

			ServerAddress serverAddress = new ServerAddress(ip, port);
			mongo = new Mongo(serverAddress, options);
		}
	}
}

 

 測試代碼InsertMongodbServlet:

public class InsertMongodbServlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		Integer insertNum = Integer.valueOf(req.getParameter("insertNum")
				.toString());
		resp.setContentType("text/html;charset=UTF-8");
		resp.setHeader("Cache-Control", "no-cache");

		DB db = MongoDBManager.getInstance("127.0.0.1", 27017, 500)
				.getDB("lab");

		DBCollection tests = db.getCollection("tests");
		for (int i = 0; i < insertNum; i++) {
			DBObject test = new BasicDBObject();
			test.put("id", 10000);
			test.put("name", "This is for mongodb insert.");			
			tests.insert(test);
		}

		resp.getWriter().write(" Insert mongodb successed!");
	}

	public void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
	}
}

 

開始壓力測試,開1000個線程,共插入100萬條記錄: 

/usr/sbin/ab -n 1000 -c 400  http://192.168.175.130:8080/labWeb/insertMongodb.do?insertNum=1000

 監控:bin/mongostat

 可以看到在400個併發情況下,插入100萬記錄,QPS在28000左右。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章