java handlersocket_HandlerSocket java客户端
MySQL中有個handlersocket,直接跳過數(shù)據(jù)庫處理中的sql分析過程,直接調(diào)用存儲引擎的接口,可以大幅度提升數(shù)據(jù)庫的性能。我的測試中,使用handlersocket與sql,可以提升約3-5倍,在我的環(huán)境中單條“增刪改查”可以達(dá)到2.5TPS左右,沒有作者說得可以達(dá)到10萬TPS。
有一個hs4j的java客戶端,但是有些功能沒有完善,還有一個不太正常的現(xiàn)象,就是連接時間長了,就會斷開,沒有定位具體的原因。所以自己寫了客戶端,基于netty 4,算是對netty 4的一次嘗試,netty 4與netty 3區(qū)別很大。
代碼已在github開源:
https://github.com/flyinmind/HandlerSocket4Java
代碼結(jié)構(gòu)比較清晰,HSBenchMark.java是性能測試程序,也是調(diào)用樣例,com.huodian.hs4j.command中是處理協(xié)議命令的類,com.huodian.hs4j.netty中處理netty相關(guān)的內(nèi)容。
可以支持批量處理,在我的環(huán)境中,批量處理并沒有大幅度提升性能,我分析,瓶頸應(yīng)該在數(shù)據(jù)庫,所以批量沒有提升性能,但是在批量時,客戶端CPU占用會下降。使用InnoDB于MyISAM存儲引擎都試過,雖然官網(wǎng)說支持InnoDB,但是MyISAM引擎也是可以的,比InnoDB更快。
數(shù)據(jù)庫服務(wù)器中innodb_buffer_pool_size設(shè)置為8G,數(shù)據(jù)量最大3200萬行,每行7列。32萬->320萬->3200萬的數(shù)據(jù)量都嘗試過,數(shù)據(jù)量上升時,性能沒有明顯下降,可能是內(nèi)存沒有利用起來。隨著數(shù)據(jù)量上升,內(nèi)存消耗逐步上升,3200萬行時只占用了2G內(nèi)存,內(nèi)存沒有用起來,不知道有什么設(shè)置可以將內(nèi)存充分用起來。
handlersocket優(yōu)點,相當(dāng)于sql性能更高,相對于memcached,可以持久化,支持多列等,因為基于存儲引擎,所以數(shù)據(jù)庫的集群也是可以支持的(我沒測試),使用handlersocket時,服務(wù)端CPU消耗更少。
但是,有個比較大的缺點,有handlersocket客戶端連接時,我測試的是,這時不能調(diào)整表結(jié)構(gòu)。同時查詢只能基于索引,不能關(guān)聯(lián)多個表等(這些都是可以接受的)。
原文:http://blog.csdn.net/flyinmind/article/details/20864535
總結(jié)
以上是生活随笔為你收集整理的java handlersocket_HandlerSocket java客户端的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 姓胡属虎起什么网名好听
- 下一篇: 一米七五等于多少厘米?