Java最新手把手带你用数据库中间件Mycat+SpringBoot完成分库分表,9次Java面试经验总结

最后

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

应用端改造较少;

提高了系统的稳定性跟负载能力。

缺点:

拆分规则难以抽象;

分片事务一致性难以解决;

数据多次扩展难度跟维护量极大;

跨库 join 性能较差

五、什么是Mycat

它是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的的

Server,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用MySQL 原生(Native)协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。

常见应用场景:

单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;

分表分库,对于超过 1000 万的表进行分片,最大支持 1000 亿的单表分片;

多租户应用,每个应用一个库,但应用程序只连接 Mycat,从而不改造程序本身,实现多租户化;

报表系统,借助于 Mycat 的分表能力,处理大规模报表的统计; 替代 Hbase,分析大数据;

作为海量数据实时查询的一种简单有效方案,比如 100 亿条频繁查询的记录需要在 3 秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时 Mycat 可能是最简单有效的选

六、SpringBoot+Mycat+MySQL实现分表分库案例

关于分库分表,Mycat已经帮我们在内部实现了路由的功能,我们只需要在Mycat中配置以下切分规则即可,对于开发者来说,我们就可以把Mycat看做是一个数据库,接下来我们开始搭建环境:

步骤一:

Mycat是使用java写的数据库中间件,所以要运行Mycat前要准备要jdk的环境,要求是jdk1.7以上的环境。所以需要在系统中配置JAVA_HOME的环境变量.

步骤二:

从官网下载Mycat,http://dl.mycat.io/1.6-RELEASE/我们是基于CentOS7来搭建Mycat环境的,所以下载版本:

Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

步骤三:

将下载好的安装包上传到服务器上并解压.解压之后目录结构如下:

在这里插入图片描述

步骤四:

配置切分规则:

将如下配置复制粘贴覆盖mycat/conf/schema.xml的内容。

<?xml version="1.0"?>

< mycat:schema xmlns:mycat=“http://io.mycat/”>

< schema name=“TESTDB” checkSQLschema=“false” sqlMaxLimit=“100”>

< table name=“user” primaryKey=“id” dataNode=“dn01,dn02” rule=“rule1” />

< /schema>

< !-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost -->

< dataNode name=“dn01” dataHost=“dh01” database=“db01” />

< dataNode name=“dn02” dataHost=“dh01” database=“db02” />

< !-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->

< dataHost name=“dh01” maxCon=“1000” minCon=“10” balance=“0” writeType=“0” dbType=“mysql” dbDriver=“native”>

< heartbeat>select user()< /heartbeat>

< !-- 觉得文章对你有帮助的话,可以加一下我的企鹅技术交流圈:519752913,我会在里面不定时分享干货资源,希望能够对你有帮助 -->

< writeHost host=“server1” url=“127.0.0.1:3306” user=“root” password=“WolfCode_2017”/>

< /dataHost>

< /mycat:schema>

< schema>:表示的是在mycat中的逻辑库配置,逻辑库名称为:TESTDB

:表示在mycat中的逻辑表配置,逻辑表名称为:user,映射到两个数据库节点dataNode中,切分规则为:rule1(在rule.xml配置)

< dataNode>:表示数据库节点,这个节点不一定是单节点,可以配置成读写分离.

< dataHost>:真实的数据库的地址配置

< heartbeat>:用户心跳检测

< writeHost>:写库的配置

将如下配置复制粘贴覆盖mycat/conf/rule.xml的内容。

<?xml version="1.0" encoding="UTF-8"?>

< mycat:rule xmlns:mycat=“http://io.mycat/”>

< tableRule name=“rule1”>

< rule>

< columns>id< /columns>

< algorithm>mod-long< /algorithm>

< /rule>

</ tableRule>

< f unction name=“mod-long” class=“io.mycat.route.function.PartitionByMod”>

< !-- how many data nodes -->

< property name=“count”>2< /property>

< /function>

< /mycat:rule>

这里定义的是切分规则,是按照id列进行切分,切分规则是采取取模的方式,

< property name=“count”>2< /property>:这里配置了我们有拆分了多个库(表),需要和前面配置

< table name=“user” primaryKey=“id” dataNode=“dn01,dn02” rule=“rule1” />

中的dataNode个数一致,否则会出错.

步骤五:

在数据库中创建两个数据库db01,db02.

每个库中执行如下建表语句:

CREATE TABLE user (

id bigint(20) NOT NULL,

name varchar(255) DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

步骤六:

启动mycat,执行mycat/bin/startup_nowrap.sh

步骤七:

项目已经上传到github

https://github.com/javalanxiongwei/springboot-mycat

搭建SpringBoot环境,执行插入语句.

application.properties配置如下:

#配置数据源

spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver

#这里配置的是Mycat中server.xml中配置账号密码,不是数据库的密码。

spring.datasource.druid.username=root

spring.datasource.druid.password=123456

#mycat的逻辑库 端口也是mycat的

spring.datasource.druid.url=jdbc:mysql://192.168.142.129:8066/TESTDB

UserMapper.java代码如下:

@Mapper

public interface UserMapper {

@Insert(“insert into user(id,name) value (#{id},#{name})”)

int insert(User user);

@Select(“select * from user”)

List< User> selectAll();

}

UserController.java代码如下:

@RestController

@RequestMapping(“/user”)

public class UserController {

@Autowired

private UserMapper userMapper;

@RequestMapping(“/save”)

public String save(User user){

总结

三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。

  • 第一个是算法

关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。

而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本

《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

《算法的乐趣》共有23个章节:

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

-hc4GoWVm-1715434273799)]

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

[外链图片转存中…(img-0vsO7NVo-1715434273800)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值