美文网首页
一天一道面试题——数据库篇8(分表分库)

一天一道面试题——数据库篇8(分表分库)

作者: 猿哥媛姐 | 来源:发表于2022-02-22 12:08 被阅读0次

    为什么要分表分库

    数据量大了,使用多个读写分离,多个从库也无法解决查询性能问题时,需要对数据进行切分。

    垂直切分

    垂直分表

    也就是“大表拆小表”,基于列字段进行的。一般是表中的字段较多,将不常用的, 数据较大,长度较长(比如text类型字段)的拆分到“扩展表“。 一般是针对那种几百列的大表,也避免查询时,数据量太大造成的“跨页”问题。

    垂直分库

    垂直分库针对的是一个系统中的不同业务进行拆分。

    优点:

    • 业务解耦,逻辑清晰
    • 在高并发场景下,垂直分库一定程度上能够突破IO、连接数及单机硬件资源的瓶颈

    缺点:

    • 部分表无法join,需要业务接口解决
    • 分布式事务
    • 无法解决单表数据量大的情况

    水平切分

    水平分表

    针对数据量巨大的单张表(比如订单表),按照某种规则(RANGE,HASH取模等),切分到多张表里面去。 但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈。不建议采用。

    水平分表分库

    将单张表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据集合不同。

    优点

    • 可以减少单表的数据量,利于扩展
    • 缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬件资源等的瓶颈

    缺点

    • 查询需要带上分区键
    • 无法join
    • 查询合并

    切分方案

    • 按照键值哈希,常见的是userid
    • 按照日期
    • RANGE
    • 地理区域

    开源中间件

    • mycat
    • shardingsphere

    相关文章

      网友评论

          本文标题:一天一道面试题——数据库篇8(分表分库)

          本文链接:https://www.haomeiwen.com/subject/tumllrtx.html