1. sharding-jdbc基本概念
1.1 垂直(纵向) 切分
将不同的表(或者Schema)拆分代不同的数据库(主机之上)垂直拆分与业务有关,例如将原来在同一个库下的表,把表分散到不同库下(与微服务的概念相通/订单系统-用户系统···)
缺点:
- 不能解决数据量大带来的性能损耗,读写压力依旧很大
- 不同的业务无法跨库管理,只能通过业务来关联
1.2 水平(横向)切分
根据表中的数据的逻辑关系,将已中表的数据按照时间/ID....等条件划分到不同的库;表的数据结构一样但是数据得以分开
优点:
- 单库(表)的数据量得以减少,提高性能
- 提高了系统的稳定性和负载能力
- 切分出的表结构相同,程序改动较少
1.3 分库分表的难点
- 分布式全局唯一ID
- 分片规则和策略
- 跨分片技术问题
- 跨分片事务问题
1:分片规则
分片的规则和策略,在某些时候直接决定了数据访问的效率问题。
分片规则决定了需要知道数据需要从哪个具体的数据库的分表中获取。
分片规则决定了能够正确的运行在单节点数据库中的SQL,在分片之后的数据库中并不一定能够正确运行。因为分片可能导致名称的修改,或者分页、排序、聚合分组等操作的不正确处理。
2. 跨分片技术问题
分片技术还会遇到下面几个难题:
跨分片的函数处理
跨分片Join
3.以下概念非常重要,是sharding-jdbc中基础
索引重名队则;同表不能重名 postgres---同库不能同名
逻辑表、真实表
数据节点:数据分片的最小单元(存储数据的真实的表)
绑定表(逻辑表)。广播表(所有库存在的表,数据量小,都会用到)