JAVA开发(Mycat2分库分表学习)

背景:
     在高性能系统的要求下,复杂的系统当单表数据量增加到几千万甚至上亿条记录时,查询延迟无疑是影响高性能系统的瓶颈。业内提供的解决的方案是分库分表,意思是将数据量大的库进行分开,数据量大的表进行分割。通常有横向分割和纵向分割两种模式,其中横向分割较容易。但是当进行数据库分库分表,就产生了另外的问题,就是分布式问题。此时就需要封装一个强大的工具进行屏蔽,使我们在写代码的时候就像只对一个数据库或者一个表进行操作一样。除了使用ShardingShere进行分库分表外,另外的解决方案也可以使用Mycat2中间件来进行分库分表。

什么是Mycat2:

Mycat2是Mycat社区开发的一款分布式关系型数据库(中间件)。它支持分布式SQL查询,兼容MySQL通信协议,以Java生态支持多种后端数据库,通过数据分片提高数据查询处理能力。

分库分表原则:

1、非必要不要进行分库分表。

2、业务系统特别复杂的数据,涉及到的总体数据量和表数比较大的才使用分库。几千个表,几十亿数据量。

3、单表数据量有可能突破一千万的表才进行分表。

springBoot使用Mycat:

前置条件是已安装好mycat2,因为mycat2是一个中间件,并没有集成到springcloud生态中。

下载安装包:

1.下载对应的tar安装包,以及对应的jar包 
   tar包 http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.20.zip
   jar包 http://dl.mycat.org.cn/2.0/1.21-release/  (下载最新的jar包)

安装完修改配置文件,声明对表(user)的分割策略。

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
		<table name="user" dataNode="dn1,dn2,dn3" rule="mod-long" splitTableNames ="false"/>
	</schema>

	<dataNode name="dn1" dataHost="localhost1" database="db1" />
	<dataNode name="dn2" dataHost="localhost1" database="db2" />
	<dataNode name="dn3" dataHost="localhost1" database="db3" />
	
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="jdbc:mysql://localhost:3306" user="root" password="123456"></writeHost>
	</dataHost>
	
</mycat:schema>


 

以mysql数据库为例

引入依赖

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter</artifactId>
 </dependency>
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-jdbc</artifactId>
 </dependency>
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>
 <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>8.0.20</version>
 </dependency>
 <dependency>
     <groupId>org.mybatis.spring.boot</groupId>
     <artifactId>mybatis-spring-boot-starter</artifactId>
     <version>1.3.2</version>
 </dependency>

springboot,yml文件配置数据库链接

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/TESTDB
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456

其他的业务代码按照springBoot无分库分表的方式编写jiukey

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋力向前123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值