2011-07-28 32 views
6

我想將MongoDB集成到我的應用程序中。我已經使用Apache Banchmarking工具進行了測試,併產生了具有1000個併發級別的100,000個傳入請求。經過在mongodb中插入記錄的一些測試後,我可以發現它正在插入大約1000 rec /秒。但這對我的應用程序來說是不夠的。任何人都可以提出什麼是提高性能的最佳方法,以便實現2000 rec/sec的目標。使用java驅動程序提高Mongodb性能

我的代碼是:

private static MongoOptions mo = new MongoOptions(); 
mo.connectionsPerHost = 20; 
mo.threadsAllowedToBlockForConnectionMultiplier = 100; 
private static Mongo m = new Mongo("127.0.0.1",mo);  
private static DB db = m.getDB("mydb"); 
private static DBCollection coll = db.getCollection("mycoll"); 
DBObject dbObj = (DBObject) JSON.parse(msg); 
db.requestStart();  
coll.insert(dbObj);  
dbObj.removeField("_id");  
dbObj.put("val", "-10"); 
coll.insert(dbObj); 
db.requestDone(); 
+1

看看是否有幫助:http://stackoverflow.com/questions/6783212/how-to-load-100-million-records-into-mongodb-with-scala-for-performance-testing/6786925#6786925 – DhruvPathak

+0

你確定你遇到了孟戈強加的瓶頸嗎?每秒插入1000次非常緩慢。我可以輕鬆地在我的本地開發機器上每秒鐘創造超過20,000個插入。確保你的基準測試是正確的。在健康的生產服務器上,插入吞吐量應該更好,更好。 –

+0

我正在使用tomcate服務器。有沒有MongoOption的配置? 你能告訴我每臺主機有多少連接? –

回答

2

擁有1000個客戶端(這是我假設你通過併發級別1000的意思)擊中DB一次的聲音高了我。如果它在1-2核心系統上運行,那麼您的盒子可能會花費大量的時間在不同的過程之間切換。數據庫和基準測試工具是否在同一個盒子上運行?這也會增加其進程切換花費的時間。

您可以嘗試將客戶端放在一個多核盒子上,將數據庫放在另一個多核盒子上。

或嘗試運行更少的模擬客戶端,也許10-20。