游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

分库分表必会跨库分页查询的几种方式

  概述
  随着数据库中数据量日益增多,不得进行分库分表,在分库后将数据分布到不同的数据库实例(甚至物理机器)上,以达到降低数据量,提高系统的处理能力,但是这种架构也带来其他问题,比如本文要讲解的跨库分页查询
  全局查询法
  test表有数据〔1,2,3,4,5,6,7,8〕,在单库的时候,查询第2页数据并且显示2条,语句是这样的selectfromtestorderbyidlimit2offset2
  数据返回〔3,4〕,但是数据切分以后,如果要查询,这样语句就可能就会有问题,例如:在节点1执行此语句,返回【6,8】,节点2返回【5,7】,然后进行排序取前二条返回了【5,6】,可以看到此结果与实际结果不一致,所以应该对sql语句改写为:selectfromtestorderbyidlimit0offset4;
  然后在根据各节点返回的数据,在进行排序,筛选出第2页的2条缺点每个节点返回更多的数据,增大了网络传输量服务层还需要进行二次排序,增大了服务层的计算量随着页码的增大,性能会急剧下降优点
  查询简单,数据准确,不用做业务兼容,数据库中间件都支持禁止跳页查询法
  在数据量很大,翻页数很多的时候,很多产品并不提供直接跳到指定页面的功能,而只提供下一页的功能,这一个小小的业务折衷,就能极大的降低技术方案的复杂度
  假设db1中值为【2、4、6、8】,db2中值为【1、3、5、7】,根据id进行排序,返回对应的条数,在内存中对各个节点返回的数据进行排序,得到需要的数据,执行以下语句,查询第一页数据,返回结果集为【1,2】selectfromtestwhereid0orderbyidlimit2;
  相比以前的方案,貌似跟以前处理流程一样,但是在查询第二页时,要根据上一页的id的最大值idmax(第一页的最大idmax为2),作为第二页的最小值,那么会将如下语句selectfromtestorderbyidlimit2,2;
  改写成:selectfromtestorderbyid2limit2
  这样每个节点不用返回4页数据了,只需要返回跟第一页一样页数的数据,可以看到通过对业务的折中,性能得到大大的提升。缺点
  此种方案需要业务层进行处理,而且不能跳页查询,比如当前页是第一页,直接调到第五页,因无法获取到第四页的最大ID,所以无法查询第五页的数据优点
  不会随着页数的增大而影响查询性能允许数据精度损失查询法
  使用patitionkey进行分库,在数据量较大,数据分布足够随机的情况下,各分库所有非patitionkey属性,在各个分库上的数据分布,统计概率情况是一致的。
  例如,在uid随机的情况下,使用uid取模分两库,db0和db1:
  (1)性别属性,如果db0库上的男性用户占比70,则db1上男性用户占比也应为70(2)年龄属性,如果db0库上1828岁少女用户比例占比15,则db1上少女用户比例也应为15(3)时间属性,如果db0库上每天10:00之前登录的用户占比为20,则db1上应该是相同的统计规律
  精度损失查询法示意图
  利用这一原理,如上图要查询全局第二页数据,limit2offset2改写为limit1offset1,每个分库偏移1(一半),获取1条数据(半页),得到的数据集的并集,那么结果为【3,4】基本能够认为,是全局数据的limit2offset2的数据,当然这里只是为了所以返回的准确数据,但是实际并不是精准的。
  根据实际业务经验,用户都要查询第100页网页、帖子、邮件的数据了,这一页数据的精准性损失,业务上往往是可以接受的,但此时技术方案的复杂度便大大降低了,既不需要返回更多的数据,也不需要进行服务内存排序了终极大招二次查询法
  以上介绍的方案或多或少都有一定缺点,那么有没有一种方式能够满足业务需要,也能满足性能要求的方法呢,有,那就是二次查询法。
  因此方案相比前三个方案理解起来相对复杂点,为了方便说明,所以先单一DB说起,以下单一DB中保存用户年龄数据,1到30岁,总共30条,如果要查询selectfromTorderbyagelimit5offset10
  那么会返回以下粉色标识数据,即【1115】,请记住此结果,下面会讲解怎么分库查询以下结果。
  单一DB数据集
  把以上所有数据进行拆分打散存放到3个分库中,如下,注意下面数据只是用户属性年龄,不是分片键:
  分库数据集
  通过上文介绍,在单一DB中查询limit5offset10,返回了【1115】结果,那如果在以上三个分库全局查询limit5offset10怎么做?
  第一步:语句改写
  将selectfromTorderbyagelimit5offset10改写为selectfromTorderbyagelimit5offset3,并投递给所有的分库,注意,这个offset的3,来自于全局offset的总偏移量10,除以水平切分数据库个数3。
  执行selectfromTorderbyagelimit5offset3,结果如下(粉色标识数据),为了便于理解用青黄色标识库表前三条数据:
  执行limit5offset3数据集(青黄色表库表前三条数据)
  第二步:找到返回数据的最小值第一个库,5条数据的age最小值是10;第二个库,5条数据的age最小值是6;第三个库,5条数据的age最小值是12;
  标识结果集最小值
  故,三页数据中,age最小值来自第二个库,agemin6,这个过程只需要比较各个分库第一条数据,时间复杂度很低
  第三步:查询二次改写
  第一次改写的SQL语句是selectfromTorderbyagelimit5offset3第二次要改写成一个between语句,between的起点是agemin,between的终点是原来每个分库各自返回数据的最大值:
  第一个分库,第一次返回数据的最大值是22所以查询改写为selectfromTorderbyagewhereagebetweenageminand22
  第二个分库,第一次返回数据的最大值是20所以查询改写为selectfromTorderbyagewhereagebetweenageminand20
  第三个分库,第一次返回数据的最大值是25所以查询改写为selectfromTorderbyagewhereagebetweenageminand25
  相对第一次查询,第二次查询条件放宽了,故第二次查询会返回比第一次查询结果集更多的数据,假设这三个分库返回的数据如下:
  二次查询结果,(深蓝色表示)
  分库一的结果集,比第一次多返回了1条数据,上图中深蓝色记录7
  由于agemin来自原来的分库二,所以分库二返回结果集和第一次查询相同,其实这次查询可以省掉
  分库三的结果集,比第一次多返回了3条数据,上图中深蓝色记录8,9,11
  第四步:找到agemin在全局的offset
  在每个结果集中虚拟一个agemin记录,找到agemin在全局的offset
  标识全局offset
  因为查询语句为limit5offset3,所以查询结果集中每个分库的第一条数据offset为4;
  分库一中,根据第一次查询条件得出的10的offset是4,查询又返回了一条数据向前推进一位索引,故虚拟agemin在第一个库的offset是2
  分库二没有数据变化所以agemin的offset4
  分库三中,根据第一次查询条件得出的12的offset是4,查询又返回了三条数据向前推进三位索引,故虚拟agemin在第三个库的offset是0
  因此agemin的全局offset为:2406
  第五步:查找最终数据
  既然得到了agemin在全局的offset为6,就有了全局视野,根据第二次的结果集,就能够得到全局limit5offset10的记录(下图黄色标识数据)。
  具体计算如下,各分库二次查询结果如下:
  分库1:7、10、14、16、21、22
  分库2:6、13、17、19、20
  分库3:8、9、11、12、15、18、23、25
  统一放到list排序后:【6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23、25】,得知最小值全局offset为6,最终结果要取offset10limit5,那就1064,把排序后结果,向后推移4位,然后再取5位,那就是【11、12、13、14、15】
  标识最终结果数据(黄色表示)优点
  精确返回数据,不会随着页数变大而丢失数据缺点
  需要进行两次数据库查询

