没有合适的资源?快使用搜索试试~ 我知道了~
MyBatis实现Mysql数据库分库分表操作和总结(推荐)
37 下载量 162 浏览量
2020-08-29
15:38:49
上传
评论
收藏 82KB PDF 举报
温馨提示
试读
3页
主要介绍了MyBatis实现Mysql数据库分库分表操作和总结,需要的朋友可以参考下
资源推荐
资源详情
资源评论
MyBatis实现实现Mysql数据库分库分表操作和总结(推荐)数据库分库分表操作和总结(推荐)
主要介绍了MyBatis实现Mysql数据库分库分表操作和总结,需要的朋友可以参考下
前言前言
作为一个数据库,作为数据库中的一张表,随着用户的增多随着时间的推移,总有一天,数据量会大到一个难以处理的地步。
这时仅仅一张表的数据就已经超过了千万,无论是查询还是修改,对于它的操作都会很耗时,这时就需要进行数据库切分的操
作了。
MyBatis实现分表最简单步骤实现分表最简单步骤
既然文章的标题都这么写了,不如直接上干货来的比较实际,我们就先来看看如何实现最简单的分表。
1、我们模拟用户表数据量超过千万(虽然实际不太可能)
2、用户表原来的名字叫做user_tab,我们切分为user_tab_0和user_tab_1(实际也可能不是这么随意的名字),这样就能把原来千
万的数据分离成两个百万的数据量的两张表了。
3、如何操作这两张表呢?我们利用userId也就是用户的唯一标识进行区分。
4、userId%2 == 0的用户操作表user_tab_0,同理userId%2 == 1的用户操作表user_tab_1
5、那么在MyBatis中sql语句如何实现呢?下面是举例查询一个用户的sql语句
<select id="getUser" parameterType="java.util.Map" resultType="UserDO">
SELECT userId, name
FROM user_tab_#{tabIndex}
WHERE userId = #{userId}
</select>
其中我们传入了两个参数tabIndex和userId,tabIndex就是需要操作表的标示值(0或1),这样如果需要查询userId为5的用
户,那么最终出现的sql语句就会是:
SELECT userId, name
FROM user_tab_1
WHERE userId = 5
其他多余的DAO服务和实现我这里就不多展示了,相信聪明的你肯定会的。
以上就是最简单的实现,不需要多余的框架,不需要任何的插件也就满足了分表的要求。
上面基本上就是所有实现的内容了,下面就要开始详细说说分离的细节了,看热闹的基本可以散了。
我将从下面几个角度分别来说说。我尽可能用最简单的白话来说。
分离的方式分离的方式
切分的方式主要有两种,水平切分和垂直切分。
1、水平切分
简单的说就是,把一张表分离成几张一模一样的表,然后表的名字不同。就和上面最简单的例子一样。
这种切分适合于一张表的数据量过大而导致操作时间变慢的情况,如保存的一些记录表。
2、垂直切分
把不同的业务模块分成不同的数据库,这些业务模块直接最好是0耦合(简单的说就是毫无关系)。
这主要是适合数据量普遍较大,而且业务场景比较分散,互相之间没有逻辑关系的情况。
分离的策略分离的策略
具体的策略有很多种,你也可以设计你自己的,普遍的策略有下面几种,只是列举就不具体展开了。
1、“%”取模,也就是上面例子中实现的,也是最简单的一种。
2、MD5哈希
3、移位
4、日期时间(根据不同的日期分表,如一个月一张表,这个月就操作这张表,下个月就下张表)
资源评论
weixin_38570145
- 粉丝: 4
- 资源: 924
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功