range是什么意思

更新时间:2022-11-25 14:33:15 阅读: 评论:0


2022年11月25日发(作者:环球职业教育在线网)

取模是什么意思_什么是数据库分库分表?

1.前⾔

中⼤型项⽬中,⼀旦遇到数据量⽐较⼤,⼩伙伴应该都知道就应该对数据进⾏拆分了。有垂直和⽔平两种。

垂直拆分⽐较简单,也就是本来⼀个数据库,数据量⼤之后,从业务⾓度进⾏拆分多个库。如下图,独⽴的拆分出订单库和⽤户库。

⽔平拆分的概念,是同⼀个业务数据量⼤之后,进⾏⽔平拆分。

上图中订单数据达到了4000万,我们也知道mysql单表存储量推荐是百万级,如果不进⾏处理,mysql单表数据太⼤,会导致性能变

慢。使⽤⽅案可以参考数据进⾏⽔平拆分。把4000万数据拆分4张表或者更多。当然也可以分库,再分表;把压⼒从数据库层级分开。

1.1垂直拆分和⽔平拆分区别

1.1.1垂直拆分

数据库的垂直拆分:对业务表进⾏分类,不同的业务表划分到不同的数据库⾥。这种形式的拆分往往是便随着服务化改造,按功能模块将

原来强耦合的系统拆分为多个弱耦合的服务,此时往往就会进⾏数据库的垂直拆分。

数据表的垂直拆分:是针对于数据表列的拆分,把⼀张列⽐较多的表拆分为多张表。

垂直拆分的优点:

数据库的拆分简单明了,拆分规则明确。

应⽤程序模块清晰明确,整合容易。

数据维护⽅便易⾏,容易定位。

垂直拆分的缺点:

部分表关联⽆法在数据库级别完成,需要在程序中完成。

单表⼤数据量仍然存在性能瓶颈。

事务处理相对更为复杂。

拆分达到⼀定程度之后,扩展性会遇到限制。

1.1.2⽔平拆分

把⼀个表的数据按照某种规则化分到不同表或数据库⾥(⽔平拆分是按照⾏数据拆分)。

⽔平拆分的优点:

解决单表单库⼤数据量和⾼热点访问性能遇到瓶颈的问题;

应⽤程序端整体架构改动相对较少。

事务处理相对简单。

只要切分规则能够定义好,基本上较难遇到扩展性限制。

⽔平拆分缺点:

拆分规则相对更复杂,很难抽象出⼀个能够满⾜整个数据库的切分规则。

后期数据的维护难度有所增加,⼈为⼿⼯定位数据更困难。

产品逻辑将变复杂。⽐如按年来进⾏历史数据归档拆分,这个时候在页⾯设计上就需要约束⽤户必须要先选择年,然后才能进⾏查询。

总⽽⾔之

1.数据表垂直拆分:单表复杂度。

2.数据库垂直拆分:功能拆分。

3.⽔平拆分:分表:解决单表⼤数据量问题。分库:为了解决单库性能问题。

2.分库分表⽅案

分库分表⽅案中有常⽤的⽅案,hash取模和range范围⽅案;分库分表⽅案最主要就是路由算法,把路由的key按照指定的算法进⾏路由存

放。接下来介绍⼀下两个⽅案的特点。

2.1hash取模⽅案

在我们设计系统之前,可以先预估⼀下⼤概这⼏年的订单量,如:4000万。每张表我们可以容纳1000万,也我们可以设计4张表进⾏存

储。

那具体如何路由存储的呢?hash的⽅案就是对指定的路由key(如:id)对分表总数进⾏取模,上图中,id=12的订单,对4进⾏取模,

也就是会得到0,那此订单会放到0表中。id=13的订单,取模得到为1,就会放到1表中。为什么对4取模,是因为分表总数是4。

优点

订单数据可以均匀的放到那4张表中,这样此订单进⾏操作时,就不会有热点问题。

热点的含义:热点的意思就是对订单进⾏操作集中到1个表中,其他表的操作很少。订单有个特点就是时间属性,⼀般⽤户操作订单数

据,都会集中到这段时间产⽣的订单。如果这段时间产⽣的订单都在同⼀张订单表中,那就会形成热点,那张表的压⼒会⽐较⼤。

缺点

将来的数据迁移和扩容,会很难。

如:业务发展很好,订单量很⼤,超出了4000万的量,那我们就需要增加分表数。如果我们增加4个表

⼀旦我们增加了分表的总数,取模的基数就会变成8,以前id=12的订单按照此⽅案就会到4表中查询,但之前的此订单时在0表的,这样就

导致了数据查不到。就是因为取模的基数产⽣了变化。

遇到这个情况,我们⼩伙伴想到的⽅案就是做数据迁移,把之前的4000万数据,重新做⼀个hash⽅案,放到新的规划分表中。也就是我们

要做数据迁移。这个是很痛苦的事情。有些⼩公司可以接受晚上停机迁移,但⼤公司是不允许停机做数据迁移的。

当然做数据迁移可以结合⾃⼰的公司的业务,做⼀个⼯具进⾏,不过也带来了很多⼯作量,每次扩容都要做数据迁移

那有没有不需要做数据迁移的⽅案呢,我们看下⾯的⽅案

2.2range范围⽅案

range⽅案也就是以范围进⾏拆分数据。

range⽅案⽐较简单,就是把⼀定范围内的订单,存放到⼀个表中;如上图id=12放到0表中,id=1300万的放到1表中。设计这个⽅案时

就是前期把表的范围设计好。通过id进⾏路由存放。

优点

我们⼩伙伴们想⼀下,此⽅案是不是有利于将来的扩容,不需要做数据迁移。即时再增加4张表,之前的4张表的范围不需要改变,id=12

的还是在0表,id=1300万的还是在1表,新增的4张表他们的范围肯定是⼤于4000万之后的范围划分的。

缺点

有热点问题,我们想⼀下,因为id的值会⼀直递增变⼤,那这段时间的订单是不是会⼀直在某⼀张表中,如id=1000万~id=2000万之

间,这段时间产⽣的订单是不是都会集中到此张表中,这个就导致1表过热,压⼒过⼤,⽽其他的表没有什么压⼒。

总结

hash取模⽅案:没有热点问题,但扩容迁移数据痛苦

range⽅案:不需要迁移数据,但有热点问题。

那有没有⼀个⽅案,即不需要迁移数据,⼜能解决数据热点的问题呢?

本文发布于:2022-11-25 14:33:15,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/19046.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图