00:00
我们通过买cat和my circleql的主从复制搭起了读写分离,呃,实现了咱们my circleql的高可用性。首先咱们搭起了一主一从这种模式,呃,一台主机一台从机,呃,主机主要负责买K发过来的写请求,而从机主要负责买cat发过来的什么毒请求,呃,进而把毒请求跟写请求分开来处理。呃再往后咱们又搭起了什么呢?呃,双主双重这种模式,双主双重这种模式啊,两台什么呢?哎,Master主机啊,M1M2和两台从机S1S2啊,它的特点就是什么?诶,但凡我诶M1啊,咱们的协助机也挂了,这个时候由它的背机M2切换上线啊,我M1恢复以后继续作为什么呢?我M2的背机存在,这样可以保证什么呢?买cat诶实现的买。
01:00
克扣的高可用性好啊,咱们把高可用性研究完成之后,咱们得再去看看另外的问题,首先各位,我这个数据库里面数据是有瓶颈的啊,但凡我很多表啊,比如说达到什么千万级啊,这种存储情况啊,我的数据库里面整个的查询效率就非常低了,那怎么办啊,咱们之前是不是学过诶,用什么方式垂直拆分分库操作啊它的诶构思就是把一个数据库啊,有很多表,把这些不同的表给分开,分到不同的什么呢?主机上啊,这样分成多个库,这样可以保证什么呢?我买SQL数据库去查询的一个高效性啊,我把什么的查询压力分摊到多台主机上啊,这样也可以什么呢?达到负载均衡啊,如下图,咱们可以看一下咱们的Java应用服务啊,这块呢,访问咱们的单个的数据库,所有压力全压在这个单个数据库上,那咱们怎么。
02:00
去环节,咱们可以根据业务把它的表进行一下拆分,拆分成多个数据库,比如说诶,用户相关的表我放在用户系统库里面,而订单相关的表我放在订单系统库里面啊支付相关的数据我放在什么呢?支付相关的数据库里面,这样诶我应用程序去访问数据的时候,直接去访问它对应的数据库就可以了,那现在有个问题,如果这块啊,咱们应Java应用程序直接连数据库,就有一个问题,咱们需要什么呢配诶三个或者多个数据源,但凡哪个数据库有问题,各位这块是不是还得进行一个什么诶一个修改,还有就是咱们访问的时候,你查询的语句是不是也得判断啊,我到底是查用户的信息啊,还是查订单信息啊,还是查支付的信息这样,诶这块咱们的Java应用程序啊更麻烦,而且跟咱们数据库强耦合在一块了,这块用谁啊,咱们说了买cut的作用就是什么,是不是就是JA。
03:00
画程序跟他的什么后台数据库,诶解耦的操作,也就是咱们中间键数据库中间键的作用好,那这块呢,那咱们先研究一下怎么划分表啊,咱们诶看一下我给各位啊举个例子,首先啊,我这个。电商系统里面肯定有什么,是不是客户表啊,啊各位我先提个问题啊,这块客户跟用户有什么区别啊,哪个更重要啊,有同学说是用户重要啊,有同学说客户重要,那到底哪个重要?哎,咱们分析一下,诶用户是什么?用户是我,诶咱们就举接电商平台,用户是我这个电商平台在上面注册了的,诶相应的什么呢?诶用户啊这些,诶上网的人员就是咱们的用户信息,而客户跟用户有区别吗?当然有客户什么意思,是在我电商平台真正花了钱的就叫客户啊,所以啊,这块呢,咱们,呃市场部啊,咱们的什么呢?呃,运营人员啊,这块主要的目标就是啊这块啊烧一些钱啊,办各种各样的活动,想方设法的把用户转化成客户,所以对于咱们电商平台来说,客户是最重要的,那这块的客户表咱们可以看到啊。
04:17
这面这张表啊,里面咱们预定的条件已经有20万数据了,我这个平台已经有20万的客户,再往后看我的订单表啊,已经有什么,是不是600万数据,各位是不是已经什么,诶快到咱们的瓶颈了,那这块呢,查询效率会非常非常低,那这块呢,咱们就得考虑什么呢?诶进行优化了,再往后啊还有什么订单详情表,哎跟咱们订单表一样,也是600万,哎为什么呀?啊为什么订单详情表跟我的订单表是一样的啊相信各位啊,咱们在电商平台上买过东西的同学应该都知道,诶我这块点选什么呢?诶点选咱们的产品去购买,然后呢,生成订单之后,每回你登录什么的网站,你能看到什么订单的,诶简略信息,你想看更详细的信息,你是不是得点进去啊啊,所以在数据后台数据库里面,订单表跟订单详情表一定是一一对应的啊,有一个订单表肯定有。
05:17
它对应的订单详情表啊,所以这块都是600万啊,已经都是快快到瓶颈了,查询会非常的慢,好那再往后啊,这块还有一张表叫订单状态字典表,字典表干什么用的?诶,咱们订单表,订单详情表会存着什么相应的状态,这些状态信息都是编码,咱们得通过字典表翻译成具体的中文含义啊,这就是咱们字典表所做,呃,它的用处是什么?说白了就是什么,是不是跟咱们字典一样,根据相应的ID我去查,哎,具体的含义啊,啊,这就是字典表啊,这数量不多,只有20条,好,那各位这块呢,问题来了,总共四张表,哎,我应该怎么去拆分?
06:03
啊,这块呢,哎,我怎么去把它分一下库啊,这块各位得需要咱们去动脑想想了啊,这块怎么个划分方法,咱们看一眼。这块呢,哎,我有一个什么呢?大的数据库,这个数据库里面咱们刚看了有客户表,然后还有什么呢?哎,咱们的订单表还有什么呢?哎,跟他相关的订单详情表还有什么呢?哎。跟它相关的字典表,那怎么去做一个什么垂直拆分分库的操作,那这块呢,分库的原则是什么?各位在咱们分库之前,我想要问一下啊,两个数据库在分别,哎,在两台机器上,一个A一个B,两个数据库里面的哎,表会不会进行什么呢?能不能进行join关联查询。
07:03
可不可以?啊,有同学说可以啊,这这块我得说一下,两个数据库如果在同一台主机啊,同一台机器上,哎,你是可以做什么呢?关联查询的,这是可以的,但是如果说两台什么呢?两个数据库分别在两台主机上,一个诶一台机器,呃,另外一台机器两个机器,各位切记是不能做桌引关联查询的,那言下之意,哎,我要做什么呢?诶垂直拆分分库操作分出来的表得跟什么呢?别的表是没有关联关系的,各位啊,这么一说应该很清楚了吧,怎么做拆分是把我客户表分出去啊啊咱们的客户表哎,单独放在一个库,而咱们的什么订单表,订单详情表,字典表要放到另外一个库啊,这样进行什么呢?数据一个拆分,咱们水平拆分分库操作就这么去制定就可以啊,这就是啊,咱们分库的一个原则,切记啊,这个但凡分开的表是不能。
08:06
进行着硬关联的啊,有同学说,老师啊,你这么分啊,是不是有点不太合理啊,我这订单表啊,这么多数据,而我客户表就一张表这样分啊,这块对我这个数据库的压力环节也没有太大作用啊各位这只是举例子啊,我客户表跟它相关联的还有很多的,呃,相应的表,比如说客户表,还有什么客户详情表啊,客户的,呃,这个状态表,客户的VIP等级表,客户的积分表啊,一堆一堆跟客户相关的表,我都要拆到一个新库里面,说白了是跟客户诶,围绕客户相关的所有关联表都要迁过去,而跟订单相关联的所有表要签到另外一个库啊,这样做什么呢?咱们分库操作,分别放在两个不同的主机上,这样呢?诶对于什么呢?每个机器来说,它的什么呢?哎,这个数据量并没有那么大啊,这块呢,查询效率也会更高,然后呢,诶中。
09:06
间再放上咱们的什么数据库,中间键咱们的my cat,再放上咱们的买CA,然后呢,诶这块呢,Java程序我也不需要管那么多啊,到底分几个库,哪些表哪些哪个库都不需要去了解,我只需要去连上咱们的数据库,中间键买cat,然后呢,我去查询,然后由my cat再去什么呢,访问不同的数据库啊,这就实现咱们的什么呢,真正的分库操作,各位这一块一定要能理解咱们的分库到底是诶怎么一个选择,怎么一个原则。
我来说两句