Skip to main content Link Menu Expand (external link) Document Search Copy Copied

架构师-第五阶段:数据库架构

1、读性能,究竟如何提升?

  • 库表结构,索引结构,设计依据
    • 依据“业务模式”,设计库表结构
    • 依据“访问模式”,设计索引结构
      • 谁在 where 后面,就在谁上面加索引
      • 索引的建立要避免性能降低,主从同步的,在主库不建立索引,在从库建立索引,如下图:
  • 增加从库(主从同步)

      主从分组架构,提高的是读性能,没有解决数据水平扩容和写性能
    
  • 增加缓存,增加了服务层如下图:

     缓存是万金油,不管是否有微服务分层,都可以使用缓存
    
     读的时候,先取出数据,更新缓存;写的时候,先淘汰缓存,后写入
    

2、垂直拆分,到底怎么实施?

  • 垂直拆分
    • user(单库)-> user_base user_ext1 user_ext2 … user_extn
    • 常用的,长度短属性的放在主表里
    • 不常用的,字段较长的属性放在扩展表里
    • 如果熟悉很多,可以有多个扩展表
    • 缓冲池有具体的大小,所以会影响索引查询的性能,如下图:
  • 水平切分

    一个表按照 hash 规则分成多个表,例如取用户 id 的模(uid%2)

    user(单库) -> user0 user1 … usern

  • 高可用
    • 冗余+故障自动转移来实现
    • 数据库冗余,会引发一致性问题

3、主从一致性,究竟如何解决?

  • 业务能够接受,就可以忽略不计
  • 强制读主,
  • 主从同步分组架构,选择性读主

      用一个 key放在缓存里来做标识 在一秒内有主库操作,当读的时候,先去找这个 key,如果 key 存在,那就读主库,如果不存在,就读从库
    

  • 主主同步结构
    • 两个数据库,不同初始值,相同递增步长
    • 在数据库上层应用程序控制自增 id 的生成,例如:分布式 id 生成算法、雪花算法

4、水平拆分,怎么做到无限容量?

5、扩展性,如何平滑迁移与扩容?

  • 扩展方案四
    • 双写方案

6、数据库如何秒级扩容?


萌ICP备20240168号