数据库设计

数据库的读写分离

即master库支持增删,slave库只读,适用于读压力远大于写压力的场景,如商品的基本信息

分库分表

分表:分为横向和纵向

纵向分表即常见的主从表,主表存放基本信息,从表存放扩展信息和长字段。划分时一般需要考虑三个维度,1字段访问热度,2字段长度,3字段业务含义

横向分表即将数据分摊到完全一样的N张表中,适用于数据量大场景,减轻单表数据压力。对于数据的存放常用的有两种方式:

1.主键/业务主键取模法,比如划分3张表则对id取模,此方法保证了数据量的均匀分布。

2.时间片划分法,根据创建时间段将数据存放到不同表中,此方法适用于业务上对数据产生时间敏感的场景

项目中常用的分表插件有shardbatis(教程利用mybatis插件实现数据库分表_慕课手记)

分库:分为横向和纵向

纵向分库即按业务分库,如订单库,商品库等,没啥好说的

横向分库跟横向分表一样,也是分成N个结构一样的库。是数据量巨大情况下,解决单库分表过多问题的终极解决方案。

思考:如果数据被分库分表存储在库A库B两个库中,A,B两个库又各有a,b,c三个表,那么要查一个id=89的数据,路由规则如何?

第一步取模:通过求余 89%(库数*表数量)=5

第二步确定库:通过除 5/表数量=1

第三步定表:通过求余 5%表数量=2

得出结论id=89的数据在A库b表中

常见分库软件有shardingProxy,shardingJDBC等

分库分表设计下,数据的迁移和数据库扩容

数据迁移

1.给现有需要迁移的数据库,设置从库以用于双写

2.同步存量数据到从库

3.切流到从库(双写改单写,从库即新库)

数据库扩容(如图,扩容的时候,数据库数量必须成倍扩容)

1.给现有数据库,设置从库以用于双写

2.同步存量数据到从库

3.修改取模规则,将分母扩大一倍,使增量数据按照新取模规则分布到各库中

4.处理冗余数据(可选)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值