面试时需要掌握的 Mycat分库分表技能
发布日期:2021-10-06 02:38:24
浏览次数:8
分类:技术文章
本文共 874 字,大约阅读时间需要 2 分钟。
分库分表的意义:把压力分摊到不同的服务器上
场景描述:
一张表100w,按ID(分库字段)除以10取模,分到10个库
1号库id最后位总是1
2号库id最后位总是2
以此类推......
不同的表尽量创建在不同机器上,别10张表都在一个机器上,甚至一个数据库上,这样做的意义不大
实际操作时,可以分到5台服务器上,每个服务器上2个数据库,不同的库上,表结构相同
Mycat 可以连Oracle 或者Mysql
注:只把个别大数据量表拆分
如何实现?
- 在shema.xml配置文件中配置10数据库地址
- 在rule.xml里定义待分库的表,分库字段id以及分库算法
- 在mybatis里,连接到mycat,把sql语句传给mycat,由mycat路由到对应的数据库,即分库分表对业务层是透明的
- 在rule.xml里,能定义对个分库字段,但针对不同分库字段,应能对应到同一个数据库中
实现分库分表前,需要排查改写sql
- 观察所有sql, 尽可能去掉group by、join等全表操作的语句,遇到此类语句,或者改写,或者放到业务层实现
- 尽可能去掉事务,尤其是分布式事务,可能涉及到全表操作
- 排查所有的select,insert,delete和update语句里的where,里面的查询字段,尽可能都加入分库字段
- 引入mycat后,如果出现全表查,或者无法根据查询条件定位到具体表,会出错
如果一定要全表查,建立全局库
- 10个分库,外带1个全局库,如果没有分库字段,就到全表查询
- 把任何10个分库的增删改操作写入队列,异步修改全局表
- 全局表里有所有数据,会有略微延迟
- 尽可能保证大部分操作是针对分库的
- 对数据量大的表进行分库分表
- 重新考虑分库表索引,尤其是复合索引
如何上线?
在测试环境里充分测试,并充分用jmeter和zabbix压测
找个访问量少的时候上线,比如凌晨
上线前,把之前所有全局数据,拆分到分库上
上线代码,上线阶段,同时操作原来的数据表和分表,上代码时,或许有业务丢失,如果不重要,可以不用管,重要数据根据日志恢复
做好上线测试和回退预案
转载地址:https://blog.csdn.net/luxuiary/article/details/105705552 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年03月07日 05时49分04秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
程序中mysql添加用户_MySQL添加用户的两种方法
2019-04-21
简述mysql安装过程_mysql安装的过程
2019-04-21
后端接口重定向_不用再等后端的接口啦!这个开源项目花 2 分钟就能模拟出后端接口...
2019-04-21
学mysql需要英语水平多高_大学英语专业挂科率高吗
2019-04-21
mysql group by实现_SQL数据分析之 group by 的实现原理
2019-04-21
mysql数据库大小如何查看器_如何用SQL命令查看Mysql数据库大小
2019-04-21
python 红黑树_红黑树-Python实现 | 学步园
2019-04-21
php显示json,使用 PHP 获取并解析 JSON 显示在页面中
2019-04-21
php sspi,php 内置的 web 服务器 php -s
2019-04-21
java生成结果集向量,如何解释H2o深度学习输出向量?
2019-04-21
matlab 曲线拟合求导,如何对matlab cftool拟合得到的cfit函数求导数
2019-04-21
matlab 50hzquchu,新手求消除50HZ工频干扰陷波滤波器源程序
2019-04-21
php不需要也能输出,php 如何只输出最后生成的那个值??
2019-04-21
php正则过滤sql关键字,使用正则表达式屏蔽关键字的方法
2019-04-21
php取整v,php取整方式分享
2019-04-21