使用YCSB检测MongoDB
英文原文:
http://blog.mongodirector.com/how-to-benchmark-mongodb-with-ycsb/
?
當談到系統性能特性,大多數DBaaS提供商提供他們預置系統的有限信息。的確,基于在這樣一個系統下給定的大量參數的部署,很難準確的討論云的實際吞吐量和延時。虛擬化環境、不可預測的負載、網絡延時、不同地址位置只是考慮的一部分。
?
然而對于你的MongoDB部署的真實性能有一個公正的理解是個好注意:以至于你可以基于你的應用需求準確預置;以至于你可以真實的比較大量的DBaaS提供商,確保最實惠。
這篇博文是在你的MongoDB集群上運行一些基本的性能檢測的入門。詳細講述如何配置和運行YCSB基準測試并解釋了結果。靈感來自于當前的MongoDB博客關于MongoDB 3.0性能提高。
YCSB是一個流行的Java開源規范和由雅虎開發的程序套件,用于比較大量NoSQL數據庫的相對性能。這些工作負載用于大量NoSQL數據庫的比較研究。
?
部署YCSB
這部分和接下來的部分將會引導你,在你鐘愛的DBaaS提供商系統上,一步步安裝、配置和運行YCSB測試。
為了運行負載測試,你需要一個客戶端機器,與你的MongoDB集群在相同的地理位置最好,可以避免網絡延時。選擇一個合適的配置運行多線程,恰當的加載你的MongoDB集群。該機器需要安裝有當前版本的Java、Maven和git。
步驟:
-
如果Java、Maven或git還沒有在你的系統上安裝,安裝他們。參照你的操作系統對應的可用文檔。確保安裝了與你的Java版本兼容的Maven版本。測試所有的依賴正常工作。例如:
| 1 | $?javac?-version |
| 1 | javac?1.8.0_25 |
| 1 | $?mvn?-version |
| 1 2 3 4 5 6 | Apache?Maven?3.3.1?(cab6659f9874fa96462afef40fcf6bc033d58c1c;?2015-03-14T01:40:27+05:30) Maven?home:?/usr/local/Cellar/maven/3.3.1/libexec Java?version:?1.8.0_25,?vendor:?Oracle?Corporation Java?home:?/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre Default?locale:?en_US,?platform?encoding:?UTF-8 OS?name:?"mac?os?x",?version:?"10.10.2",?arch:?"x86_64",?family:?"mac" |
| 1 | $?git?-version |
| 1 | git?version?1.9.5?(Apple?Git-50.3) |
-
正如Github頁YCSB的建議,你可以wget下YCSB的tar壓縮包。但是我們推薦從源文件構建。步驟已在YCSB的MongoDB README文檔化。這將幫助我們之后對云提供商啟用MongoDB驗證。
| 1 2 3 | git?clone?git://github.com/brianfrankcooper/YCSB.git cd?YCSB mvn?clean?package |
-
注意:如果你的`mvn clean package`或`mvn clean install`命令失敗,根據位于“mapkeeper”包的錯誤,在pom.xml的root層刪除或注釋“mapkeeper”條目的兩個實例。查看這里Github問題獲取更多信息。
-
一旦構建成功,我們現在準備運行YCSB測試!
啟用驗證
大多數MongoDB提供商默認提供MongoDB驗證并無法禁用它。不幸的是,YCSB當前不支持MongoDB驗證??蛻舳藢崿F現在主要使用廢棄的API調用。為了滿足我們的需求,我們添加了一個新的MongoDB專屬YCSB屬性,'mongodb.auth'和幾行代碼支持它。這個修改非常簡單并且在這里可以找到不同。默認MongoDB專屬YCSB屬性在這里列出。
再次使用mvn構建包,修改完成。參考上面部分關于如何使用Maven構建YCSB。
?
運行測試
YCSB wiki這部分詳細列出了接下來的活動。我們將在這里簡要描述下。
-
下一步是選擇你要運行的負載類型。花時間閱讀和理解YCSB wiki的核心負載部分。它們總結在這里:
-
負載A:重更新負載:50/50%混合讀/寫
-
負載B:讀為主負載:95/5%混合讀/寫
-
負載C:只讀:100%讀
-
負載D:最新讀負載:更多流量在當前插入
-
負載E:短距離:短程查詢
-
負載F:讀-修改-寫:讀、修改和更新存在的記錄
-
-
顯然個體工作負載可以使用核心屬性調整。你可能想選擇一個負載,調整屬性匹配你應用程序的特性。例如,對比研究選擇了大批有趣的“調整過的”負載。也參考了在第一部分提到的MongoDB博客。例如,對于我們的測試我們將采用負載A帶有默認讀/寫比率。
-
選擇操作的數量(屬性“operationcount”)以致測試運行適當的時間。30分鐘內完成測試不是系統一般性能的好的指示。
-
選擇適當數量的YCSB運行的線程。這真的依賴于你的客戶端機器有多好,你的MongoDB集群可以承受多少負載和你的實際應用多么有代表性。我們將對大量的線程運行基準測試。
-
運行負載階段。選擇一個接近你想運行的操作數量的記錄數量(屬性“recordcount”)來插入數據庫。選擇適當數量的線程以便插入不會花費很長時間。例如:
| 1 2 3 | ./bin/ycsb?load?mongodb?-s?-P?workloads/workloada?-p?recordcount=10000000?-threads?16?-p mongodb.url="mongodb://user:pwd@server1.example.com:9999,server2.example.com:9999/dbname"?-p mongodb.auth="true" |
-
-
‘load‘標記表名它是一個導入操作。
-
‘s‘標記以10秒的間隔打印狀態。
-
‘recordcount‘被設置為1千萬。
-
‘threads‘設置客戶端線程數量為16
-
‘mongodb.auth‘是啟用MongoDB驗證的屬性。
-
-
記得
-
重定向標準輸出到一個文件
-
使用‘screen‘或一個等價的方法,以便當運行這些操作的時候你的會話不會丟失。
-
-
一旦數據導入階段完成,你準備運行你的負載。例如:
| 1 2 3 | ./bin/ycsb?run?mongodb?-s?-P?workloads/workloada?-p mongodb.url="mongodb://user:pwd@server1.example.com:9999,server2.example.com:9999/dbname"?–p mongodb.auth="true"?-p?operationcount=10000000?-threads?2 |
-
使用大量的線程重復運行。記住重定向結果以便你之后可以比較它們。例如,我們用2、4、8、16和32個線程重復測試。
?
分析結果
這篇YCSB?wiki頁面的最后部分談到了分析結果。最有趣的一些信息是整體吞吐量(Overall Throughput)和95/99%百分比延時(Percentile Latencies)。直到當收益變平和延時不可接受時,通常增加線程數量增加了吞吐量。例如,這張圖描述了對一個我們要檢測的測試系統,吞吐量和延時和線程數的對比。選擇的負載是負載A和大約3百萬操作。
Throughput/Latency vs #Threads
對于MongoDB服務器從負載的角度,從圖中可以推斷出16個線程也能是熱點區域:超過了它,對于線程數呈指數增長,吞吐量的線是平的,而延時變得無法接受的大。
?
一些觀點:
-
為了云上系統性能的更好的圖片,自動化并重復這些測試應該在一天的不同點。我們注意到性能的特性會在這一天顯著變化。
-
當比較兩個潛在的DBaaS提供商,確保在相同的地理位置選擇你的客戶端機器和DBaaS集群。集群應該有類似的配置。也要記住在一天的不同時間運行測試。
?
接下來
這是一些我們需要研究的事情,因為我們在這個方面做了更多工作:
-
從多臺機器并行運行負載:當嘗試加載一個高容量的MongoDB集群,單一一臺客戶端機器無法滿足。YCSB當前沒有提供容易的方法并行從多臺機器運行負載。然而可以手動完成。當嘗試加載數據到一個大型集群時也是有用的。
-
數據集大小:數據庫的大小相對MongoDB系統的內存將完全改變吞吐量/延時特性,對于大型數據集MongoDB只得命中磁盤。
-
個體記錄的大小:當記錄尺寸很大,尤其當它接近最大支持的尺寸時,對于性能特性是有趣的。這可能對主要做讀-修改-回寫操作(像負載F)的應用程序是關鍵性的。
-
不同的MongoDB驅動:因為我們當前正對比較兩個不同的DBaaS提供商感興趣,我們沒有嘗試使用更多有效的數據庫驅動。顯然使用最新和更有效的驅動可以獲得更好的絕對數。對應用程序嘗試抽取系統的最后價值是有趣的。這篇博文談到了使用一個異步的MongoDB驅動通過YCSB的性能提升度量。
-
不同的檢測工具:Sysbench對于MongoDB我們發現是有趣的。我們正在看其他的。
本文轉自UltraSQL51CTO博客,原文鏈接:http://blog.51cto.com/ultrasql/1740989 ,如需轉載請自行聯系原作者
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的使用YCSB检测MongoDB的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Silverlight4Beta之Com
- 下一篇: 政府工作报告透露哪些信号?投资主线是什么