redis、ignite、mysql memory 內存數據庫性能測試對比

通過測試對比,感覺在併發訪問時,ignite的性能是最優的,但是redis不是號稱大併發量最好的嗎?我這裏沒有測試出他的優勢,可能是我使用的不切當導致也是可能的,希望有懂得大神看到此文件,有不同意見時,給與指導,謝謝。

1. 簡介

1.1 什麼是redis?

redis是一個開源的、使用C語言編寫的、支持網絡交互的、可基於內存也可持久化的Key-Value數據庫。

1.2 什麼是ignite?

Ignite是一個大容器(相當於mysql的一個連接服務,cache就是一個數據庫),裏面可以創建cache,數據放在cache裏面。Ignite支持完整的SQL、DDL和DML,鍵-值形式存儲數據,其中值得類型可以基本數據類型,也可以是對象Object映射成table-column。

Ignite可以通過key鍵來取數據,也支持sql語句取數據:

1、創建一個容器cache<String,Object>

2、通過key查詢:調用cache.get()/cache.getAll()方法

3、通過sql查詢:調用cache.query()

Ignite本身有原生的持久化機制,可以選擇是否開啓,也可以集成到第三方數據庫進行持久化。

1.3 什麼是mysql memory?

在MySQL中的存儲引擎有很多種,可以通過“SHOW ENGINES”語句來查看。下面重點關注InnoDB、MyISAM、MEMORY這三種。

  • nnoDB給MySQL的表提供了事務處理、回滾、崩潰修復能力和多版本併發控制的事務安全。在MySQL從3.23.34a開始包含InnnoDB。它是MySQL上第一個提供外鍵約束的表引擎。而且InnoDB對事務處理的能力,也是其他存儲引擎不能比擬的。靠後版本的MySQL的默認存儲引擎就是InnoDB。
  • MyISAM是MySQL中常見的存儲引擎,曾經是MySQL的默認存儲引擎。MyISAM是基於ISAM引擎發展起來的,增加了許多有用的擴展。
  • MEMORY是MySQL中一類特殊的存儲引擎。它使用存儲在內存中的內容來創建表,而且數據全部放在內存中。這些特性與前面的兩個很不同。

應用場景及區別:

  • InnoDB:支持事務處理,支持外鍵,支持崩潰修復能力和併發控制。如果需要對事務的完整性要求比較高(比如銀行),要求實現併發控制(比如售票),那選擇InnoDB有很大的優勢。如果需要頻繁的更新、刪除操作的數據庫,也可以選擇InnoDB,因爲支持事務的提交(commit)和回滾(rollback)。

  • MyISAM:插入數據快,空間和內存使用比較低。如果表主要是用於插入新記錄和讀出記錄,那麼選擇MyISAM能實現處理高效率。如果應用的完整性、併發性要求比 較低,也可以使用。

  • MEMORY:所有的數據都在內存中,數據的處理速度快,但是安全性不高。如果需要很快的讀寫速度,對數據的安全性要求較低,可以選擇MEMOEY。它對錶的大小有要求,不能建立太大的表。所以,這類數據庫只使用在相對較小的數據庫表。

2. 測試

2.1.0 測試環境準備

jemeter 測試500用戶,表:person,字段:id,name,phone

在這裏插入圖片描述

ignite數據庫數據:10000條
在這裏插入圖片描述
mysql數據庫數據:10000條
在這裏插入圖片描述
reids數據:10000條,key: rtb:*:1 value:是個對象,三個字段值都是:1

2.1.1 測試ignite

http://localhost:8080/findPersonById?id=100
在這裏插入圖片描述
結果: 值在60-----4422ms左右。

2.1.2 測試mysql

http://localhost:8080/findMysql?count=1
在這裏插入圖片描述
結果: 值在694-----14551ms左右。

2.1.3 測試redis

http://localhost:8090/getDataByPipelinedAndJedisKey?key=rtd%3A*%3A1
在這裏插入圖片描述

結果: 最大值在1873------7266ms左右。

3. 測試總結

保持一致條件(每秒併發用戶同時訪問,訪問一次),依次測試200、300、400用戶的耗時,統計結果如下:

用戶數(單位:個) ignite(單位:ms) mysql memory mysql InnoDB(單位:ms) redis(單位:ms)
500 4422 14551 15113 7266
400 2707 11194 12004 6976
300 2503 7500 8501 3583
200 1094 4514 5977 2318

通過測試對比,感覺在併發訪問時,ignite的性能是最優的,但是redis不是號稱大併發量最好的嗎?我這裏沒有測試出他的優勢,可能是我使用的不切當導致也是可能的,希望有懂得大神看到此文件,有不同意見時,給與指導,謝謝。

mysql memory和mysql InnoDB的性能在查詢不是很明顯,寫入時內存優勢明顯,也有可能是我們使用的方法不對,這個需要再驗證。

另外mysql memory 和mysql InnoDB對比
寫入10000條數耗時(ms):

mysql memory mysql InnoDB
3205 131003
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章