Sharding-JDBC笔记1
- 1.分库分表
- 1.1 垂直分库
- 1.2 垂直分表
- 1.3 水平分库
- 1.4 水平分表
- 2.存在问题
- 2.1 事务一致性
- 2.2 跨节点关联查询
- 2.3 跨节点分页、排序函数
- 2.4 主键避重
- 2.5 公共表
1.分库分表
分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
1.1 垂直分库
按照业务将数据表分布到不同的数据库,从而达到多个服务器共同分摊压力的效果,但是依然没有解决单表数据量过大的问题。
优点:
解决业务层面的耦合,业务清晰能对不同业务的数据进行分级管理、维护、监控、扩展等高并发场景下,垂直分库一定程度的提升IO、数据库连接数、降低单机硬件资源的瓶颈。
1.2 垂直分表
就是将表中的字段按照使用频次的高低进行划分
原则:
-
把不常用的字段单独放在一张表;
-
把text,blob等大字段拆分出来放在附表中;
-
经常组合查询的列放在一张表中
1.3 水平分库
很容易理解,就是让表中的数据划分到不同的库中
解决了单库大数据,高并发的性能瓶颈。提高了系统的稳定性及可用性
1.4 水平分表
顾名思义,就是在一个数据库中,将同一个表复制,表的结构相同,按照某种规则存储不同的数据。比如按照id将商品信息写到不同的表中。
2.存在问题
2.1 事务一致性
分库分表不可避免带来事务一致性的问题,因为表和库可能在不同的服务器上
2.2 跨节点关联查询
原来的一张表可能分布在不同的数据库,不同的表也可能涉及到关联查询等
2.3 跨节点分页、排序函数
比如limit分页、order by排序等问题。
2.4 主键避重
数据库不能采用自增主键,要采用分布式id,保证全局唯一
2.5 公共表
实际的应用场景中,参数表、数据字典表等都是数据量较小,变动少,而且属于高频联合查询的依赖表。例子中地理区域表也属于此类型。可以将这类表在每个数据库都保存一份,所有对公共表的更新操作都同时发送到所有分库执行。