童家旺:如何用分表存储来提高性能

来自支付宝资深数据库架构师童家旺给大家分享的关于数据存储性能优化的一点想法,他从自己的个人经验中总结了关于数据库存储的性能优化。

 

▲支付宝资深数据库架构师童家旺

首先,童家旺介绍了他认为的什么是优化:

第一、做任何事情最快的方法就是什么也不做。

第二、不访问不必要的数据:使用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

场景

  1. Read Intensive (R/W 20倍以上)
  2. 业务可接受部分延迟(Delay)
  3. 每天访问量上亿次
  4. 系统IO压力巨大(本地内存无法容纳活跃数据)

要求

  1. 优化业务

方案

  1. 使用缓存来减少应用对后端的访问

注意事项

  1. 考虑缓存的刷新策略
  2. 考虑缓存的数据延迟对业务的影响
  3. 考虑缓存失效时,系统的支撑能力

参考缓存工具

MemCached, Tair, Redis

【编辑推荐】

  1. 主数据管理(MDM)的七个最佳实践
  2. SQL server的高可用性 SQL Mirror HA
  3. 浅谈一次恼火的死锁追踪经历
  4. DataReader链接关闭解惑篇

 

转载于:https://my.oschina.net/zyt1978/blog/670699

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值