分库、分表与分库分表

85 阅读2分钟

可以分库、也可以分表、也可以分库分表

分库

可以水平分库、也可以垂直分库 水平分库是指把一个电商DB,可以水平分为电商DB_01、电商DB_02、电商DB_03等

image.png 垂直分库是指把一个数据库按照业务划分,电商DB可以分成用户DB、订单DB、地址簿DB等

image.png

分表

垂直分表可以将用户表进行拆分,如将用户表拆分成用户主表和扩展表(不常用的字段放到这里)。

image.png

水平分表的意思是,

image.png

1. 什么场景下分表?

1.当数据库所占磁盘空间特别大的时候

2.当数据量特别大的时候, 第一点,与数据量和该表字段的多少有关系

如一个用户表10个字段,可能5000w的数据不需要分表

当一个订单表有50个字段,那么可能1000w的数据量就需要分表了。特别是当字段中有text字段,就是那中数据量很大的字段存在时,应该很早就需要分表了

2. 什么情况下分库?

连接不够用。

MySQL Server 假设支持 4000 个数据库连接。一个服务连接池最大 10 个,假设有 40 个节点。已经占用了 400 个数据库连接。

类似于这种服务,有10个,那你这个 MySQL Server 连接就不够了。

3. 又分库又分表?

高并发写入或查询场景。

数据量巨大场景。

数据库分表的注意事项

数据库分库分表框架 ShardingSphere

Sharding-JDBC。

分片键 选择什么字段作为分表的关键很重要

分库分表中的分片键(Sharding Key)是一个关键决策,它直接影响了分库分表的性能和可扩展性。以下是一些选择分片键的关键因素

1.访问频率:选择分片键应考虑数据的访问频率。将经常访问的数据放在同一个分片上,可以提高查询性能和降低跨分片查询的开销。

  1. 数据均匀性:分片键应该保证数据的均匀分布在各个分片上,避免出现热点数据集中在某个分片上的情况。
  2. 数据不可变:一旦选择了分片键,它应该是不可变的,不能随着业务的变化而频繁修改。

用户名和用户ID选哪个作为分片键?

  • 用户名。用户名可以登录。