面试时需要掌握的 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java的23种设计模式
下一篇:mysql 和 redis 数据不致性怎么办?

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月07日 05时49分04秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql+err+1067_MySQL 5.7 Invalid default value for 'CREATE_TIME'报错的解决方法 2019-04-21
程序中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
java string 日期格式_JAVA中String.format的用法 格式化字符串,格式化数字,日期时间格式化,... 2019-04-21
php显示json,使用 PHP 获取并解析 JSON 显示在页面中 2019-04-21
js php排序表格,javascript实现对表格元素进行排序操作_javascript技巧 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
laravel没有route.php,Laravel中的RouteCollection.php中的NotFoundHttpException 2019-04-21
php服务端开启socket,php socket服务端能不能在网页端开启?而不是只能用CLI模式开启... 2019-04-21
php不需要也能输出,php 如何只输出最后生成的那个值?? 2019-04-21
php正则过滤sql关键字,使用正则表达式屏蔽关键字的方法 2019-04-21
php取整v,php取整方式分享 2019-04-21