加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

分库分表?如何做到永不迁移数据和避免热点?

发布时间:2019-04-25 18:13:42 所属栏目:编程 来源:老顾聊技术
导读:一、媒介 中大型项目中,一旦碰着数据量较量大,小搭档应该都知道就应该对数据举办拆分了。有垂直和程度两种。 垂直拆分较量简朴,也就是原来一个数据库,数据量大之后,从营业角度举办拆分多个库。如下图,独立的拆分出订单库和用户库。 程度拆分的观念,

但又要思量到数据匀称,那是不是可以在必然的范畴内数据匀称的呢?由于我们每次的扩容必定会事先计划好这次扩容的范畴巨细,我们只要担保这次的范畴内的数据匀称是不是就ok了。

四、方案计划

我们先界说一个group组观念,这组内里包括了一些分库以及分表,如下图:

上图有几个要害点:

1)id=0~4000万必定落到group01组中。

2)group01组有3个DB,那一个id怎样路由到哪个DB?

3)按照hash取模定位DB,那模数为几多?模数要为全部此group组DB中的表数,上图总表数为10。为什么要去表的总数?而不是DB总数3呢?

4)如id=12,id%10=2;那值为2,落到哪个DB库呢?这是计划是前期设定好的,那怎么设定的呢?

5)一旦计划定位哪个DB后,就必要确定落到DB中的哪张表呢?

五、焦点主流程

凭证上面的流程,我们就可以按照此法则,定位一个id,我们看看有没有停止热门题目。

我们看一下,id在【0,1000万】范畴内的,按照上面的流程计划,1000万以内的id都匀称的分派到DB_0,DB_1,DB_2三个数据库中的Table_0表中,为什么可以匀称,由于我们用了hash的方案,对10举办取模。

上面我们也提了疑问,为什么对表的总数10取模,而不是DB的总数3举办取模?我们看一下为什么DB_0是4张表,其他两个DB_1是3张表?

在我们布置处事器时,有些处事器的机能高,存储高,就可以布置多存放些数据,有些机能低的就少放点数据。假如我们取模是凭证DB总数3,举办取模,那就代表着【0,4000万】的数据是均匀分派到3个DB中的,那就不可以或许实现凭证处事器手段恰当分派了。

凭证Table总数10就可以或许到达,看怎样到达:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读