最近一個項目需要數據庫有較大的吞吐量,因為項目要求的訪問量和數據量較大,決定采用一個數據庫中間件來對數據庫進行管理。經過一番查詢,決定使用阿里的一個開源項目-mycat。因為mycat基於mysql,是針對磁盤的讀與寫,故在讀寫速度上理論上會小於等於mysql。為求嚴謹,在這之前我用java編寫程序進行了測試,采用了基本的優化,如連接池測試結果如下:
engines:innodb,mysql:20線程,單條插入,速度:300-400/s
engines:innodb,mycat控制3個數據源,100個數據庫,向一張表插入數據,20線程,單條插入,速度:300-400/s
(數據不穩定的原因是因為都是靠我自己掐時間用計算器算的-。-)
這個速度是不滿足需求的,后來一個同事想起了曾經接觸過的一個基於mysql的數據引擎-----TokuDB。網上關於TokuDB的一條說明讓我怦然心動:“插入性能提升9倍”。=。=誠然我是不信的,我要自己試一下。於是我裝上了tokudb引擎進行了測試(安裝方法在我另一篇文章中)。如下:
engines:tokudb,mysql:20線程,單條插入,速度:600-900/s
engines:tokudb,mycat控制1個數據源,50個數據庫,向一張表插入數據,20線程,單條插入,速度:600-900條/s
從我粗略的測試數據可以看到,tokudb的插入性能提升實際是沒有9倍的,這個9倍我估計是峰值。但是2倍的性能提升還是很不錯的。要達到客戶所說的1200+,至少是看到了希望。
當然,我這個粗略的數據我是不太滿意的,於是我決定用專業的壓力測試軟件----jmeter進行測試。然而,測試的結果讓我大是汗顏。
jmeter可以到https://archive.apache.org/dist/jmeter/binaries/ 進行下載,zip版本直接解壓即可(如果不行可能需要配置環境變量),點擊bin目錄下的jmeter.bat運行。
如何進行jdbc的測試呢?步驟如下:
1.在測試計划頁面點擊瀏覽,加載進入數據庫的驅動包,我使用的mysql,驅動包即mysql-connector-java-5.1.26-bin.jar。
2.在測試計划處右鍵,新建一個線程組。線程組頁面可以配置線程數,我設置成了20,ramp-up period參數的意思是所有的線程將在多少秒內啟動,設置為1秒,循環次數即線程會循環執行多少次。
3.在線程組上點擊右鍵,添加-配置原件,選擇JDBC Connection Configuration.配置如下:
4.在線程組上點擊右鍵-添加-sampler-JDBC Request.配置如下:
5.點擊線程組,添加兩個監聽器。“圖形結果” 和 “查看結果樹”。用於監控執行情況。
6.點擊菜單欄 運行-啟動即可。
下面公布讓我汗顏的測試結果:
mycat:
mysql:
吞吐量每秒才200條!!!什么鬼!!不過也確實證明了mycat速度上確實是小於等於mysql這一觀點...
我只能把速度的降低歸結於jmeter這個軟件上....希望有知道原理的大神可以告知一下原因=.=