Sharding-JDBC | 1.分库分表的方式和会带来的问题

转载本文章请标明作者和出处
本文出自《爱喝纯净水的南荣牧歌》
本文题目和部分解题思路来源自 https://www.bilibili.com/video/BV1jJ411M78w?p=8

  • 分库分表的方式

    • 垂直分库:因为数据还在一台服务器上,所以还会竞争同一台物理机的CPU、内存、网络IO、磁盘。所以可以把不同的数据分库之后放到不同的服务器上;按照业务将表进行分类,分布到不同的数据库上,每个库放到不同的服务器上,专库专用;
    • 水平分库:水平分库是把同一张表的数据按照一定的规则拆分到不同的数据库中,每个库可以放到不同的数据库中;
    • 垂直分表:常用的字段归为一个表中,不常用的字段归结到一个字段中;(将表的字段按照使用频率分别存储);
    • 水平分表:在同一个数据库内,把同一个表的数据按照一定的规则拆到多个表中;
  • 一般来说,在系统设计阶段就应该根据业务耦合松紧来确定垂直分库,垂直分表的方案,在数据量及访问压力不是特别大的情况,首先我们要考虑缓存、读写分离、索引等技术方案。如果数据量极大,且持续增长,再考虑水平分库、水平分表的方案。

  • 分库分表带来的问题

分库分表能有效的缓解单机和单库带来的性能瓶颈和压力,突破网络IO、硬件资源、连接数的瓶颈,同时也会带来一些问题;

  • 事务一致性的问题

由于分库分表把数据分布到了不同库甚至不同的服务器上,不可避免的会带来分布式事务问题。

  • 跨节点关联查询

关联查询不在一个数据库的话,我们可能要分多次查询;

  • 跨节点分页、排序函数

  • 主键避重

在分库分表环境中,由于表中的数据同时存在不同的数据库中,主键值平时使用的自增长将无用武之地,某个分区数据库生成的ID无法保证全局唯一。因此需要单独设计全局主键,以避免跨库主键重复的问题;

  • 公共表

不同的数据库需要相同的数据,这种情况,在实际的应用场景中,参数表、数据字典表等数据量都是数据量比较小的,变动也会比较少,而且属于高频联合查询的依赖表。

可以将这类表在每一个数据库都保存一份,对所有的公共表的更新都同时发送所有的分库执行。

喜欢的朋友可以加我的个人微信,我们一起进步

你可能感兴趣的:(Sharding-JDBC,java,数据库)