首先,童家旺介绍了他认为的什么是优化:第一、做任何事情最快的方法就是什么也不做。
第二、不访问不必要的数据:使用B*Tree/hash等方法定位必要的数据。使用column Store或分表的方式将数据分开存储。使用Bloom filter算法排除空值查询。
第三、合理的利用硬件来提升访问效率:使用缓存消除对数据的重复访问。使用批量处理来减少磁盘的Seek操作。使用批量处理来减少网络的Round Trip。使用SSD来提升磁盘访问效率。
响应时间和吞吐量之间的关系
1、性能。衡量完成特定任务的速度或效率。
2、响应时间。衡量系统与用户交互式多久能够发出响应。
3、吞吐量。衡量系统在单位时间里可以完成的任务量。
▲反应时间
▲传统磁盘的访问特性
B*Tree优化数据访问介绍
▲B*Tree优化数据访问
B*Tree优化数据访问模拟场景
▲B*Tree优化数据访问模拟场景
童家旺通过阿里巴巴的真实应用场景介绍了如何用分表存储来提高性能。
一、场景介绍:
1、表VeryBigTable含有30个列
2、表的记录数为50,000,000条
3、平均每个用户为300条左右
4、其中有2个列属于详细描述字段,平均长度为2k
5、其它的列的总长度平均为250个字节
6、此表上的查询有两种模式
7、列出表中的主要信息(每次20条,不包含详细信息,90%的查询)
8、查看记录的详细信息(10%的查询)
9、保存与Oracle数据库,默认block_size(8k)
二、要求:
1、对此业务进行优化
2、分析数据,说服开发部门实施此优化
三、性能分析
1、每块记录数
8192 * 0.80(1) / 250 = 25.5 (主表)
8192 * 0.80 / 2000 = 3.27(详情表)
8192 * 0.80 / ( 2000 + 250 ) = 2.91
2、访问的逻辑IO(内存块访问)
List的查询代价
改进后=( 300/25.5 ) * y + 4 + x = 4 + x + 11.8y = 4(2) + 7(3) + 11.8 * 1.5(4) = 28.7
改进前=( 300/2.91 ) * y + 4 + x = 4 + x + 103.y = 4 + 7 + 103 * 1.5 = 165.5
3、访问涉及到的物理读(磁盘块访问)
List的查询代价(逻辑IO * ( 1 – 命中率 ))
改进后=28.7 * ( 1 – 0.85(5)) = 4.305
改进前=165.5 * ( 1 – 0.85 ) = 24.825
4、访问时间(ms)
改进前=逻辑IO时间+物理IO时间= 28.7 * 0.01(6) + 4.305 * 7(7) = 30.422ms
改进后=逻辑IO时间+物理IO时间= 165.5 * 0.01 + 24.825 * 7 = 175.43ms
分表存储,性能
更新日志
- 罗斯特洛波维奇、布里顿《舒伯特-阿佩乔尼奏鸣曲》1995[WAV+CUE]
- 群星《超高品质流行女声大碟 静听女人心 2CD》[WAV+CUE][1.3GB]
- BEYOND《无悔这一生 2023》 [WAV+CUE][690MB]
- 群星《30首最发烧经典老歌 情牵男人心 2CD》[WAV+CUE][1.4GB]
- 群星《不老的情歌-至尊版2CD》WAV分轨
- 岁月留声机群星《七十年代人金曲回顾》(黑胶)2CD[WAV分轨]
- 群星-世纪难忘金曲(迪安唱片)5CD[WAV]
- HenrietteFaure-DebussyEstampesPrludes,LivreI(MonoVersion)[FLAC]
- 吕方1992-弯弯十八首[香港][WAV+CUE]
- 经典歌曲珍藏专辑《民歌30年·真情依旧》3CD[WAV+CUE]
- 群星《时尚流行发烧极品 非同凡响 第一辑 2CD》[WAV/分轨][1.3GB]
- 陈曦《多年以后》HQⅡ头版限量编号[WAV+CUE][520MB]
- 孙露《用情 HQⅡ 2023》[WAV+CUE][380MB]
- 电影原声《速度与激情9电影原声大碟》2021[WAV+CUE]
- 【瑞鸣音乐】群星《伶歌》[XRCD2][WAV+CUE]