2012-03-08 29 views
-1

從我的測試中,我得到了每秒500次插入,200次查詢,400次更新。我想知道我可以調整以增加這些數字。如何加快我的mongodb測試?

我讀過其他人可以在他們的測試中實現數千乃至數萬個插入,這比我的測試要好得多。我不知道我是否缺少一些基本的東西?

所以,這裏的事實:

  • 我使用默認配置的贏得32位的MongoDB V2.0.3
  • Java驅動程序(2.7.3)帶彈簧蒙戈,(我不力fsync)
  • 做插入和原子更新的組合,如推,拉, inc,dec,設置,
  • 並重復所有這些爲500k次。
  • 其目的是模擬用戶操作,如插入和更新
  • 沒有定義特定的索引,但我認爲默認情況下總是會有唯一的索引ID?
  • 它運行在Eclipse IDE中的Java應用程序是在同一機器上運行作爲mongod的服務器
  • H/W規格:核i5,MEM 4GB,ThinkPad的邊緣
  • 我注意到的java程序需要大約280MB和是在循環的過程中,這個數字穩定

的開始時間是:2012-03-08 21:50:16

而且我監視使用mongostat,並達到22:05:10的時間後,我結束我的未完成的應用程序..這是最後一個輸出o F中的mongostat

insert query update delete getmore command flushes mapped vsize res faults locked % idx miss %  qr|qw ar|aw netIn netOut conn  time 
    499 200 400  0  0  100  0 1023m 1.06g 581m 145  8.5   0  0|0  0|0 645k 97k  3 22:05:01 
    503 201 403  0  0  102  0 1023m 1.06g 582m 154  10.7   0  0|0  0|1 651k 98k  3 22:05:02 
    520 208 415  0  0  105  0 1023m 1.06g 582m 176  11.1   0  0|0  0|0 671k 101k  3 22:05:03 
    504 202 403  0  0  102  0 1023m 1.06g 582m 167  7.2   0  0|0  0|0 651k 98k  3 22:05:04 
    524 209 419  0  0  106  0 1023m 1.06g 582m 147  8.3   0  0|0  0|0 675k 102k  3 22:05:05 
    534 213 428  0  0  107  0 1023m 1.06g 583m 176  7.4   0  0|0  0|0 690k 103k  3 22:05:06 
    531 213 424  0  0  108  0 1023m 1.06g 584m 160  4.9   0  0|0  0|0 685k 104k  3 22:05:07 
    533 213 427  0  0  107  0 1023m 1.06g 584m 164  6.9   0  0|0  0|0 689k 103k  3 22:05:08 
    518 208 414  0  0  105  0 1023m 1.06g 585m 158  7.3   0  0|0  0|0 669k 101k  3 22:05:09 
    521 208 417  0  0  105  0 1023m 1.06g 585m 154  4.7   0  0|0  0|0 673k 101k  3 22:05:10 

然後我檢查我的插入數:

> db.myCollection.find().size(); 
90575 

這是插入我的文檔的一個例子,它也被更新等的過程中

> db.myCollection.findOne().pretty(); 
{ 
     "_id" : "b146189a-56a4-4035-8245-c4bd6dc2bd22", 
     "something1" : "my class is cool !", 
     "something2" : { 
       "value" : "this is a statement blah blah", 
       "name" : "myStatement" 
     }, 
     "something3" : { 
       "size" : { 
         "value" : 0, 
         "name" : "size" 
       }, 
       "value" : [ 
         "6810cb0c-fa3e-4ca9-8a27-8432f2d1e828", 
         "a8276d05-a796-4c43-bc74-edc06d074099" 
       ], 
       "name" : "myids" 
     }, 
     "something4" : { 
       "myattr" : { 
         "value" : "something", 
         "name" : "name" 
       }, 
       "attr" : { 
         "content" : { 
           "value" : "another another body body content content", 
           "name" : "content" 
         }, 
         "contentId" : "b146189a-56a4-4035-8245-c4bd6dc2bd22", 
         "name" : "something" 
       }, 
       "subsubchildchild" : { 
         "size" : { 
           "value" : 0, 
           "name" : "size" 
         }, 
         "value" : [ ], 
         "name" : "subBodies" 
       }, 
       "myId" : "b146189a-56a4-4035-8245-c4bd6dc2bd22", 
       "name" : "hiccups" 
     }, 
     "something5" : { 
       "value" : false, 
       "name" : "hahaha" 
     }, 
     "something6" : { 
       "name" : "okay this is just a test" 
     }, 
     "something7" : { 
       "value" : false, 
       "name" : "remove me !" 
     }, 
     "something8" : { 
       "size" : { 
         "value" : 0, 
         "name" : "size" 
       }, 
       "value" : [ ], 
       "name" : "guess what" 
     }, 
     "something9" : { 
       "size" : { 
         "value" : 0, 
         "name" : "anotherSize" 
       }, 
       "value" : [ ], 
       "name" : "tarantula" 
     }, 
     "something10" : { 
       "value" : 8, 
       "name" : "my exam score" 
     }, 
     "something11" : { 
       "size" : { 
         "value" : 0, 
         "name" : "justAnotherSize" 
       }, 
       "value" : [ ], 
       "name" : "myReference" 
     }, 
     "something12" : { 
       "size" : { 
         "value" : 0, 
         "name" : "size" 
       }, 
       "value" : [ ], 
       "name" : "myOtherReference" 
     }, 
     "something13" : { 
       "value" : "8b78fff0-50f5-4992-9972-89f9d944fee7", 
       "name" : "user" 
     }, 
     "something14" : { 
       "dateTime" : "2012-03-08 21:50:17.480000000" 
     }, 
     "something15" : { 
       "value" : false, 
       "name" : "lovely" 
     } 
} 

