00:00
咱们实现了垂直拆分,分库操作还没完啊,咱们还得再考虑另外一件事,就是水平拆分分表啊,为什么要做这种呃分表操作,各位咱们再回来看一下啊,咱们设定的条件,咱们的订单表和订单详情表已经到600万了啊,这块呢,马上就要达到瓶颈了,所以这块必须要做什么呢?考虑啊,我要做一个水平拆分,把表分一下,那各位咱们看一下啊,这块呢,垂直拆分和水平拆分啊,各位同学猜猜啊,哪个更复杂一些。哪个更复杂?啊,有同学说啊这块啊分库啊,有同学说分表啊,到底哪个更复杂,咱们看看啊,关于分表的一个定义,相对于垂直拆分,咱们的水平分表更复杂,因为它不是将表哎做简单的分类,而是要根据什么呢?某一个字段,某种规则,我要把一张表诶切切切切切切成多份,放到多个主机里面,多个数据库里面啊这块就是咱们所对应的水平拆分,所以水平拆分它更复杂一些,咱们可以看一下它的原理图,首先啊,咱们的什么呢?应用服务访问单数据库,咱们说了可以进行优化,我可以做垂直拆分,分库分成了用户诶库,还有咱们的订单库,还有咱们的支付库啊,这个分完库以后,你还得考虑咱们的,比如说订单库里面订单表啊,已经什么600万了,已经快达到瓶颈了,咱们得做什么水平拆分,再接着分,分成什么,把一张表拆成多张表,切记结。
01:39
啊,不是在我一个数据库里面进行拆分,我要做成什么,也不是在同一台机器上,咱们要把它分到多台机器上,多个数据库啊,以实现咱们水平拆分啊,分表的操作,各位这块一定要注意,而且啊这块咱们再画一个图啊,这块呢也需要注意别的一些事情。
02:01
这块呢,哎,我把什么呢,一个订单表,咱们的orders订单表分成多个什么呢?多个数据库啊,放在多个数据库里面,都是咱们订单表的信息啊,咱们这块写啊,随便写一下就是订单来订单一啊,然后这块是订单二订单三。那分成三片了,那这块各位同样也是啊,你的Java程序如果哎直接去做这个事儿啊,那这块就很麻烦了,因为什么呢?你Java程序里面得去判断啊,我到底应该到哪个数据库里面去取我的订单信息啊,这块呢,哎,分别有三个节点,那怎么办?各位咱们是不是还是用咱们的my cat对吧?用咱们的数据库中间键做这个事儿,首先啊,咱们制定规则,就是咱买cat这块制定的,制定完规则之后呢,诶,通过买cat我分到三个什么呢?数据节点分别什么呢?哎,存不同的订单数据啊,这是咱们买cat做的事,之后呢,诶,我这道程序不需要管我要查的订单信息到底在哪,而是什么,直接连我买cat就可以,这也就是啊,咱们买cat实现分表操作,数据分片,它的原则好,那这块再来啊,咱们看一下怎么进行啊。
03:26
分片啊,这块呢,诶选择要拆分的表啊,首先咱们说了啊,MYS扣单有瓶颈,达到1000万数据就已经是瓶颈了,你查询数据s select你去查可能就查不出来数据了,咱们必须要进行水平拆分分表操作,咱们的订单表和什么们的,诶咱们的哎这个订单详情表都已经600万行数据了,已经接近咱们的瓶颈,必须要进行分表优化,那咱们再去看啊,咱们订单表应该怎么划分,咱们还是看它对应的字段啊,诶订单表咱们的orders,诶600万数据应该怎么划分,根据哪个字段进行划分啊。
04:05
啊,有同学说是根据ID是吗?哎,根据ID啊,咱们看一下,哎,根据ID分啊,其实也挺合理的,前300万放在一张表,后300万放到另外一张表,但有一个事儿啊,各位我相信啊这块各位你们已经哎在电商平台上买过不少东西了,谁还关心自己一年前两年前买的东西好像没有吧?各位你们只关心什么是不是,诶我昨天前天买的东西啊,到底发货没有,到底到货没有啊这个或者什么我刚买完一个月的东西啊,这块出现问题了,我得去查看订单,看能不能申请售后,各位是不是咱们只关心眼前的这些订单啊,那各位如果按照各位的哎刚刚的诶分析的这种情况,我根据ID进行划分,那就变成什么,是不是一台机器,哎,忙的忙死一台机器,闲的闲死啊,那这块怎么划分啊,有同学还说啊,老师能不能按照创建时间来划分,按照创建时间。
05:05
划分各位啊,想想是什么情况,比如淘宝啊这块呢,哎,我这块有多台机器啊,给你做服务啊,按照创建时间我划分了一下,那各位我想问问1233台机器,哪台机器负责双11那天的订单。啊,有同学已经开始笑了,对吧?诶负责双11那台订单啊,一台机器你扛得住吗?扛不住啊,肯定会被压摊,而别的机器是不是还是闲的闲死啊,所以各位无论通过咱们的订单ID还是盯,诶通过咱们的创建时间去划分都不太合适,咱们看一下啊,咱们的分表这块可以看到根据主建或者创建时间啊,你查询的时候位,比如说我查询呃相关的订单的时候,历史订单咱们查询的次数少,而咱们的什么呢?诶最近的订单查询的更多一些,而且各位这块呢,呃,这块如果你分了多个节点,比如说我查所有订单信息这块呢,会出现什么,是不是所有的机器都给你提供服务啊,这个也不太合适,还有就是我刚刚所说的双11那天的订单,那这块呢,诶单节点可能扛不住啊,所以根据ID划分咱们的orders订单表不太合适,那根据什么划分,各位诶,咱们是不是可以根据它呀?
06:24
这什么客户ID在咱们订单表里,咱们再回来看啊,看这个建表语句,在咱们订单表里是不是有个字段叫custom ID啊,啊,我一个人相关的订单,你是不是应该放在同一台机器上,这样的好处是什么,咱们过来看一下。你比如说张三他的订单在订单一都在订单一上面,我查是不是这一个机器给你提供服务就可以了,如果分到什么呢?123上面都有,那这块呢,哎,我查张三相关的所有订单是不是订单一订单二订单三啊,所在的三台机器都给你提供服务啊,这样什么呢,也有些浪费,而且一个人的订单啊这块呢,诶在一个电商平台,一个人订单啊这块一两年啊顶了天了,是不是也就什么的几百啊,最多最多上千了啊,除非你是专业买手对吧?啊,一般情况下用户客户啊,他不会订单量那么大,所以我根据什么呢,用户去划分更合适一些,那根据用户怎么划分,咱们可以根据什么customer ID进行划分,那这块就要设定什么,咱们划分的原则了啊,这块怎么去划分啊,我根据卡ID对于我主机数量取模啊,这块呢,哎把它,哎咱们ID是数字也好,或者不是数字划算成哈希马尔也可以。
07:41
对咱们的什么呢?主机数量取模,咱们现在啊这块呢,没有那么多个节点啊,咱们配置的只有什么两个节点啊,咱们的DDN1DN22个节点,那这块呢,我这个卡斯麦蒂,对于他们俩取模无外乎就是什么,是不是对二取模也就是零或者一啊,那就平均分配到两台机器上啊,这样诶更合理一些。以上就是咱们对于什么呢?订单表啊,这个水平分表咱们进行什么呢?水平拆分分表操作的一个,哎分析啊,这个分表操作比分库操作要复杂的多,原因就在这儿,因为不同的表咱们有不同的划分原则啊,各位这块一定要能体会啊,真正咱们实际工作当中要根据不同的表去进行划分,哎,划分的原则也不尽相同,各位这块需要再理解一下,好,以上就是咱们诶orders订单表的划分原则。
我来说两句