如何用分表存儲(chǔ)來(lái)提高性能 推薦
首先,童家旺介紹了他認(rèn)為的什么是優(yōu)化:第一、做任何事情最快的方法就是什么也不做。
▲支付寶資深數(shù)據(jù)庫(kù)架構(gò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、表VeryBigTable含有30個(gè)列
2、表的記錄數(shù)為50,000,000條
3、平均每個(gè)用戶為300條左右
4、其中有2個(gè)列屬于詳細(xì)描述字段,平均長(zhǎng)度為2k
5、其它的列的總長(zhǎng)度平均為250個(gè)字節(jié)
6、此表上的查詢有兩種模式
7、列出表中的主要信息(每次20條,不包含詳細(xì)信息,90%的查詢)
8、查看記錄的詳細(xì)信息(10%的查詢)
9、保存與Oracle數(shù)據(jù)庫(kù),默認(rèn)block_size(8k)
二、要求:
1、對(duì)此業(yè)務(wù)進(jìn)行優(yōu)化
2、分析數(shù)據(jù),說(shuō)服開發(fā)部門實(shí)施此優(yōu)化
三、性能分析
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
相關(guān)文章
如何在一個(gè)千萬(wàn)級(jí)的數(shù)據(jù)庫(kù)查詢中提高查詢的效率?
今天小編就為大家分享一篇關(guān)于如何在一個(gè)千萬(wàn)級(jí)的數(shù)據(jù)庫(kù)查詢中提高查詢的效率?,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03利用reverse索引優(yōu)化like語(yǔ)句的方法詳解
這篇文章主要介紹了關(guān)于利用reverse索引優(yōu)化like語(yǔ)句的方法,文中通過(guò)圖文介紹的很詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-03SQL之left join、right join、inner join的區(qū)別淺析
這篇文章主要介紹了SQL之left join、right join、inner join的區(qū)別淺析,本文講解了它們的區(qū)別并給出了實(shí)例,需要的朋友可以參考下2015-02-02干掉Navicat,這個(gè)數(shù)據(jù)庫(kù)管理工具真香
這篇文章主要介紹了干掉Navicat,這個(gè)數(shù)據(jù)庫(kù)管理工具真香,本文詳細(xì)的介紹DataGrip的具體使用方法和實(shí)現(xiàn),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10gaussDB數(shù)據(jù)庫(kù)常用操作命令詳解
這篇文章主要介紹了gaussDB數(shù)據(jù)庫(kù)常用操作命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08遠(yuǎn)程數(shù)據(jù)庫(kù)的表超過(guò)20個(gè)索引的影響詳細(xì)解析
這篇文章主要介紹了遠(yuǎn)程數(shù)據(jù)庫(kù)的表超過(guò)20個(gè)索引的影響詳細(xì)解析,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10關(guān)于若干數(shù)據(jù)庫(kù)數(shù)據(jù)插入性能的對(duì)比分析
前幾天,苦惱于到底使用哪一種本地?cái)?shù)據(jù)庫(kù)來(lái)存儲(chǔ)部分?jǐn)?shù)據(jù),于是決定做一個(gè)數(shù)據(jù)插入測(cè)試進(jìn)行求證2011-10-10關(guān)于數(shù)據(jù)庫(kù)系統(tǒng)的概述
大家好,本篇文章主要講的是關(guān)于數(shù)據(jù)庫(kù)系統(tǒng)的概述,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12什么是數(shù)據(jù)庫(kù)索引 有哪些類型和特點(diǎn)
這篇文章主要介紹了網(wǎng)站數(shù)據(jù)庫(kù)的優(yōu)化最為基礎(chǔ)的優(yōu)化措施就是建立數(shù)據(jù)庫(kù)索引了,這里就介紹一下,什么是數(shù)據(jù)庫(kù)索引?有哪些類型和特點(diǎn)2015-10-10