专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

mycat2实现单数据库年月分表

  功能简介
  随着业务数据量的增加查询速度已无法忍受的程度。是你的网络问题吧这样牵强的解释无法敷衍过去的时候。
  在不修改原来程序代码的基础上最好的办法:
  1)说服客户清理什么时候之前的数据,完美下班〔呲牙〕。
  2)使用数据库代理中间件帮我们完成读写分离、分库分表等操作,程序只需修改数据库链接信息到数据库代理组件的地址即可;(中间件mycat2,shardingsphereproxy都可以实现)
  工作日报为底层数据结构变更,业务查询整改优化需要xx工作日完成。
  实际工作安装部署mycat2配置分表,修改程序数据库地址。
  备注:这种年月分表主要是处理列表查询展示类业务,因为分表后你除了要用id查询最好也带上分表的时间字段,不然就会全分表都查询一遍。如果你是自增id并有其他业务关联该自增id那么请你一定要说法客户用方法1〔抠鼻〕。(我基本都使用雪花算法做id,可排序、唯一)
  文章主要介绍安装部署和单数据库月年分表,因为我在网上搜索发现都是官方的说明介绍复制粘贴的文章,这里针对功能编写解决问题方便大家复制。按年月拆分数据表
  数据备份、数据备份、数据备份重要的事情说三遍。
  我这里只是单表拆分,具体涉及到业务关联什么的还要看自己的具体情况。我这里是直接使用sql语句将大数据表的数据直接用查询结果的方式插入到新分表中。
  1)使用存储过程创建年月分表(复制直接用,替换test表名和createdate时间字段名)1。先删除存储过程DROPPROCEDUREIFEXISTScreatetables;2。创建存储过程CREATEPROCEDUREcreatetables()begin定义变量DECLAREsintDEFAULT0;DECLAREcreateSqlVARCHAR(2560);DECLAREtableNameVARCHAR(255);定义游标,并将sql结果集赋值到游标中,report为游标名test为大数据表名,查询出年月并且组合为新分表的表名,例:test202209或test202210或test202211DECLAREreportCURSORFORselectdistinctCONCAT(test,,DATEFORMAT(createdate,Ym))astablenamefromtest;声明当游标遍历完后将标识变量置为某个值DECLARECONTINUEHANDLERFORNOTFOUNDSETs1;打开游标OPENreport;将游标中的值赋值给变量,注意:变量名不要与sql返回的列名相同,变量顺序要和sql结果列的顺序一致FETCHreportINTOtableName;当s不等于1时,也就是未遍历完时,会一直循环WHILEs1DO执行业务逻辑,创建新分表结构复制大数据表SETcreateSqlCONCAT(createtable,tableName,liketest;);PREPAREstmtFROMcreateSql;EXECUTEstmt;当s等于1时代表遍历已完成,退出循环FETCHreportINTOtableName;ENDWHILE;关闭游标CLOSEreport;end;3。执行存储过程CALLcreatetables();4。删除存储过程DROPPROCEDUREIFEXISTScreatetables;
  生成分表后数据库截图
  2)数据导入到分表中
  关键sql就是查询对应年月的数据插入到对象的分表中insertintotest202210selectfromtestwhereDATEFORMAT(createdate,Ym)202210
  也可以像上面批量创建表一样,使用存储过程一次将大数据表的数据批量插入到对应的分表中。1。先删除存储过程DROPPROCEDUREIFEXISTSinsertdatas;2。创建存储过程CREATEPROCEDUREinsertdatas()begin定义变量DECLAREsintDEFAULT0;DECLAREcreateSqlVARCHAR(2560);DECLAREyyyyMMVARCHAR(255);定义游标,并将sql结果集赋值到游标中,report为游标名test为大数据表明,查询出年月DECLAREreportCURSORFORselectdistinctDATEFORMAT(createdate,Ym)astablenamefromtest;声明当游标遍历完后将标识变量置为某个值DECLARECONTINUEHANDLERFORNOTFOUNDSETs1;打开游标OPENreport;将游标中的值赋值给变量,注意:变量名不要与sql返回的列名相同,变量顺序要和sql结果列的顺序一致FETCHreportINTOyyyyMM;当s不等于1时,也就是未遍历完时,会一直循环WHILEs1DO执行业务逻辑,创建新分表结构复制大数据表SETcreateSqlCONCAT(insertintotest,yyyyMM,selectfromtestwhereDATEFORMAT(createdate,Ym),yyyyMM,);PREPAREstmtFROMcreateSql;EXECUTEstmt;当s等于1时代表遍历已完成,退出循环FETCHreportINTOyyyyMM;ENDWHILE;关闭游标CLOSEreport;end;3。执行存储过程CALLinsertdatas();4。删除存储过程DROPPROCEDUREIFEXISTSinsertdatas;
  3)原来的大数据主表就没用了修改表名即可,后面使用mycat2查询的时候会创建对应的逻辑表进行查询。
  这里将原来的表名修改掉很重要。
  主表修改表名后截图mycat2下载
  1)下载安装模板
  http:dl。mycat。org。cn2。0installtemplatemycat2installtemplate1。21。zip
  解压后重命名文件夹为mycat2
  2)mycat2程序包
  http:dl。mycat。org。cn2。01。21releasemycat21。21releasejarwithdependencies。jar
  将下载的mycat21。21releasejarwithdependencies。jar文件复制到mycat2lib下即可
  3)目录结构
  mycat2目录mycat2配置说明、修改
  1)conf目录下server。json里面主要需要修改的可能就是端口,mysql默认3306,mycat2默认8066{loadBalance:{defaultLoadBalance:BalanceRandom,loadBalances:〔〕},mode:local,monitor:{sqlLog:{clazz:io。mycat。exporter。MySQLLogConsumer,open:true,sqlTimeFilter:3000,sqlTypeFilter:〔SELECT〕}},properties:{},server:{bufferPool:{},idleTimer:{initialDelay:3,period:60000,timeUnit:SECONDS},ip:0。0。0。0,mycatId:1,port:8066,reactorNumber:8,tempDirectory:null,timeWorkerPool:{corePoolSize:0,keepAliveTime:1,maxPendingLimit:65535,maxPoolSize:2,taskTimeout:5,timeUnit:MINUTES},workerPool:{corePoolSize:1,keepAliveTime:1,maxPendingLimit:65535,maxPoolSize:1024,taskTimeout:5,timeUnit:MINUTES}}}
  2)confusersroot。user。json修改mycat2访问用户,程序或Navicat工具连接访问的用户。{dialect:mysql,ip:null,password:123456,transactionType:proxy,username:root}
  3)confdatasourcesprototypeDs。datasource。json配置mycat2自带的数据源,主要修改password,url,user。随便配置一个正确的,自带的数据源没配置好像无法启动,作为搬砖的能跑我就觉得没研究的必要了〔呲牙〕。{dbType:mysql,idleTimeout:60000,initSqls:〔〕,initSqlsGetConnection:true,instanceType:READWRITE,maxCon:1000,maxConnectTimeout:3000,maxRetryCount:5,minCon:1,name:prototypeDs,password:123456,type:JDBC,url:jdbc:mysql:localhost:3306mycat?useUnicodetrueserverTimezoneAsiaShanghaicharacterEncodingUTF8,user:root,weight:0}
  4)在confdatasources目录下将文件prototypeDs。datasource。json复制一个重命名为自己数据库的数据库名称。datasource。json文件。配置自己程序当前使用的数据库,我这里还是test数据库为例,主要修改name(数据源名称,后面其他配置会用到)、password、url、user{dbType:mysql,idleTimeout:60000,initSqls:〔〕,initSqlsGetConnection:true,instanceType:READWRITE,maxCon:1000,maxConnectTimeout:3000,maxRetryCount:5,minCon:1,name:test,password:123456,type:JDBC,url:jdbc:mysql:localhost:3306test?useUnicodetrueserverTimezoneAsiaShanghaicharacterEncodingUTF8,user:root,weight:0}
  confdatasources目录
  5)在confclusters目录下将文件prototype。cluster。json复制一个重命名为自己数据库的数据库名称。cluster。json文件。主要修改masters(就是上面设置的数据源名称){clusterType:MASTERSLAVE,heartbeat:{heartbeatTimeout:1000,maxRetry:3,minSwitchTimeInterval:300,slaveThreshold:0},masters:〔test〕,maxCon:200,name:prototype,readBalanceType:BALANCEALL,switchType:SWITCH}
  6)在confschemas目录下创建数据库名称。schema。json文件。主要设置schemaName、targetName。所有关于名称的最好就和自己的数据库名称一样。其中shardingTables为分表设置信息。下面也提供了命令,但是命令执行的时候会在数据库中创建所有分表。
  配置shardingTables中意思就是创建了test逻辑表,createTableSQL创建表的sql语句(这个创建表的语句就是之前的让修改表名的大数据表,创建表的sql语句可以在Navicat中直接复制),function指明使用的方法和分表的字段(这里是按月分表),partition指明具体的表,tableNames指分表范围{customTables:{},globalTables:{},normalProcedures:{},normalTables:{},schemaName:test,shardingTables:{test:{createTableSQL:CREATETABLEtest(idbigint(20)NOTNULL,titletextCHARACTERSETutf8COLLATEutf8generalci,createdatedatetimeDEFAULTNULL,PRIMARYKEY(id))ENGINEInnoDBDEFAULTCHARSETutf8;,function:{clazz:io。mycat。router。mycat1xfunction。PartitionByMonth,properties:{beginDate:2022010100:00:00,dateFormat:yyyyMMddhh:mm:ss,endDate:,columnName:createdate},ranges:{}},partition:{schemaNames:test,tableNames:test2022019,test20221012,test2023019,test20231012,test2024019,test20241012,test2025019,test20251012,targetNames:test},shardingIndexTables:{}}},targetName:test,views:{}}这个只是运行的命令当作参考,和上面的配置是一个操作。忽略这个就行了mycat:createTable{schemaName:test,shardingTable:{createTableSQL:CREATETABLEtest(idbigint(20)NOTNULL,titletextCHARACTERSETutf8COLLATEutf8generalci,createdatedatetimeDEFAULTNULL,PRIMARYKEY(id))ENGINEInnoDBDEFAULTCHARSETutf8;,function:{clazz:io。mycat。router。mycat1xfunction。PartitionByMonth,properties:{beginDate:2022010100:00:00,dateFormat:yyyyMMddhh:mm:ss,endDate:,columnName:createdate},ranges:{}},partition:{schemaNames:test,tableNames:test2022019,test20221012,test2023019,test20231012,test2024019,test20241012,test2025019,test20251012,targetNames:test}},tableName:test}mycat2启动
  1)window启动cmd使用管理员权限,进入到mycat2bin。
  window里面需要先安装服务mycat。batinstall
  启动mycat。batstart,也可以直接在服务中启动
  2)linux直接进入binmycatstart,bin目录记得给权限chmodxmycat2bin
  3)Navicat工具连接,和mysql一样,帐号密码端口就是上面配置中的信息。
  为了方便测试我又手动创建跨年份的数据表,其中mycat2的数据库里面有个逻辑表test,查询的时候就会直接进行分表查询。
  备注:不带日期查询的话是所有分表,就是上面配置中tableNames的所有表,但是数据库没有对应的表会报错,返回空接口。所以分表后每次查询必须带上分表时间字段createdate。selectfromtestwherecreatedateBETWEEN2022100100:00:00and2023010200:00:00
  mycat2的数据库
  真实数据库结语
  文章中我只截出了关键性的代码方法,相信对需要的人提供帮助或参考。
  希望需要的程序员可以直接使用CTRLV、CTRLC就能实现你的需求那是我写这篇文章最大的成就。

