MyCat與TinyDBRouter性能PK

如今常常說來水平擴展,這個時候通常都會說到數據庫的水平擴展,這個時候通常就會用到數據庫的分庫分表方案。關於這一塊,可能你們也都一些開源或商業的方案進行過一些研究。 數據庫

今天我就簡單的拿一些性能測試數據進行簡單的展現,看看TinyDbRouter和Mycat與純純的JDBC之間的性能差別狀況。 windows

環境說明

爲了進行這項測試,我就得準備一下測試環境,由於作的是對比測試,所以用多少NB的服務器不是重點。另外,因爲虛擬機之間會有CPU、磁盤IO的資源競爭,所以我選擇了用獨立的計算機進行這項測試,這樣才能夠真正的模擬水平擴展時的硬件拓展方式。 服務器

爲此我找了4檯筆記本電腦,配置以下: 網絡

客戶端和服務器 硬件配置:
  硬件平臺:windows7旗艦版 32位)物理機
  CPU 4CPUs
  處理器:Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
  內存:4GB
  硬盤:500G
嗯嗯,配置通常,不過作這項測試應該是OK的。

測試方案

此次主要測試多種方式下數據庫的插入和查詢方面方面的性能差別。 性能

  1. 使用一個數據庫,中間加一道分庫分表中件間,而後測試直接使用JDBC和加一層中間件之間的性能對比,看看加了一層對性能的影響
  2. 使用兩個物理數據庫,對數據進行水平分片,而後測試直接使用JDBC操做一個庫和用了中間件分紅兩個庫之間的性能作對比

環境說明:爲了更好的進行觀察和分析,採用MyCat方式式,MyCat採用了獨立部署爲一臺服務器的方式 學習

測試數據

單個數據庫增長TinyDBRouter訪問時的插入性能影響

從上面的數據能夠看到:在沒有壓力的狀況下,在插入時增長了TinyDbRouter與不增長TinyDbRouter層時的性能對比爲降低了6.6%,而在有壓力的狀況下性能降低大體爲15%左右。 測試

而在查詢的時候,因爲查詢的時間較插入時間長許多,所以能夠看到TinyDbRouter對於查詢的影響能夠忽略不計。 優化

相同數據量採用TinyDbRouter分庫的查詢性能對比


從上面的數據能夠看到,在沒有壓力的狀況下,插入的速度較單庫相比有些許降低,可是隨着壓力的增長,分片了的性能逐步上升,雖然壓力沒有加大到最大,可是處理性能已是未分片的1.5倍左右,說明經過分片確實能夠有效提高插入的TPS數量。 spa


咱們再來看看查詢方面的性能差別,因爲一樣的記錄數,分片方案中把數據均衡的分配到了兩個不一樣的庫中,所以不帶分庫鍵查詢時,查詢性能大體是未分庫方式的2倍左右浮動(這裏的查詢條件是動態生成,所以刨除了緩衝方面的因素);帶有分庫鍵進行查詢時,查詢性能大體是未分庫方式的4倍左右浮動。 中間件

總結,經過分片的方式進行水平擴展,確實能夠有效的提高插入和查詢的效率。提高效率的多少與水平擴展的數量大體成正比。(實際上,隨着分片個數的增長,每臺機器的能力擴展係數是在慢慢減少的)。

相同數據量採用MyCat分庫的插入性能對比

經過上面的測試,能夠看到,使用 MyCat把數據分到兩個物理數據庫,也有效的提高了插入效率,這方面和TinyDbRouter的基本相同。

相同數據量採用MyCat分庫的查詢性能對比


接下來就是對MyCat的查詢方面的性能進行對比測試,性能數據較不分庫有必定提高,可是相對於TinyDbRouter就有必定的差距。

總結

不管是哪一種分庫分表方案,均可以有效提高插入和查詢的TPS。

有分庫鍵查詢和沒有分庫鍵查詢,性能相差明顯。

TinyDbRouter和MyCat的數據庫水平擴展中間件在插入方面的性能損耗相差不大,在查詢方面TinyDbRouter的性能較MyCat有必定的優點,隨着集羣大小的變化,會致使性能的差距進一步擴大

緣由分析以下:

代表緣由分析:MyCat服務器自已的CPU佔有率比較高,說明其計算量也很是大,致使在MyCat服務器中產生了必定性能損耗。因爲MyCat在這種測試方式下是單點,所以隨着水平擴展的數據庫數量的增長,其單點壓力也會愈來愈大。

深層次緣由分析:MyCat是由獨立的服務器來進行查詢及結果的合併及相關處理,所以必須把數據從數據庫服務器取到MyCat服務器上進行必定的運算後再向客戶端進行返回數據;而TinyDBRouter因爲部署到數據庫客戶端,所以這部分計算由數據庫客戶端進行計算,充分的利用了數據庫客戶端的計算能力,所以不存在單點問題。

一樣的一個處理,MyCat的方式是:客戶端->MyCat->Mycat計算後->水平擴展的數據服務器(這裏是2)->MyCat合併結果後->客戶端

而TinyDBRouter的方式是:客戶端->(DBRouter計算後)->水平擴展的數據服務器(這裏是2)->(DBRouter計算後)->客戶端,網絡傳輸次數較MyCat少了一半。另外因爲TinyDBRouter的合併計算在客戶端進行,所以能夠進行更深刻的優化以提高數據獲取速度。

聲明

咱們一開始把MyCat服務器和其中一臺數據庫服務器部署在一臺物理機,結果數據很是不合常理,所以才把它獨立部署爲一臺服務器。

咱們一開始是用Delete語句清空數據的,後來發現這種方式對測試數據有比較大的影響,一樣的數據量與測試方法,數據相去甚遠。採用了DROP表現重建的方式後保證了數據的可驗證性,一樣的數據量與測試方式,數據很是接近。

咱們在測試過程當中,秉持了客觀公正的心態來進行這項測試,也是爲了找準本身的位置,和同類產品學習的態度進行的。

咱們保證沒有對測試數據進行任何的人爲調整,而徹底忠實於實驗中採集的數據。

即便一樣時刻的測試數據,也會有輕微的不一樣,可是差距很是小。

相關文章
相關標籤/搜索