数据库设计 - 读性能提升

一、What:

读性能指服务层读取数据库数据的性能,通常读取性能指标有sql查询QPS、sql查询响应时间。

二、Why:

为什么要提升读性能呢?因为大部分的互联网产品都是读多写少,所以最容易碰到的场景就是数据库读遇到瓶颈,所以解决数据库的读性能是首当其冲的。

三、How:

  1. 方法论:
    a. 优秀的表设计:根据“业务模式”,设计表结构;根据“访问模式”,设计索引结构
    b. 冗余多台来负载均衡:数据库读写分离分组架构,多台Slave负载均衡读请求
    c. 缓存:redis前置分担读请求

  2. 具体方案一:不同Slave不同索引
    设计一个读写分离分组架构,主库没有索引,从库slave01只包含field01的索引提供给服务A读,从库slave02只包括field01和field02的索引提供给服务B读。这样的好处有:
    a. 主库没有索引,所以写表的时候,不用维护B+树(每个索引都会对应一个B+树)
    b. 不同的从库使用不同的索引,可以解决内存空间给到数据页的缓存,增加命中率,从而提高读性能。

  3. 具体方案二:添加从库
    a. 添加从库的方式来扩展读性能,多个从实现了读的高可用,但是写并没有高可用。
    b. 带来的新问题:主从一致性问题

  4. 具体方案三:添加缓存
    a. 带缓存的读流程:

    1. 上游先访问缓存,如果缓存里有数据,则取数据后直接返回
    2. 如果缓存里没有数据,则访问数据库
    3. 再把取到的数据放入缓存

    b. 带来的新问题:缓存和数据库的不一致

猜你喜欢

转载自blog.csdn.net/hudmhacker/article/details/108242286