时隔半个世纪的新一轮人类探月热潮明月几时有,把酒问青天,不知天上宫阙,今夕是何年。千百年来,人类对高悬夜空的明月一直充满浪漫遐想,中国有嫦娥奔月的传说,西方有月亮女神的神话。20世纪以来,探月则成为人类共同的现实人类可以筛选杂交的动植物,但在道德上却不能淘汰劣质混血儿混血儿真的漂亮聪明?西方多家机构早就证实全世界的混血儿平均智商约85,远低于东亚黄种人智商105,也远低于白人平均智商100部分初代混血儿看起来比较聪明,并不是真聪明,极可能是身体关注8月车辆购置税减征超230亿元文懂车帝原创李德喆懂车帝原创行业9月11日,据央视新闻联播报道,国家税务总局最新数据显示,今年68月,全国约355。3万辆车享受车辆购置税减征政策,累计减征车购税230。4亿元。央米家发布超薄款石墨烯踢脚线电暖器踢脚线电暖器,因为占地面积小,受到很多人的喜爱,对于南方的冬天,是值得入手的产品之一。升级后的米家石墨烯踢脚线电暖器,更薄的机身,厚度仅为7cm,基本就是一部小米手机的宽度,小巧的干货丨快速转移CVD石墨烯CVD石墨烯薄膜在科研实验中较为常见的一种实验产品,CVD法制备的石墨烯薄,初始大多都是生长在铜基底上面的,因此,在很多实验中都是需要把石墨烯转移到自己需要的基底上面,在转移过程中电动车已经不香了,新风口是氢能源车经过几年的宣传风暴,广大吃瓜群众脑中已经形成了一个思维定式电动车很赚钱,要找工作优先选电动车企业。然而,俱往矣,数风云行业,还看将来。在很多人心目中,电动车行业是棵摇钱树。而实际上受用的读心术,观人术,说的挺有道理,分享分享1一个女孩深夜找你,如果不是有特别的事情,那么她很可能是你的未来女朋友。2聊天中使用哈哈哈的人,一般分为以下几种哈哈哈哈哈表示对你不感兴趣,试图敷衍过去哈哈哈哈哈表示你讲话确实很好逢人藏住话,遇事沉住气,处世守住心尚书中写道与人不求备,检身若不及。与人交往,与其求全责备,不如反省自己。人生在世,不可避免地要与人交往,而相处时做到三不抢,更能让他人与你相处觉得很舒服。这三不抢便是不抢着吃饭不抢你是人间四月天,我是人间六月天为何分别总是在九月,回忆又是思念的酒。离别不过两个字,却可以堵住我心中的千言万语。感情和伤痛是成正比的,昔日的朝不散,而今的朝不见,当初一起有多么的欢乐,此刻便有多么的悲痛。也许你凌晨1点,巴萨巨星遭遇入室抢劫,被4个窃贼殴打,抢走珠宝10天之前,莱万多夫斯基在巴萨训练基地遭遇抢劫,这让巴萨俱乐部忧心不已。现在,又有巴萨球员遇到同样的事。8月29日,西班牙国家报透露,奥巴梅扬遭遇入室抢劫,还被窃贼用火枪威胁铁棍殴华为加持,天花板级的存在?实拍极狐阿尔法S全新HI版EV视界原创实拍华为不造车,只为汽车行业提供智能解决方案已经不是什么秘密了。如今华为也逐步实现了这一战略,不少车型上都出现了华为智能解决方案的身影,我们今天的主角极狐阿尔法S全新H
孕妇那么多,宝妈们在医院扎堆生孩子,医院如何保证不会弄错孩子?由于大部分宝宝刚出生的时候样子个头和体重都差不多,皮肤也皱皱巴巴的不太好分辨,因此很多家长就会担心医院会不会把孩子抱错,毕竟这样的情节有一些电视剧里都有出现过。其实虽然有那么多孕妇孩子不愿上辅导班,自身成绩也不好,自己辅导效果不好,怎么办?首先孩子成绩不好,家长就有责任想办法帮助孩子把成绩提上去。最好的办法就是家长每天辅导一下孩子。然而如果家长辅导不了孩子,或者自己辅导的效果不好,那就只有让别人帮忙,或让孩子上辅导班你会把自己的QQ号传给自己的孩子吗?给他干嘛?若干年后,这玩意儿还有人要吗?我早就卸载了QQ每个时代都有他们自己的特点。留着这些有什么用呢?下一辈应该去创造属于他们的QQ空间。给了孩子也不要,我试了会啊,Q里进本没啥朱元璋为什么忍了七年才杀胡惟庸?胡惟庸真的要谋反吗?朱元璋设了一个局,谁入局谁死。他的这个局实际上得从李善长罢相之后开始说起,当时,朱元璋跑去试探刘伯温,说老李辞官了,我想让杨宪接手他的工作,老先生呀,你看怎么样?刘伯温素和杨宪交好什么事情会让你忍无可忍,并且做出了反抗,结果又如何?每天身边都会发生很多的事情,但有些事情触及到我的底线,让我忍无可忍的时候我就会作出反抗,因为每个人的忍耐都是会有极限的,超越了我的底线我不会再忍。我妈妈那边有位亲戚做生意的,前几年联想还没有澄清说明事情的真相时,我们还会选购联想电脑吗?电脑无国界,顾客有国籍。天,要下雨娘,要嫁人,随她去吧。不但不会,还会尽力劝说周围的亲戚朋友不要买联想任何产品。不会记得前一阵在商场沸沸扬扬,热血激荡抵制国外品牌服装的热闹场面吗?谁家有上小学一年级的娃,你觉得最让人崩溃的是啥事情?这个问题有意思,答案也非常简单。教育孩子是趣事,让人崩溃不知人。教育知识解难题,人有五官和心脑。五官心脑抓知识,不要忘了用方法!我家就有一个一年级的小娃,下午3。35放学回家吃点东社保养老保险和商业养老保险有哪些区别?社会保险的养老保险和商业保险的养老保险有哪些区别?我是认为有下面几个方面的不同区别首先是它们的保险对象不同社保养老保险的对象是各行各业的所有劳动者,包括机关事业单位企业的脑力体力劳人在临终前,最留恋的是什么?为什么?我以我的亲身经历告诉你,人在临终前,最留恋的是亲人和亲情。在我十四岁那年,我的父亲得了出血热,也就是鼠疫住院治疗。就在出院的前一天晚上,我陪姑姑去看他,他突然对姑姑说他最不放心的是宝宝的辅食里如何给宝宝添加水果和蔬菜?分享几点经验1大米稀饭里面可以放水果,比如苹果,营养好,口感好!2准备一台榨汁机,水果汁,蔬菜汁方便做!3蒸的馍馍里面可以放蔬菜。4小米,米粉是宝宝最好的营养餐!5面食,米饭要让宝7个月宝宝聪明的表现有哪些?7个月宝宝聪明的表现有哪些?7个月宝宝聪明的表现是会翻身,会坐,已开始尝试向前爬行,会咿呀学语,能吃多种辅食。判断宝宝的智力,可以从语言和适应周围的人物环境能力与运动能力及精细运动
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网