童家旺:如何用分表存储来提高性能
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
來(lái)自支付寶資深數(shù)據(jù)庫(kù)架構(gòu)師童家旺給大家分享的關(guān)于數(shù)據(jù)存儲(chǔ)性能優(yōu)化的一點(diǎn)想法,他從自己的個(gè)人經(jīng)驗(yàn)中總結(jié)了關(guān)于數(shù)據(jù)庫(kù)存儲(chǔ)的性能優(yōu)化。
?
▲支付寶資深數(shù)據(jù)庫(kù)架構(gòu)師童家旺
首先,童家旺介紹了他認(rèn)為的什么是優(yōu)化:
第一、做任何事情最快的方法就是什么也不做。
第二、不訪問(wèn)不必要的數(shù)據(jù):使用B*Tree/hash等方法定位必要的數(shù)據(jù)。使用column Store或分表的方式將數(shù)據(jù)分開存儲(chǔ)。使用Bloom filter算法排除空值查詢。
第三、合理的利用硬件來(lái)提升訪問(wèn)效率:使用緩存消除對(duì)數(shù)據(jù)的重復(fù)訪問(wèn)。使用批量處理來(lái)減少磁盤的Seek操作。使用批量處理來(lái)減少網(wǎng)絡(luò)的Round Trip。使用SSD來(lái)提升磁盤訪問(wèn)效率。
響應(yīng)時(shí)間和吞吐量之間的關(guān)系
1、性能。衡量完成特定任務(wù)的速度或效率。
2、響應(yīng)時(shí)間。衡量系統(tǒng)與用戶交互式多久能夠發(fā)出響應(yīng)。
3、吞吐量。衡量系統(tǒng)在單位時(shí)間里可以完成的任務(wù)量。
?
▲反應(yīng)時(shí)間
?
▲傳統(tǒng)磁盤的訪問(wèn)特性
B*Tree優(yōu)化數(shù)據(jù)訪問(wèn)介紹
?
▲B*Tree優(yōu)化數(shù)據(jù)訪問(wèn)
B*Tree優(yōu)化數(shù)據(jù)訪問(wèn)模擬場(chǎng)景
?
▲B*Tree優(yōu)化數(shù)據(jù)訪問(wèn)模擬場(chǎng)景
?
童家旺通過(guò)阿里巴巴的真實(shí)應(yīng)用場(chǎng)景介紹了如何用分表存儲(chǔ)來(lái)提高性能。
一、場(chǎng)景介紹:
二、要求:
三、性能分析
1、每塊記錄數(shù)
8192 * 0.80(1) / 250 = 25.5 (主表)
8192 * 0.80 / 2000 = 3.27(詳情表)
8192 * 0.80 / ( 2000 + 250 ) = 2.91
2、訪問(wèn)的邏輯IO(內(nèi)存塊訪問(wèn))
List的查詢代價(jià)
改進(jìn)后=( 300/25.5 ) * y + 4 + x = 4 + x + 11.8y = 4(2) + 7(3) + 11.8 * 1.5(4) = 28.7
改進(jìn)前=( 300/2.91 ) * y + 4 + x = 4 + x + 103.y = 4 + 7 + 103 * 1.5 = 165.5
3、訪問(wèn)涉及到的物理讀(磁盤塊訪問(wèn))
List的查詢代價(jià)(邏輯IO * ( 1 – 命中率 ))
改進(jìn)后=28.7 * ( 1 – 0.85(5)) = 4.305
改進(jìn)前=165.5 * ( 1 – 0.85 ) = 24.825
4、訪問(wèn)時(shí)間(ms)
改進(jìn)前=邏輯IO時(shí)間+物理IO時(shí)間= 28.7 * 0.01(6) + 4.305 * 7(7) = 30.422ms
改進(jìn)后=邏輯IO時(shí)間+物理IO時(shí)間= 165.5 * 0.01 + 24.825 * 7 = 175.43ms
場(chǎng)景
要求
方案
注意事項(xiàng)
參考緩存工具
MemCached, Tair, Redis
【編輯推薦】
?
轉(zhuǎn)載于:https://my.oschina.net/zyt1978/blog/670699
總結(jié)
以上是生活随笔為你收集整理的童家旺:如何用分表存储来提高性能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windos dos命令
- 下一篇: 牛人和普通人的区别在于思维方式!