赫歇尔(HerscheI)赫歇尔(WiemHeaetha(17381822)曾经是一位业余天文爱好者,他在英国巴斯的家中,自己磨制了一台巨大的天文望远镜。在赫歇尔时代以前,天文学家普遍认为天空只有……航拍江西鄱阳湖二桥壮美夏日晚霞景观图为航拍金色晚霞之下的鄱阳湖二桥如长龙一般横跨鄱阳湖,风景壮美。傅建斌摄图为航拍鄱阳湖二桥附近水天一色,壮美如画。傅建斌摄图为航拍金色晚霞之下的鄱阳湖二桥如长龙一般……获弓箭传说团队投资,这家创业公司做了款Roguelike跑酷Roguelike游戏总会让人玩了一把之后再玩一把,而流程短、节奏快的混合休闲Roguelike更是容易让这种循环重复下去。昨日海彼网络和《弓箭传说》的团队大猩猩游戏工作……在缅甸花6w买的冰种翡翠,经检测竟然是葡萄石!翠友都要气哭了大家好,我是轩哥。前几年有位翠友前去缅甸旅游,在一家珠宝店里看上了件冰种翡翠吊坠,种水既通透,样式还颇为精美,立马就心动了。于是跟店家讨价还价一番之后,便以6万块的……CSGOENCE官宣SunPayus和valde加盟1、ENCE已经正式宣布SunPayus和valde加入他们的活跃阵容。SunPayus在为MovistarRiders度过了极其成功一年后便被ENCE相中,这位23岁的……东契奇未来五年内会加盟热火?独行侠如今阵容不足以支撑他夺冠洛杉矶快船俨然成为达拉斯独行侠最大苦主,而卡乔双人组俨然成为东契奇染指总冠军之路的最大须待跨越的大山。东契奇生涯前两次季后赛之旅面对卡乔二人组率领的快船时力有未逮的场景似……大梦爆冷输球,无缘澳门冠军赛八强,有几个问题很好奇?今天晚上WTT澳门冠军赛在16进8的决赛中,新科奥运冠军、世界排名第二的陈梦2:3不敌斯鲁科斯,遗憾止步16强。说实在的,今天晚上看球赛本来心情挺好的,该赢得比赛国乒队员都赢了……永劫无间世界冠军赛B组第五局沉着冷静CPG丶XIANG斩获荣北京时间12月23日,2021《永劫无间》世界冠军赛单排入围赛B组开战。第五局开局依旧是几家欢喜几家愁,前期更多的是迦南的身法秀,再来就是岳山的硬钢。相比前四局,这局更加……吉林省对俄整车出口规模持续扩大珲春开展整车出口业务。(资料图)珲春市委宣传部供图中新网吉林珲春2月10日电(记者郭佳)吉林省对俄罗斯汽车出口规模持续扩大。记者10日从吉林珲春综合保税区获悉,今年1月,……陈皮话梅糖火了,家长称起名用了全家姓,网友就没考虑孩子名字不只是一个简单的代号,也是跟随学生一生的标签,受传统思想的影响,家长极为重视学生的姓名,关系到学生的健康成长和人生运势。家长对学生的姓名十分重视,都想为学生取个寓意好……平凡地生活读了书,但不多我深怕自己本非美玉,故而不敢加以刻苦琢磨,却又半信自己是块美玉,故又不肯庸庸碌碌,与瓦砾为伍。《山月记》最近微博上热门话题孔乙己,失意书生学历不但是敲……吴京曾被前女友嫌弃,入圈26年无绯闻,现成200亿导演11月25日,由吴京、易烊千玺主演的《长津湖》,已经突破了56。94亿票房,一举打破了《战狼》的票房,再次缔造了一个票房神话。近几年,吴京犹如一匹黑马,凭借《战狼》、《流……
技嘉推出新款专业级主板支持双路至强,可搭载1。5TB内存IT之家12月24日消息根据AnandTech的报道,技嘉推出了MD71HB0双插槽服务器主板,支持英特尔至强处理器系列,6通道内存,最高支持1。5TB内存。主板搭载了1……索契冬奥花滑团体冠军斯托洛波娃宣布怀孕曾获世锦欧锦4枚银牌直播吧8月6日讯2014年索契冬奥会花样滑冰团体冠军、双人滑银牌组合女伴克塞尼亚斯托洛波娃在个人社交媒体主页上宣布怀孕。斯托洛波娃在Instagram上发布了一张自己孕肚……笔记本内存迎来大容量高频时代,英睿达推出32GBDDR432IT之家1月30日消息今年,AMD推出了7nm工艺的移动处理器,全面支持DDR43200高频内存,另外爆料称英特尔即将推出的十代移动标压处理器也将支持DDR43200高频内存。……影驰推出新款星耀RGB内存条16GBDDR43600,599IT之家1月20日消息不久前,影驰推出了星曜品牌的内存,采用了钻石切割RGB导光罩,铝合金散热器,8GBDDR43000,299元。现在,官方又推出了16GB单条版本,频率达到……这世上有三种女人最累最傻最命苦,来看看,有你吗?没想到人到中年,经历过大大小小的磨难,品尝过无数坎坷。有的人事业、爱情双丰收,有的人却深陷在生活的泥潭里,承受着不为人知的痛苦。这其中有三种女人最累、最傻、最命苦,看看有没有你……如果我能每天的第一局英雄联盟必赢,那我可以有多高的成就?不影响你的假设,给你再加一个假设,我们来看看是什么情况吧:每天的第一局英雄联盟必赢,但是其他的场次必输。按照这个假设来说,在中国的时区,你24小时之内的第一把是绝对会胜利……伟大的小人揭秘造纸术发明者蔡伦不为人知的罪恶人生时至今日,我们生活中处处都少不了纸这种东西。一提到纸,大家肯定会想到宦官发明家蔡伦,如果没有他发明的新造纸术,可能我们还在用竹简记事呢。关于蔡伦的为人,后世对他有褒有贬,那么他……老詹空砍38分6板5助,湖人被独行侠逆转输圣诞大战,411工今天湖人客场挑战达拉斯独行侠队,这是詹姆斯第17次出席圣诞大战,浓眉因伤继续缺席比赛,詹姆斯出战34分钟23投13中狂砍38分6篮板5助攻,投篮手感还不错,罚球12罚12中,三……越南美女穿开叉旗袍,就不怕走光吗?竟然还有这些好处每年都有大量的人会选择去外国游玩,而东南亚的国家则成为了十分受欢迎的外国人会选择的旅游目的地,虽然有些东南亚国家距离我国并不算远,但是每个国家本身的文化与环境是完全不一样的,……舒善三种水光如何挑选?一支水光z1000张面膜?虽然此话听起来比较夸张,但水光的补水效果是大家公认的。除此之外,打水光的好处可能比你想的还多哦!舒善说给你听听!水光的主要成成分就是玻尿酸,因此……英特尔公布mOS操作系统,面向高性能计算IT之家8月13日消息根据外媒TechPowerUp的消息,英特尔最近把资源集中在数据中心和高性能计算上。今天,英特尔发布了其最新产品mOS操作系统。IT之家了解到,英特……英特尔预热明天有TigerLake处理器重磅信息公布IT之家8月12日消息英特尔首席架构师RajaKoduri在推特上表示,将在8月13日公布关于Willow架构,Tiger处理器和XeGPU的信息。如上图所示,英特尔暗示……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网