TB级数据分库分表之Sharding-JDBC基础(一)

什么是分库分表

按照一定的规则,将一个表拆分成多个表,将DB(数据库) 从一台服务器拆分到多台服务器上的方式。

分库分表的目的

分散单台设备的负载,分散IO读写和系统开销(CPU内存资源等等)。

分库分表的核心思想

数据切分(为了降低数据库的访问的压力)。

数据处理(使用场景分类)

OLTP与OLAP.png

联机事务处理(OLTP): 对提交的事务进行数据处理并及时的反馈处理的结果(例如:实时的交易系统,insert/update)

联机分析处理(OLAP): 通过维度方式(查询条件),对数据进行分析,报表进行数据的客观呈现(例如:数据报表,大数据分析 select)。

数据切分的方式

水平与垂直拆分的比较.png

垂直(纵向)切分(分表): 将一张表可按照字段之间的某种逻辑关联,拆分成多个关联表的方式。

水平(横向)切分(分表): 将一张表可按照字段条件拆分成多个表的方式(如 按照日期拆分的历史表)。

垂直切分(分库): 一个系统可按照业务不同将DB拆分到不同服务器上。简单理解为:不同的表拆到不同的数据库中。

水平切分(分库): 一般会建立在垂直切分的基础上,将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,简单理解为:同一个表拆到不同的数据库中。

注意: 影响数据库性能瓶颈的原因是IO读写和系统开销(CPU内存等)。

分库分表组件的选用

分库分表组件比较.png

Sharding-JDBC基本概念

Sharding-JDBC为轻量级java框架,是一个开源的适用于微服务的分布式数据访问基础类库,也可理解为增强版的JDBC驱动,只需引用jar包的依赖。
Sharding-JDBC内部集成并实现分库分表,读写分离和分布式主键功能,并初步实现了柔性事务。

柔性事务补充
  1. 两阶段型: 就是分布式事务两阶段提交,对应技术上的XA、JTA/JTS。这是分布式环境下事务处理的典型模式
  2. 补偿型: TCC型事务(Try/Confirm/Cancel)可以归为补偿型;TCC思路是:尽早释放锁;在Try成功的情况下,如果事务要回滚,Cancel将作为一个补偿机制,回滚Try操作;TCC各操作事务本地化,且尽早提交 (放弃两阶段约束);当全局事务要求回滚时,通过另一个本地事务实现“补偿”行为; TCC是将资源层的两阶段提交协议转换到业务层,成为业务模型中的一部分;
  3. 异步确保型: 将一些同步阻塞的事务操作变为异步的操作,避免对数据库事务的争用,典型例子是热点账户异步记账、批量记账的处理
  4. 最大努力通知型几种: 交易的消息通知与失败重试(例如商户交易结果通知重试、补单重试)
Sharding-JDBC关键词概念

数据节点: 数据拆分的最小单位(表)

逻辑表: 拆分出的多个表合在一起,也就是未拆分前的原表。

真实表: 根据某种规则拆分出的多个表都叫真实表。

逻辑索引: 用于同一个库不能出现相同索引名称的分表场景

广播表: 每个DB中都会使用到的数据表(如 省份/城市表)。

绑定表: 查询时规定了只在同一个数据库中进行查询操作。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容