伴随业务发展的越来越好,必然引起数据量的不断增加,当数据量到达一定程度后,会导致数据库性能下降,此时,可以考虑使用数据分片。对于新库新表,一定依据数据增量评估结果决定是否需要分片,不要误用分片导致增加开发和维护的难度与成本。
数据分片的原因?
数据库数据量(1TB)超过阈值、数据表数据量超过阈值,影响数据库性能。
数据分片的评估标准?
- 数据库数据大小,1TB
- 数据表数据量,与索引深度有关,如3层,数据量1千万左右
数据分片方式?
- 纵向分片 按照业务维度,将表分到不同的数据库。
- 横向分片 按照某种规则,将一类数据分散存储到具有相同表结构的一批表中。
数据分片路由规则?
- 分片数据列
- 分片算法
分布式主键?
- UUID
- 雪花算法
- 序列服务+一次性获取批量序列
如何处理crud sql?
- 最好针对单表且条件中提供分片列数据
- 表关联,笛卡尔积
- 排序分页,map-reduce的过程
数据分片的实现方式?
- 客户端
- 代理
- mysql插件
数据分片的事务支持?
- 本地事务
- XA事务,两阶段事务提交,如seata
- 基于BASE的柔性事务,保证最终一致性
数据分片解决方案?
- ShardingSphere
数据分片 :: ShardingSpherehttps://shardingsphere.apache.org/document/current/cn/features/sharding/