数据库垂直分库,水平分库,垂直分表,水平分表

场景:

        假设有个高中学生查询系统,里面可以查询所有高中学生信息,高中学校信息,学校地理信息。

那么这样一个系统至少会有下面几个表

        学生信息表:记录学生信息

        班级信息表:记录班级信息

        学校信息表:记录学校信息

        学校地理信息表:记录学校位置,所在地域信息

垂直分库:

        每年学生都会增加将近1000万,很明显数据库数据量会大量增加,查询效率降低,可以按省份去垂直分库,每个省份都拥有上述所有表信息,数据按省份切割到各个省份库(正常的话就是34个库),每个省份数据库只有自己省份的数据信息

水平分库:

        经过上述垂直分库,会发现一个问题,虽然学生信息表的数据每年会大量增加,但是学校信息表,学校地理信息表的数据量小并且每年变化却不大,当垂直分库时,这34个省份库都有这两个表,根本没必要,并且会浪费资源,这时候可以采取水平分库,将学生信息表和班级信息表单独划分成学生信息库,学校信息表划分为学校信息库,学校地理信息表划分为学校地理信息库。只在这三个库的数据量到达某个峰值时进行垂直分库(比如数据超过1000万),这样,就只会有学生信息库进行垂直分库,另外两个库就不会垂直分库

垂直分表:

        在查询学生信息表时,可能这个表的字段有几十个,但是我们查询时可能只需要查看几个主要热点字段即可,其他字段可以在查看详情时再查询,每次查询都查询出几十个字段,数据量大时IO消耗资源过多,就可以吧学生信息表分为学生基本信息表(热点字段,可理解为查询结果列表展示的那几个字段),学生详细信息表(比较少被查看的字段)。

        查询流程分为,查询-》查询结果列表展示(学生基本信息表)-》点击查看具体学生信息(学生详细信息表)

水平分表:

        随着时间推移,我们发现即使是进行了垂直分库,某些省份库的学生信息表数据量还是太大(比如人口大省河南,湖南,广东),这些省份库的学生信息也可能轻易的超过上千万(历年累计),这时候可以采取水平分表,将学生信息表按年份区间信息分表(每10年的学生信息放一个表),这样就会产生多个 学生信息表_具体年份 表,当查询这些人口大省的学生信息时,先路由到省份库,进入到省份库后再根据学生年份再路由到具体的 学生信息表_具体年份 表查询数据。

总结:上述的分库分表只是举例,实际的使用要根据项目实际情况进行不同的使用,单独使用或者组合使用都可以,某种程度上说,解决方案应该是先垂直,再水平,先分库,再分表。当然不同人间接不同,一切以实际场景作最优考虑

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值