這裏是我的db stat:

> db.stats(); 
{ 
     "db" : "qa", 
     "collections" : 7, 
     "objects" : 815197, 
     "avgObjSize" : 622.2093211824872, 
     "dataSize" : 507223172, 
     "storageSize" : 610770944, 
     "numExtents" : 57, 
     "indexes" : 5, 
     "indexSize" : 64197952, 
     "fileSize" : 1056702464, 
     "nsSizeMB" : 16, 
     "ok" : 1 
} 

另一個來自好奇心的問題。從我的主集合大小(大約有90k條記錄)和其他非實質集合(它們的大小應該很大)來看,在這種情況下,有大約1TB的fileSize是合理的嗎?有什麼我可以做的,以幫助減少我的文件大小?

請分享您的想法。

+0

我投票結束,因爲這似乎並不是一個具體問題。文件大小的問題確實有一些優點,我建議分解成一個單獨的問題。 – 2012-03-08 15:57:06

+0

@Sean Reilly:對不起,我的壞習慣提供了太多的信息,而且我的問題缺乏清晰度,但是您會介意檢查一下我的更改嗎?與其他許多類似的問題相比,現在問題更加明確了。 – bertie 2012-03-08 16:06:45

+0

我認爲它實際上是一個相對明確的問題,如果有點詳細的話;) – 2012-03-08 16:27:03

回答

2

您似乎在mongostat上遇到了很多故障。任何想法爲什麼?

做插入和原子更新的組合像推,拉,INC,DEC,集

你是如何發佈這些更新?通過_id

我已經讀過其他人可以在他們的測試中實現數千乃至數萬個插入,這比我的測試要好得多。我不知道我是否缺少一些基本的東西?

根據mongostat,您只有3個連接處於活動狀態,鎖定百分比只有大約10%。

  • 你是多線程的輸入?
  • 你是否毀了這一切在同一臺計算機上?
  • 系統IO如何?
  • 你在做WriteConcern.Safe

這些都是可能影響您的吞吐量的考慮因素。

在這種情況下有1TB左右的fileSize是否合理?

根據您的db.stats(),您只有大約600 MB的磁盤在使用。

"storageSize" : 610770944 // = 610,770,944 

您的平均對象大小爲622字節,但您有815197個對象,而不是您聲稱擁有的90k文檔。

有什麼我可以做的,以幫助減少我的文件大小?

是的,減少JSON文檔中的鍵的大小。例如:

"something1" : "my class is cool !" => ~28 bytes 
"s1": "my class is cool !"   => ~20 bytes 

確保您正確地存儲縮短的名字,讓你的數據訪問框架做這些映射到一個更合理的名稱解除。

+0

我不確定錯誤,但文檔說它只適用於linux,而且我在這裏使用win7。是的,我在單線程中這樣做,因爲我需要按順序執行此操作來模擬順序用戶操作。自從我閱讀你的文章以來,我已經嘗試了幾個東西,並且我注意到我有很多不好的東西在繼續,比如使用long uuid作爲id,這比我使用int計數器時慢,也有一些查詢字段沒有編入索引,安全(雖然我似乎無法避免這一點),以及臭名昭着的分頁使用跳過(排序許多類型的領域)。感謝您的洞察力。 – bertie 2012-03-09 05:17:53