可以分库、也可以分表、也可以分库分表
分库
可以水平分库、也可以垂直分库 水平分库是指把一个电商DB,可以水平分为电商DB_01、电商DB_02、电商DB_03等
垂直分库是指把一个数据库按照业务划分,电商DB可以分成用户DB、订单DB、地址簿DB等
分表
垂直分表可以将用户表进行拆分,如将用户表拆分成用户主表和扩展表(不常用的字段放到这里)。
水平分表的意思是,
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.访问频率:选择分片键应考虑数据的访问频率。将经常访问的数据放在同一个分片上,可以提高查询性能和降低跨分片查询的开销。
- 数据均匀性:分片键应该保证数据的均匀分布在各个分片上,避免出现热点数据集中在某个分片上的情况。
- 数据不可变:一旦选择了分片键,它应该是不可变的,不能随着业务的变化而频繁修改。
用户名和用户ID选哪个作为分片键?
- 用户名。用户名可以登录。