00:03
行呃。大家进来的同学签一下到啊啊。后面我们拿那个证书,结业证书的话,一个是要签到,第二个呢,就是后面有一个结业考试,所以大家呢。进来的同学啊,点那个。呃,进到这个直播间啊,在左上角有一个签到啊,大家点一下,然后填一下信息。我们八点钟正式开始啊,20点正式开始。大家如果您看到我的桌面,并且啊听到声音的话,在直播间回个666啊,这样我看看这个我这个环境有没有问题啊。啊,大家帮忙回个666啊。OK,我看有些同学可以啊,看到666啊。
01:08
OK。好的,我看挺多同学回啊回了,说明这个声音也没问题,我把窗户关上。啊,会议号呃,这个大家直接点那个直播间地址就可以了,就可以进去了啊,没有会议号,大家就点那个上面直播地地址啊,点进去啊,那手机也可以看,这个电脑端也可以看。
02:13
好,那签完到的同学呢,可以进到这个啊,我们的这个直播间啊,那马上我们要开始了。然后我们在这个直播啊,这个一个半小时呢,我们有啊三次抽奖机会啊。有小企鹅啊,有这个TC的培训的这个代金券啊,就是无名槛的啊,还有一个是CSDN的这个程序员杂志啊,所以大家呢,要坚持啊,坚持下去啊。感谢啊,感谢这个。文化啊,这东西啊,送的这个。讲话。OK。好,还有两分钟啊,我们马上开始。
03:11
啊,我们在开始之前,我问一下大家这个里面有没有呃。不是搞it的,或者说。有没有不是学数据库的?可能大家这三个区可以多啊。交流一下。啊,那么我在如果在讲的时候呢,这个大家如果说有问题的话,可以在直播间留言啊,然后我统一会给大家去解答啊,那这抽奖机会啊,抽奖的时候呢,我看到这个我我统一给大家解答。啊,没有学过是吧,好的,那你今天过来听的话,这个啊非常幸运啊,我会讲非常多的干货啊,直击核心啊,就是让大家真正理解啊,真正的什么叫DBA啊,然后怎么样去学这个数据库啊。
04:01
怎么样去去最终是吧,我做个五年或者或者多少长时间是吧,可以达到百万年薪啊,这个DBA的这样一个岗位。OK,呃,签到是吧,签到在那个界面的左上角啊,右上角右上角有个签到,就是那个我们标题上面。这个界面上。OK。OK啊,我们。啊,我们开始啊,我看这个,呃,大家这个界面的进场吧,这个界面进场,那我们就开始吧,OK,好。大家晚上好啊,非常高兴啊呃,这次能给大家去讲这个TTC口啊,也同时也欢迎大家去参加这个次的这个腾讯营啊,数据库TTCQ的训练营啊,那今天呢,我给大家讲的是这个马SQ的体系架构啊,那很多同学肯定会很奇怪,我们讲TTCQ为什么讲马SQ啊,那这个呢是TTC跟啊这个马呢有非常啊密切的关系啊,那我们先呢来讲一下这个。
05:01
这个马S体系结构啊,因为在所有的数据库里面,它的体系结构啊是必学的一门也是一门啊一门这个啊必须要了解的好,那在讲这个之前呢,我先做一个简单的呃自我介绍啊,我叫郭一军啊呃从业这个20年的it老兵啊,那么一直是做数据库啊,从呃奥AC库数据库到马Q数据库,到现在的国产分布的数据库TCQ啊,那么从。电信行业到呃。电商行业,以及到那个传统的这个制造业啊,这样一个啊,各种行业背景,那么现在呢,主要专注于这个TTC的这个,呃,交付培训啊,服务于这个金融级的啊客户啊,现在做了这个,呃,TOP20的这个。银行客户的60%的这种培训,TCQ当然也做了很多的,这个人的培训也比较多啊,这是我一个。基本的个人介绍啊。OK,那么我们来看啊,我们今天晚上给大家去了解什么东西呢?第一个呢,我会给大家讲讲这个数据库的通识啊,这样呢,呃,让大家呢,就是哪怕你没有学过it,或者没有学过数据库的同学,也能理解什么是数据库啊,有这么一个背景啊。
06:14
那为什么我要去学数据库是吧,数据库他从什么地方去入门,或者说我怎么样,以后我要做这个职业是吧,我要干这这一块那。那接下来会给大家去讲这个,我们今天晚上的核心就是马赛克体系架构,我分为四个拈块去给大家讲,当然内容比较多,然后呢,难度也比较高,如果我在讲的时候你听不懂啊,我觉得如果你不是干嘛刚数据库的听不懂很正常,如果你是啊。干数据库的,你听不太懂的话,那说明呢,你对数据库这个今天的tba呢,还差一些距离啊,这是我今天晚上的这个内容。那首先呢,我们来看这个数据库的通识啊,我现在讲这个之前,我来看一幅图啊,那这个图里面就是如果你进这个一线啊大厂的话,比如说我去鹅厂啊,我要去腾讯,我要去鹅厂,那么你可能需要掌握这样一些技能,比如说今天晚上我们要讲这个马数据库对吧,就数据库就是啊这一个技术,那整个架构里面啊,我们怎么去理解马CQ它的这个数据库的产品啊,那么怎么一个部署形态啊,那这些架构在这个里面常用,在用的哪些技术高可用是吧?等等啊这样的技术那。
07:24
当然这个很多同学可能在这个数据库层面理解,哎,我只会马我就行吗?啊,其实不然,因为你数据库要达到一个高度的话,可能要学啊更多的东西啊,比如说我要要让我马赛克跑得更快,那我们可能还要什么呢,用这个。缓存就是要把我们磁盘的数据大量的缓存到我们的这个啊,这个这个内存里面就用read啊,或者member catch,所以呢,你可能还要对这一块呢,也有一定的这个,呃呃会用或者理解它是吧?啊那呃在我们这个特别是互联网这样的场景上面啊,那可能这个数据量非常非常大,那可能在马Q里面放不下,或者放起来比较麻烦,那可能很多人比较喜欢用这个什么no CQ Mo DB啊,就是no no CQ里面排名第一的。
08:09
那这样的一些啊,这样架构,那我们怎么去部署,或者说它需要采用的哪些技术来实现这个芒GODB啊,既可以实现高性能啊,高可用稳定性,对吧,怎么去部署这个呢?其实作为一个DBA呢,它其实这个常规的都要会。啊,这是这么三,前面三个,那大家可能做数据库时间比较长的,可能大家可能会Le数据库是吧,那orle数据库一般用在这个啊,非常重要的啊,这个业务,比如说像银行的核心系统,账务系统啊,银行交易系统啊,那么我们用Oracle,像我们以前这个啊,核心的我们用Oracle是吧,那Oracle你怎么去部署啊,怎样这个高可能的架构,然后怎么样去实现读写分离。啊,这些你肯定要会。是吧,那当然这个除了刚才我们讲的啊,我们采用的一些数据库啊,关系数据库,No CQ啊这种,还有我们可能会呃,要了解了解,或者我们可能会用到啊这个EK啊,Search啊,那这个呢,可能要做监控啊,叭如说做一些这个整个集团的这个啊,基础设施的监控啊,对服务器啊,日志的收集啊,交换机等等的,可能会用这个比较方便一可的啊还有呢,就是我们会用到大数据里面的h base,它也是一款数据库啊,类似于NOC库这样的数据库啊,可以水平就是这个分分片这种彩缝的。
09:24
啊,做这个用用在这个金融里面的风控系统用的很多啊,前端用ma DB,后端用h base啊,这个是一套这样一个架构,当然我们这么多系统,比如说上万台机器,那我们怎么去实现自动化,我们需要一套这个工具啊,这个呢,就是站在一个你去互联网肯定需要很多的技能,除了马Q你还有其他一些技能,当然这个今天呢,我们主要是谈这个马西克数据库啊,那讲到这里可能还有很多东也很懵,说诶这个道理我讲听这个还听不懂啊,那我们来看一下。数据库呢,在全球现在有这个400多种,国内呢就有200多种数据库啊,那我们也看到这个TTC数据库,也就腾讯鹅产的这个分布式数据库是吧,现在非常流行在金融行业啊。
10:05
在银行啊,就是。TOP20的银行的60%啊,都用了T数据库,那TT跟马Q有啥关系呢,对吧,今天我们要叫马S,而且我们这个呃。他们之间啊,啊是啊。非常关联非常非常密切的,它是做这个底底层的一个存储用的啊,那大家可能呃理解数据库,其实数据库说白了很简单,就是存储数据用的,就是我把数据放到数据库里面啊,做存储用的。那么这么多数据库,如果说你都要学会的话,那是啊,难度还是比较大的,所以我们一定要掌握一种这个,呃,什么什么呢,就以不变应万变,就是一定要把它这个理论,它的基础啊,百年不变的这种理论啊给学清楚,什么叫百年不变的理论,就是说我们很多人学数据库啊,可能你400多种数据库啊,或者国内有200多种,你每一种啊,你学半年或者一年的话都,你如果200多种的话,你每每种数据库学半年的话,100年是吧,学不完了对吧,所以我们这个时候要掌握学习这个数据库的方法,所以呢,我们经常会用到什么道法术。
11:07
啊,道法术,什么叫道法术呢?就是学习的最高境界,就要掌握这个数据库的规律啊。那到底什么是规律呢?数据库最核心的,比如说怎么去理解这个事物的数据库的事物,怎么去理解数据库的锁,怎么去理解数据库的共享内存,以及它的一些啊内核进程。然后他数据是怎么写的是吧,日志是怎么样去做啊,怎么样去啊,这个一个数据写进去,提交完之后,日志怎么进日志的等等啊这样的核心的啊,那所谓的这个很多人肯定是用的这个数据说哎我要会操纵数据库,哎我用命令是吧,那这个是最初级的。有了这个数据之后呢,那通过各种场景公司的各种啊场景的这个呃,去去工作当中去用的时候呢,不断的去总结你的方法成为一个啊有一种方法是吧,规律方法,那最后呢,我觉得还是要本质上去理解数据库,所以这个时候如果你把数据库试透了之后,你不管多少数据库,你来一个数据库两天就会了,而且可以达到中级以上是吧,这个就是啊,我们要理解这个数据库很多,不用怕啊,不用怕,那么这么多数据库,那讲到这里可能很多很多人还是不理解,那我们来看一下数据库的发展历史,那首先上数据库,它从这个1950年就开始有了,那那那时候数据库都放在这个大型机啊,大型机其实我也没没用过,它用在国防或者科科学研究里面啊,叫层次啊,层次数据库官网传这个呢,可能很多同学在学那个大学里面学那个计算机的时候,可能就了解了,这这个是吧,但是大家可能都没用过,那在1970年呢啊,这个时候因为大型机太贵了,一般除了银行能买得起,一般这个客户是买不起这个大型机的。
12:40
那这个小型机呢,这个嗯,还是以前有比较多的用户在用的,比如说我之前啊,那时候我啊也用了这个,在这个工作当中啊,也接触很多小型机啊,小型机一般有三大类,一类是这个IBM的IBM的。IBM是具体公式是IBM的这个LX啊。
13:00
还有呢,是这个惠普的啊unix。啊,惠普的unix,还有现在这个公司已经早就被那个奥克收购了,上公司的solid,因为这个这这个你可以理解,这三种操作系统大家可能都没见过啊是吧,大家可能比较年轻的啊,可能这个年纪比较大的啊,DBA肯定可以用的很多的吧,这三款这个小型机啊,对应的厂商以及对应的操作系统,那这个呢,数据库像奥lele数据库啊,像这个基本上奥Le数据库会装到这这样的一些,这个小型机里面,包括IBM的DB two啊,这些都属于这个金融级的,所以叫关系型数据库。啊,那随着这个1990年那个互联网的,呃,这个呃,随着这个啊,我们的这个企业信息化啊,企业信息化呢,那这个时候这个小型机太贵了,因为一台小型机可能要几十万啊,30万或者50万或者百,呃这个看配置是吧,基本上都几十万,那这个对企业来说是买不起的,一般都是这个银行或者其他的比较大型的商业是吧,处理啊所以呢,这个PC机啊,叉八六起来之后呢,那这个呢,可能这个啊就会这个,因为PC机毕竟比较便宜是吧,像现在PC机高端的这个比较配置比较高的,10万啊或者7万或者5万就很好了啊那这样的,那这个呢,就是在1990年之后啊,那这就兴起了一些数据仓库啊,环境数据仓库啊这种。
14:15
啊,这个库,那么随着互联网的兴起,在2000年的时候呢,有互联网是吧,各种啊什么BAT啊,什么是一九,呃,2000年时候是吧,1999年98年啊2000年这个这个时候。那这个时候互联网新息的网,大量的PC机是吧,这个时候可能我用商业版的这个啊,数据库像奥acle这种都很贵是吧,那有没有开源的呢?啊用开源的数据库啊,现在我今天要讲的马Q是吧,还有其他的po啊,还有其他一些noq,那这个用在是像媒体啊,搜索社区啊,那这个因为我们都要把这些数据存储起来是吧,数据库两千亿的时候。那随着这个,呃,移动库里网啊。这个升起,那数据量肯定更大,然后啊加上云计算是吧,那我可能架构放在这个云端的,那为什么现在比较流行这个云端这个数据库呢?相当于就这个数据库啊,它这个因为数据库它这个业务量大,要支撑这么些的话,它这个需要的服务器更多,那能不能在这种场景下面,我的这个呃,服务器底层的这个这个资源里面弹性的伸缩啊,比如说像游戏是吧,我今天这个啊用户量很大,我就可以底层弹性的伸缩,那用云的技术啊就比较好了,所以未来的数据库一定是云原生加这个啊,分布式数据库这是它的一个啊。
15:25
趋势啊,所以大家呢,学T后面就可以了解什么叫分布式数据库啊,用的这样的场景,像TT就放在这个。云端数据库,像亚马逊的rds啊,这个这个罗拉啊,好,这是这个数据库一个简单的一个发展史,大家有这么一个理解是吧,它用在这些系统里面啊,大家就啊,所有的系统应用都是需要用的数据库的啊。那么再进一步的去理解说,哎,那我为什么要用数据库呢?为什么要用数据库,我我刚才讲了,数据库它主要最主要的核心就是存储数据。是吧,那我数据库能不能存在Windows里面,我直接存在文件里面可不可以好,那如果说存在Windows文件里面,那文件里面会有这样一些问题啊,什么问题呢?就说哎数据可能会不一致,什么叫不一致啊,大家我举个例子,比如说我我在微信里面,我转你一笔钱,比如说转你1000块钱那。
16:15
我要实现就是我的账户一定要减去1000,并且你的账户一定要加1000,那这个当中万一网络断了,或者服务器挂了,我中间这个数据不一致了就是。啊,就是说我转的这个钱我转出去了,但是你那个钱没收到你的,你你的那个账户所在银行的服务器挂了,这个是账户就不平衡了,这是有问题的,那放在稳件里面,很可能会出现这样的问题,那这样的话,这种问题会啊,你如果说钱的问题,这个丢了,那这个是大大事情啊是吧,所以呢,这个文件呢,实现不了这些啊,很难实现,包括很多的这个啊性能方面啊,那他也做不了并发,然后这个对安全就放在文件里面,我直接打开文件就可就看到了,是吧,也很容易损坏掉,不完整等等,还包括保证不了原子性,就刚才我讲的,我转账,我要把一笔钱转给你两个账户,要同时一个加,一个减,那这两笔要同时完成,要么全部成功,要么全部失败,所以数据库啊,就能实现这些功能啊,特别啊,它的这个里面是吧,保证它数据的一致性啊整个。
17:07
操作是吧,整个的我这个转账过程,我整个是原始性的,就是我要么全部成功,要么全部失败,就是转账,你要么你一个账一个账户转失败了,我要么全部把它回滚掉是吧,不要让成功,这个就是它非常重要的这个场景,所以我们一般这种场景,我们说数据库它有一个非常重要一个的事物的特性。啊,事物特性里面有个属性叫a cid啊,原子性,一致性,隔离性和持久性啊这是我们简单理解一下,那数据库整个架构啊,就是诶如果数据库你理解就是一个应用程序是吧,只是呢,这个应用程序呢,它实际这个数据的存储啊,那我们说诶我的应用层我要去啊查询数据是吧,我要去更新数据,我我往银行里面查啊去存存钱是吧,那这个数那我账户就变更新了,我去查我的账户多少钱是吧,那这些呢,都要找到对,最后找到我对应的啊数据库程序是吧?数据库程序那整个啊,你操作过程当中,你的账户变更了啊,你比如你往里面存钱,往里面转账,那整个过程呢,我们把它叫这个数来控制整个过程,保证他这个操作是一个a cid的这样一个属性啊,原子性,要么全部成功,要么全部失败,而且要保证这个数据的一致性是吧,一致性。
18:15
啊。这是它的一个,大家了解一下它的这个这个产品整个的一个最初的一个模型啊,那其实Oracle也好,马也好,Po也好等等其他数据库啊,那都是这样一个啊架构啊,我们把这个种数据库叫DBMS的DBMS啊啊那这个呢,就是啊一个一套业务系统是吧,那我们用户,比如说我们用户通过手机端或者用户是吧,我们去访问我的应用程序,比如今天我打开微信是吧,访问程序,这个程序呢,它要调数据库,那首机上程序这边启用个中间键,比如说啊接bos或者这个他们cat是吧?啊其他的微博service啊等等,那下来之后,那最终呢,我要访问下来的话,我要找数据库这里,数据库在这个位置啊,数据库管理系统在这个地方。
19:00
啊,那数据库下面就是操作系统,就是我们的我们的Windows,我们的Linux啊,那之下呢,就是我们的服务器啊,这么一个架构,这个整套列入下来之后,就是我们整个系统,整个我们应用系统啊。啊,所以我们可以看到我们数据库啊,处在这个操作系统之上啊,中间界之上这么一个,所以它的核心位置非常非常重要啊,非常重要,所以呢,有我这一般来说由我们的公司的DBA来维护这个数据库,那上面的是我们的开发里面,一般一个大公司啊,DBA啊,跟开发里面的比例是1 : 200,也就是说公司里面有200个开发,一般是要招一个DBA,这个呢,我啊为什么我知道比较多呢,像BAT里面这个确实都是这样,大概这样子,包括我自己,我的公司啊,我们30个DBA啊,30个DBA,基本上啊,六七千的开发啊那。这样的一个这样的一个人,说明这个DBA是还是比较呃。比这个应用人员啊,就开发人员要要少很多啊,所以比较稀缺啊,让他的压力会比较大,因为所有只要数据库挂了,那我业务系统就不能访问了啊,所以呢,一般来说DBA的薪水比开发人员是一比啊1.5倍,也就是说啊,开发人员拿1万块钱,那DBA呢就是一万五啊这个呢,就是我对这个整个行业我比较清楚啊,因为干了20年数据库,那所以呢,这个为什么很多人要去去啊学习这个啊数据库是吧?啊其实数据库因为我之前一直啊,现在一直上班,但是我一直啊这个兼职的培训,现在已经啊有上万学生是吧,所以这个我知道很多人学了很多,但是他工资特别高,就是因为他给自己不断的去投入学习,给自己大脑投资啊啊,然后发现诶这个我工资越来越高是吧,现在像我知道的像TT这个这种基本上你要非常优秀,特别牛逼的,那百万肯定是有的啊OK,那我们来看一下啊讲刚才扯的太多了,我们来回我们也也规定讲我们来看那刚才讲的一些数据库的常啊常规的,那我们看。
20:51
马赛克数据库,它也是其中一个数据库,那么大家可以百度一下,去搜一下DBNG,去搜一下DBNGDB引擎,我们可以看到所有的数据库里面,排前四个的,第一个是Oracle,第二个是马数据库,大家可以查。
21:08
马克一直是排全球第二。因为马SQL数据库,它是个开源的数据库啊,然后很多开发者啊都是。选一般选这个马这克是啊,特别是互联网的信息是吧,马这克这本,那么这个。他这个整个的发展,他的历史啊,从1979年啊就有啊这一款数据库的最原始啊是这个mon这个人啊mon这个他现在开发了这个马赛克的分支叫啊me DB,那最开始他啊写了一款这个,他这个其实也不算数据库啊,用C开发的啊这样一个呃。报表存储啊,相当于就是你exl表格,原来我数据放在XL表格里面,可能这个使用起来不是特别那个是吧,那这个这么早的话,可能那时候office没有是吧,那我要放到这么一个报表里面去是吧,统计一下数据放到这个这个报表里面,那这样去用的话,其实也呃也不是特别好用,相当于我要程序去调用它啊,那么在1985年的时候呢,这个DA瑞的它这个呃,请尼亚家公司啊,就是马S的前AB公司的一个前身啊,它有一款引擎叫SM啊这个引擎,那这个引擎这个,然后这个是最初最初的马的这个原型。
22:20
啊,那么实际上马赛真正发布的时候在1996年啊,一点年的版本给你发布啊,实现了这个数据的一个经商查,就是数据我可以写到数据库,我可以查询的这样的功能啊,那其实这个也比较简单,也没有事物就没有这个原则性,就将来做的这个金融里没有我做交呃。呃,这个这个交易这种是没法做的,因为他没有事物的特性啊,所以呢,在1999年到2000年的时候呢,这个实现了这个啊,事物的处理啊,事物的处理啊,这是开始支持事物的处理,只是用了这个啊,就这样一个这个啊就叫这个DB啊。DB,那在2000年啊这个呃。
23:00
是这个这个,呃,开始这个什么公布自己的源代码了,因为开源,所以你可以下载他源代码,然后这个命名为的马SM,这个用了很久了,这个从2000年之后一直用到这个,现在用8.0是吧,8.0是在20062016年开始的,那8.0啊是废弃了这个马SM马M,那就个是,所以马赛克的默认的引擎一直在用的啊,那这个有什么一些缺点是吧?这个后面大家随着学习就知道么,什么叫马SM。因为马赛认为它不支持事物,就没法做这种交易的,就金融交易的这种,那所以在2001年的时候呢,啊加入了这印6DB啊,印6DB是我们重中之重,也就是说大家一般说印6DB就是说马S,因为马底层有很多引擎,呃,那么马啊,它随着2001年之后呢,有了1DB这样一个支撑呢,那它有啊非常强大的事务点,各种特性啊,那这个啊,确实这个也比较好用啊,那马西克呢啊,在2008年被上公司收购了,上公司是一家做啊这个这个服务器啊,这种啊这种它的小机啊,这对应的solid这样的操作系统也是比较牛逼的家公司收购了,收购了之后呢。
24:03
那么啊,奥利克公司就甲骨文公司啊,最后呢,把上公司也收购掉了啊,这样的话呢,马西克呢,也归到奥Le克公司,甲骨文公司去了啊这个2009年啊,那这样的话,那个随着2009年之后啊,这个马这个这个这个来用的人越来越多,越来越多了,为什么呢?因为Oracle收购了之后,Oracle是数据库计的老大是吧,全球60%的业务都是把归这个Oracle大家也听过啊,前几天这个俄罗斯是吧,被制裁了之后呢,啊,他要把他那个Oracle停掉是吧,那整个这个没法交易了,银行是吧,那这个就麻烦了,这个整个金融没法交易,这个数据库就整个这个业务就开,呃,没法做了。所以奥克斯还是很牛逼的一个公司,那么这个,所以奥AC克收购之后呢,2010年是吧,马赛发布了5.0那五五点五的话是这个用了啊,还是比较多的,包括我们之前这个也老的版本,5.5是用了很多,这个呢就大量的使用了啊,大量使这个比较稳定了,奥一零年所以奥利回大收购之后,很多社区也好开源的,他跟着奥Le克去对标啊,然后在2013年就啊发布了5.6啊,5.6就用的更多了,因为5.6 : 5.5的话肯定功能更多,包括2015年就5.7的版本,5.7那里肯定多元同步啊等等各种多线点并发这啊功能更强,所以说主流是5.7,现在啊大部分5.7,那随着2016年的话,8.0啊,现在呢,他肯定大家上新的系统都是上8.0的项目啊,这么一个历程啊。
25:24
啊,这是这个了解一下马赛克数据库的一个整个的历史,所以说它的历史业绩非常非常强,而且一直排在这个全球第二啊,实际上你可以看到它的一个第二这个这个这从个分数啊,是靠这个分数来看的话,它比看阳事故系列比较火的这个帕斯格多出一倍的这个啊这个分数啊是吧,所以他还是很牛逼的,很多互联网在用这个数据库,那么很多同学说,诶,那我数据库,我今天我我是个啊,我是个大学刚毕业的,还没毕业,或者说我不是刚去的,我想转型,这个能不能,可不可以O不OK,我觉得是OK的,因为什么呢?我发现很多同学可能不是干it的,最后他去搞数据库啊,他搞得很好,因为他发现这个不会,他不断的去带迭代,去学习,所以我们学习数据库啊,他这个马思Q有两条路线,一条是这个开发路线,开发路线开发比较简单一些,就是比如表设计啊等等这样一些功能,那还有一款呢,是什么呢?是这个。
26:12
运维运维管理dministry,所以我们首先要你要入门这个马克,你说一个这个基础,基础一般就是你会安装安装,我明天晚上会非常详细的告诉怎么去安装,包括各种什么打包啊,源码编译啊,我会非常非常详细的操作一遍,今天是不操作了,那安装安装会了之后呢,通过简单的CQ语句去查询数据库啊。修改数库就可以了,这就最基本的,有了这个之后,那我要去管理这个数据库,那这个数据库怎么接账户啊,然后这个数据库里面安全怎么做啊是吧,怎么监控啊是吧?对它的性能是这个里面监控的,包括这个高可用是吧,我里面搭一个主从复制啊等等啊,这个管理这个还是比较多的,那这个是说在这个。中级水平,如果你要更深入的话,那你要优化,对这个优化和d performance这样一个优化,然后现在非在流行,比如说我们分布数据库,那马马class是吧,他最早的话推NDBNDB这样一个可以做分库分表啊,而且做数据的组成同步的啊,自动的自动化了,那这个呢,这个技术呢,很多人都不会啊,所以这个也推广出来,这个只有原来人才才比较了解这个东西,那他现主推这个M5D5.7之后啊,可以主推MGRR啊,主复制啊,现在他推这一款啊,MGRR加root路由啊,申请这个马class啊,就是大家可以看官网。
27:36
啊,这个就是好好OK,那好,那么我们呃,讲到这里的话呢,大家呢,就是呃呃先来一波抽奖啊,那大家看一下这个呃。我为大家来个抽奖。好,那这里呢,大家可以看啊,就是。大家可以扫这个码,我把这个码放大一点啊,大家可以扫这个码。
28:04
啊,这一波抽奖的话是什么呢?是送一个这个什么这个白色的啊,送一个白色的这个啊,这个这个公仔啊,这个还是挺可爱的啊,大家可以这个扫这个码,然后我们啊赶紧扫吧。来说这个码。啊。有三份啊,三份,这是我们第一个奖品啊,大家。好,我看刚才我讲的时候再看有没有,呃,这个。啊,不要。嗯,啊。嗯。对,T这个是个分布式数据库啊,我们后面会详细讲啊,后面会详细讲啊,我们整有一个系列,包括下周一会给大家讲分布式的整个架构,它底层的逻辑是这样子,它整个架构用了哪些技术,分布式什么叫分布式啊,这个我会非常详细的给大家去讲。我看一下有哪些问题。好的。
29:02
在在线的同学啊,可以去点一下那个啊,TD是分布式对。对,这个数据库还是薪酬还是很高的啊,就是干一年,所以很多同学找我培训就是啊,这个这个找我给他这个职业规划,然后有些同学知道方向之后,那其实还是很快的啊,所以关键是我们要找到方向,方向比努力还重要啊,所以你如果没人指指点的话,你这个就很难提升你找到一个高度啊,所以一定要找好一个,找到一个一个一个环境,然后呢,有一个方向啊,那这个还是很不错的。太快了,怎么今天这么快,啥意思啊,没有好这个好了之后我们继续啊,啊不,我这个PPT很多啊,可能这个还没讲完了,讲了这个1/3不到。啊,那抽奖完之后呢,我们继续啊,后面还有讲,那么只是说我我们有了这个马赛基础之后,我们后续的可以去学习这个TTC,整个因为T你需要有这个马SQ的基础啊,因为跟马SQ有非常重要的关联啊,这个后面会讲,所以呢,我们先啊今天来讲这个预修课里面啊,马S数据库的一些基础啊,然后明天会讲安装啊,然后后续再学的话,就要学马这个TC的入门级的啊,对整个架构啊,然后这个这个去那个,然后如果说再学的话去啊一些这个交付的一些运维工作以及专家级的啊。
30:22
优化和这个排过啊,这样的一个体系啊,这是这个啊这个啊。么的数据库的一个通史啊,大家有这个了解就好了,OK,好,我们进入到我们今天的这个,呃核心啊,当然我在讲,如果说你听不懂的话,那说明什么呢?说明你可能要学习了啊,如果你听得懂的话,还是呃,知道一点的话,那说明你已经啊,已经进入这个啊,入了入了这个马赛克啊,这个卡了啊,我们首先来看一下。就是一款数据库啊,不管任何的产品,我们首先啊,一定要把这个产品的整个架构啊,要搞清楚,它的各个架构模块之间的管理,以及它作用是什么样子,要搞清楚,那我们来看一下嘛,我刚才讲的数据库本身就是一个存储系统,所以我们可以看到数据库里面。
31:07
最核心的就是它的存储。啊,这叫存储引擎,在MYSQ里面叫存储引擎,在Oracle里面叫表是吧,那存储引擎,存储引擎你的理解就理解为操作系统的文件。比如说这个。啊,Linux里面的啊,EXT4啊,Windowx里面的NFS啊,或者我们Windows操作系统的文件的格式是吧,那真正这个文件是存在底层服务器里面是吧?一块盘里面啊,盘我们有啊,这个SD盘啊,或者萨塔盘,SS盘是吧?啊那对于我们来讲的话,我们操作系统里面看到的是一个一个文件啊,文件也包括日志文件和日志是吧?这种方式来存储的,就是它底座是存储数据,所以数据库一定是存了。那数据库我把它存在之后,我后面要用它,我要去查是吧,怎么办?那它中间呢,有一层,这个处理这个数据的一层啊,我们叫服务层,叫服务层层。
32:04
啊,叫服务层。啊,那服务层最早期的数据库,它很多数据库是没有服务层的,没有服务层我我把数据存进去了,怎么存,它通过应用去去调那个key。Value这样的一个模式,比如说我一个应用情绪是吧,然后去调,哎我去写,那我就key来写进去,比如说我要写一个人的一个信息的话,我把它key,身份证,身份证写进去之后,然后把它value value,比如说他的名字,他的name,他的engine的年龄,他的家庭地址,这个这个中文字,那key就是唯一的一个一条一一个识别识别号是吧,那这种方式呢,就早期的数据库是这么存的,那这样的话太不方便了,如果我是人的话,我我去查的话,这样这样通过这个这样的方式,那太麻烦了,那怎么办呢?我能不能写一种很规则的这个S语句呢,SQL呢,啊,那通过SSQL呢就能实现,所以这一层呢,它其实是SS层的一种啊S的这个接入解析优化,然后啊这样的一个。功能。
33:00
啊,那么这些功能的话,我通过应用层,我我去调这个设备层,我需要一个接入层是吧?我有个接入层,接入层就是我接进去之后,我要去访问这个底层的存储的话,那我先接进去,那接进去肯定要判断一系列的接入,你全限购行不行是吧?那有没有这个,呃,能不能访问到。啊,那我过来的话有没有资源对吧,等等,所以呢,我们把整个这个数据库简单的理解一呢,有接入。接入接入层。从应用这边接进来,接进来之后呢,接到这个啊,这个这个。信息之后呢,然后放到这个CQ层去解析啊,CQ层这里对这个我接入的各种语句啊进行解包啊,DMLDDL,解完解的时候呢,写成这个CQ的对顶啊顶加CQ是吧,进行这个呃,进行这个转化啊转化转化完之后,然后我优化器,比如说我们的优化器会对这个CQ。去啊分析一下到底哪哪哪种情况下面它执行社会成本比较低,就最优化的啊,完了之后呢,那到底层去取数据,取数据啊,取完之后,然后返回给设备层,再通过这个返回出去啊这么一个流程,那么这就三层啊,接入层,服务层和存储层,大家一定要记得马西这么三层啊。
34:12
然后它有一套一些工具是吧,更好的去管理数据库,比如说我怎么去实现备份恢复啊是吧,监控啊,啊一些这个操作啊是吧,等等的这个来去啊,辅助的一些功能啊,这功能这是呢,非常核心的,那我们呃,像快速的去看一下啊,刚才我们把刚才比较复杂的一个图啊,浓缩型啊,这么一个架构,一个服务层,一个客户端。服务层看,其实刚才我们看到的啊,它有三层是吧,接入层,服务层和存储层,那在服务层里面它怎么去体现,那马CQ是一个单进程多线程的,所以在操作系统里面,它就是一个进程一个进程啊进程一个进程号一个PID啊,那这个进程里面有一堆的这个。啊,一些这个里面的相关的这个,呃。刚才讲的那个商层三层组件是吧,接入成这个解析层啊,这个这个啊。
35:03
在这个里面啊,这里面那么我们各种连接要连进去,那有通过这个客户端去连啊,通过网络走网络的远程去连啊,一种本地去连是吧,两种情况去连,连这个数据库啊,那这个呃,有两种啊两种这个呢,就整个把刚才那幅图浓缩一下,那我们分别来看一下,就是说呃,这个服务器啊,服务器这个里面有个马西克D啊,马克D是说你用那个命令去看的话,它其实就是个进程。那么这个进程呃,如果挂了这整个数据库就不能用了,所以这个进程它要去做保护,我们一般这个马里面还有马是吧,这个进程去保护这个啊,是个低的啊,那它是一个单进程多线程,那像Oracle呢,是多进程啊,单进程的好处就是它比较省内存啊,你如果说你大家对那个进程跟这个线程如果不理解的话,可以把这个进程比作一个人,然后线程比说左手和右手啊,那这样的话大家可能就理解了,对吧?啊嗯,这样的话我多线行,我手比较多的话,干活就比较快嘛,对吧。
36:02
一个线程对应的一个CPU,那这是它的这样一个服务器啊,这样一个马D啊,这个服务器,那么整个连接是吧,我刚讲了应用程去连接层啊,连接层进来之后呢,然后再到这个SQ层,再到存储层啊,这样一个提取结构,那么连接层怎么连是吧?那连的话,其实这里面刚才讲了,我们分别来分解一下这三层,我看大家。有啥问题,这三层,那这三层里面大家可以看一下啊,可以看一下。接入层,接入层它主要是首先呢,要把应用层发发过来的这个包啊,啊通讯包啊,进行这个啊网络进行网络协议啊,进行解包那。它连进来之后会有个线程啊,线程就是我要去啊,具体是你可以理解它就是一颗CPU啊,要去进行执行这个C可用的,那获取一个CPU,然后在获取CPU的时候,他要还要得到一个呃认证就是诶我这个用户里面的我我是是不是合法的是吧?它用户名密码是不是OK的啊,他这个连接层主要是做这一层的,干这一层的事情,所以这里面。
37:05
很多初学者在这个连马SQL的时候,通过这个命令,什么CQL啊,接H啊,后面加上这个马SQL的服务器的IP地址,加上端口啊,然后加用户名密码,这样进来之后呢,发现诶这个经常会连接的时候报错,报这个用户被拒绝,那很多人就懵了,诶这个为什么会会解决不进来是吧?那说明这个连接层这里出问题了,他认证的时候说明你这个用户要么不合法的,要么呢,你可能输入这个ID址输错了,哎,端口输错了啊,或者用户没密码输错了等等,你要去检查,所以他这里会判断这个权限啊或判断权限,然后大家注意一下你应用程序的时候注意就是说如果你这个应用程序里的话,它在这笔宽地方拿了线程之后,会占这个内存的,会占内存,这个比较耗内存的啊,所以呢,我们一般说这个呃。连接会有长连接和短连接啊,短连接相当于我这地方去连接了之后去拿一个这个生成一个线程的话,会消耗这个啊,这个这个操作系统的什么IO啊这个。
38:01
这个这个内存啊,啊句柄的这些信息啊,就是说它这个地方最好是那个连接啊,不要太频繁,所以我们一般最好借议用长链接的方式去连啊,短连接这种的话会比较消耗这个资源啊,好也会做上下文切换啊,就这里要注意一下啊,这连接啊,虽然我这里讲的非常复杂,这个其实你这个就能连接来就可以了,连接来说明你这个地方就能获取一个认证啊,同时申请了一个县城啊。那如果连不进来呢,会不会报错,会报错啊,一个呢,就是说你错了,第二个的话就是这个字样没了,我我我连接不让连了啊,那后面我会讲到一个参数,这个呢,大家了解一下,那解进来之后呢,我要干什么事情呢?这个是要做SQL层啊,Circleql进行解析,就是把这个circleql的语法语义进行解析,然后呢,我这个SQL里面的对象表啊什么在不在是吧,这一步的进行认证,有了之后呢,对他进行什么这个优化,就是说我执行的这个CQ啊,婚前的一个执行计划啊,那到底是哪种计划它更节约成本,那通过这个呢,然后去啊啊去找一个最便宜的啊,这个成本最低的啊,所谓成本就消耗CPU和IO啊这两个啊,它生成的这个会生成一个数字吧,这个值越小说明成本越低,这个呢,就跑这两个成本低的CQ。
39:11
然后去执行,执行的话就到引擎层去取数据啊取数据。啊,这么一个过程,那么我们来看一下一条CQ真正去执行,比如说你用户啊,应用端发起一个CQ语句啊,比如说我发起一个S语句,对不对啊,那呃,如果说你开启了这个亏儡开启一般来说这个不要开启,一般来说因为开启这个一呢早期的版本有八个,第二呢,这个确实你如果一定要把你的执行结果缓存起来的话,其实也是有一定的这个成本的,虽然说查询比较快,但是如果你去修改数据的时候,它除了修改数据库本身还要去啊这里呢,就是这个结果也是失效了,这个时候再次的话,缓存的话又又浪费这个内存,所以这条路线下来啊,他如果是缓存了这个结果就是我要执行S在这里有了,这个时候他发现已已经找到了,那这个时候马上把结果返回来,是很快很快,这个时候相当于用什么用内存来换什么CPU,用空间来换计算的资源,CPU啊,如果你CPU啊比较紧张,那我可以开启这个,可以开启这缓存起来去找数据库,那一般来说我是不开是吧,这里这个那不开的话,那我们过来CQ过来找那说。
40:16
我们这个CQ啊,那需要解析,解析完了CQ是吧。啊,然后这个解析的时候呢,看看这个。CQ里面这个表啊,是不是我们这个库里面这个用户是不是可以访问的,有没有权限,OK,有的话,那么这个CQ版啊,就进行优化,优化成一个成本最低的啊,然后呢,进行执行,执行的时候这个是要调这个存储引擎的数据,然后呢。然后如果说你这个开来开启开起来,这个时候执行完的结果再次缓存到这个里面啊,然后这个执行过程当中会产生日志,日志会写到我们的度和我们的blo,那整个过程完成,这是整个一个流程啊,上面是一个正常的一个流程,下面是开启了或者开启一般来说不要开啊,这个大家先了解一下。
41:00
OK。我看有没有什好,那我们看存储层啊,当然第三层了啊,存储,存储层就是说数据存在这个下面,那么马SQL数据库为什么这么强大,它底层的存储层是多引擎的与磁盘型的,内存型的和网络层的,这个比较难理解,所谓的磁盘层就是我数据存在磁盘里面,以1DB为主。大家以后听到in DB,你理解MYS就是in DB in DB就是MYSMYS8.0废弃啊,它不只是事物,没法做交易数据库啊,那么内存的引擎这个呢,现在也用的很少了,因为早期的英DB比较弱,然后我们数据呢,想让它快落在那个啊。内存里面啊,内存引擎表这种表呢,一般存放临时表啊,或者存放中间结果啊,它如果有的时候谁挂了它会丢数据,那为什么现在都不用呢?因为in DB这个这个引擎啊,它的实它那个in DB包括破啊这个内存里面那个啊可以是非常大数据可以缓存起来,它的性能啊稳定性比这个好,所以一般不用它network其实也用的比较少它去。
42:04
引擎具体的叫m DB class,这个很少,基本上国内很少人用这个,这个太复杂。啊,一般出问题除了原厂能搞定,一般能搞不定的啊,太复杂了,这个MDB集群class的啊,它其实你可以理解它是个分布式数据库啊,非常牛逼,技术确实非常牛逼啊,但是这个太复杂啊。好,那引擎里面啊,有这么多引擎啊,那我们马SQL默认。这个啊,马5.65.78.0都是默认的inno DB,所以以后说马可以说inno DB可以点加起来,它是默认的引擎,它啊非常强大,然后马SQL还有其他引擎,大家可以百度一下啊,MYSM8.0废弃不管它memory我讲了基本不用啊,像下面这几个啊。黑洞这个呢,有的时候会用到啊,做这个主从复制的踪迹啊这一块啊,选举也会用到啊,还有做恢复的时候,让这个啊恢复的更快啊,肯定会用到啊,其他这比较少。
43:04
啊,然后to DB以器我们用过监控里面,它插入数据的速度特别特别快,而且它可以压缩这个用的大数据里面的啊,其他的大家可以去查一下,这里不一解析了。那为什么in inter DB这么牛逼呢?In DB的特性大家可看一下,它支持这么多特性,也是数据控面啊。非常非常重要的一些属性,比如说存储数据量可以存到64个T最大,当然我们实例不不要存这么大,存那么大,内存这么少的话,我数据库都放在啊,要快的话,数据般缓存内存里面是吧,内存一般最大一个替补的512G,所以呢,这个啊大的话意义过去不大啊,然后MVCCC啊,多并发控制这个特性是现在主流数据库里面都要实现的啊,为了独不主线散,那独不主塞写,然后它底层的架构是B加数啊,就是一树啊,存储的一棵树啊,然后这个双向列列起来啊。等等这些属性啊,大家好好看一下这个呢,相当于就是说你这些特性啊,可以看官网,官网怎么看呢。
44:04
我明明天晚上我做操作的时候,给大家告诉大家官网怎么去下,然后怎么去看文档啊,然后安装这个我会给大家这里呢,我这里呢就不给大家展开去讲啊。内容也多,然后这个。那么数据到底是怎么存,我们说数据库最主要的是吧,是存储数据库,那它存放数据怎么存呢?首先它有些数据目录,就跟Windows一样,大家理解啊,它有些目录,那这个目录里面就分很多很多种是吧?有服务器日志的,有DB日志的是吧?有系统这个文件啊是吧,对应的这个这些这个啊,一个通用的,那每个数据库,那我就是说我一个实例下来之后,我数据库就可以分啊,这个分每个数据库是吧?每个数据库有自己一套,比如说他的这个,呃。啊,配置文件啊啊,然后它数据库里面的这个表啊等等是吧,有自己的一套一套啊,然后对应的下面的有这个。可执行的文件啊,服务器层的啊,然后日志文件有错误日志,通用日志慢查询啊等等啊,然后配置文件有主要是那个参数配置文件啊这一块啊。
45:07
好,明天我装好之后给大家看这个底层数据是怎么处的,今天就了解这个这个啊,这是这个。啊,这个比较重要的啊,大家理解就是马一定要理解它有三啊,三大模块,接入层,服务层和存储层啊,然后每层的基本功能。然后重点呢啊,你要去理解这个存储层啊,它是怎么存啊,第二呢,就是服务,呃服务层设备层它的社怎么解析啊,然后这个怎么样去这个做优化啊这一块。啊,这是那么这一块内容里面啊,其实有很多很多东西可以讲,那这里呢,时间有限,我就不一去讲,那我们再看看,就说很多很多人已经入门了马C啊,不入门的我们先不管了,肯定肯定是听不懂的,我就不不用说了,这个数据库门槛是比较高的,不是说你想你想入门就很的,而且你要持续学习才理解,那我们讲一个马S克的这个,往下看马克这个日志模块。
46:06
日志模块这个东西啊,就是很多人肯定比较模啊迷惑,可能有些人对奥AC克比较熟,可定学了马赛克发现日志啊有些搞不懂了啊,为什么这么我有这个同感呢?因为我很早的时候在学马S的时候,我也是不是很理解,所以我啊告诉大家,在马里面日志有两大块,一个是热度,一个是be log。那么度这个日志呢,它是in the DB特有的啊,In the DB是马Q里面的其中一个引擎而已,它它它有很多几十个引擎是吧,那我们说in the DB是马SQL里面。最好的一个引擎是吧,也可以顶价起来啊,用马克应用DB。那么这个in乐DB引擎对应的这个日志啊,是一个呃度啊in DB,大家注意in乐DB其实以前也是也是一个,也也是被啊马赛克收购的in DB in DB它这个。这个引擎本,它本身也是一个数据库,它本身也是一个数据库啊,就DB这个引擎啊。
47:02
啊,也是个数据库,那只是说这个数据库没有SQL解析层,他要去用这个数据库的时候,是在应用层这边调用这个数据库,要存数据的时候,通过应用层一个k value的方式取数据,我用key value啊,查的时候用key来查询它的啊value的词啊,这样比较麻烦,所以呢,他把它放到这个呃马的存储层,然后用马的serve程来解析,然后通过S语句的命令来实现。那么redo redo大家可以理解,跟Oracle一样的东西啊,那它是怎么写数据redo呢?一般是按照文件的模式,比如说我在我们的数据库里面分四个文件,那从0123。啊,这样四个文件,这个文件写的时候,它是循它是循环写的,比如说相当于这个啊,我这个这个比如说第零个文件写完之后,那我就写第一个,第一个写完之后再写第二个,第二个写完再写第三个。然后其实第三个写完怎么办呢,第一个数据怎么办呢,那么数据我我就覆盖他了,就没了,就类似于我们在学校上学的时候,老师在。
48:01
这个黑板上写啊,讲的时候啊,把数据啊写给大家,这样写啊,这块黑板写满了,那我要换,我要再写怎么办,写不下去了啊,黑板就把它擦掉,所以我们可以看到这个略多啊,就类似于这个,呃,黑板的功能啊,就写只是说他啊,这里放了四块黑板,四块黑板那我们我们上课不可能就是四排黑板是吧,那他写完再写它写写第二个,第二个写完写第三个,第三个写完再写第零个,第零个写完再写第一个,这样覆盖它,那我们就把它擦掉了,所以这个度啊,他为了这样的话,Redo写数据是比较快的,我只要提交了,我就往这个。啊,这个读里面去写了啊,你这里面写啊,所以这个那数据不是丢了吗?哎,所以呢,这个do这个数据呢,最终这个里面的数据还会存到一份这个,呃,数据库里面啊,数据库表里面会有一份数据啊,所以我们要把这个数据持久化来些,比如说我们上课要把老师讲的都记下来,都存储下来的话,那我们肯定要记笔记吧,对不对,我给你买一本笔记本记记记记下来,笔记本写完之后再买一本是吧,那我就持久化了这些数据了,我拿我要去翻的话就能翻得到,那数据库就类似的,它底层会有一对应的数据表的文件,那会把的文件最后转换成这个数据文件,因为度是从这个lock log b里面,Log b里面写进来的啊,那这个数据文件从这个啊度DB,包括po里面写进来的啊,实际这个呢,数据库里面就日志数据和我们的数据啊数据。
49:22
所以这个地方大家了解了,The do啊,在这里面比较重要啊,也就比较重要,那么他写是怎么样写这个right,从这个位置开始写,写完这个写到这个地方之后呢,他要去覆盖这个数据的时候,他这个检查点就往后推啊,检查点大家可以理解就是数据库的恢复的起始点啊,这一点恢复的起始点,然后要覆盖这个数据的候,他要保证这个数据所对应的类存里面的章啊,章数据啊,要写到数据文件之后,他才能覆盖,否则这个数据丢失了,就类似于,就类似于比如说这个老师在黑板上写,写写完之后啊,他告诉你我快板要擦掉了,大家赶紧记,记下去,笔记记下去啊,等会抄完了之后,那你再记就没了,那这个数据库也是一样的啊,这个数据先记到个日志里面是吧,日志里面写写写写写好,然后,然后我日志写写到这里子上,发现这个数据呢,还没写到数据库文件里面去,这个时候啊,它会有个检查点,然后这个时候检查点往后推的话,就要插这些数据之前他要让这个数据啊,通过那个跟那个啊因用地包破关联起来,然后通过一个这个lsm啊这个,然后把数据写到这个数据文件,这个时候就可。
50:22
往后推,往后推的话,我这个指针这个point,这个指针就往前移啊,这个地方就开始写数据这样一个,这里面肯定会比较难理解,那么记住一点的话,就是略度可以实现什么数据的,呃,数据库实力的这个安全恢复,就是说突然间数据库挂了,挂了这个内存数据丢失了之后,重启之后呢,通过这个略度自动恢复数据啊,它是有这个功能啊,就这个功能。啊,那blo也是什么呢?Blo是什么呢?Blo blo数据库啊,是在我们S层的啊,刚才我们1DB是全储层的是吧?那。那都是这个。设备层的一个啊b block制,它作为一个协调器,因为我们马Q啊,底层是有很多很多的这个引擎的,那我要通过上层的一个b block日制来协调统一的下面的引擎,各种产业日志都归到那个b log里面,所以blo呢,它就是马服务层的一种日志啊,这种日志啊,然后呢是in DB特有的啊这种日志。
51:20
啊,注意注意一下,那大家再想一下,那我有了女度,我为什么还要搞个B劳呢?怎么去解析呢?如果我假设我我是个面试官,我问你啊,有了女度为什么还要B劳,你给我解析清楚,你讲想看对吧?这里要解析一呢,它是in the DB是特有的啊是in the in the DB引擎的,那blo呢,是马S服务层的协调下面所有的引擎,因为马克数据库是个多引擎的,对不对啊。啊,所以这里大家要记到啊,然后热度是一个物理日志,它能实现你数据库实例宕机了,我重启之后通过热度来自动恢复啊,这个数据是安全的,当然只有它能实现啊,那疲劳日志呢,它是一个逻辑的啊,它不能实现这个什么。
52:04
这个这个数据库的实际恢复的,那blo主要做什么呢?做主成复制组成复制是通过blo,大家知道分布式数据库里面最核心的一个要实现什么,这个高可用,那我们的数据有多份,那我通过日志的复制b blog复制这样方式啊,没有这个的话呢,就后面也做不了高可用是吧,所以呢,它属于这个高可用用的比较质。那奥克那如果用来我能不能把干掉呢?那其实如果奥克它其实是可以这么熟悉我,我用来我不要block,奥克是可以做的,但大家想一下,奥Le克如果说做成马赛克,把马赛克做成奥Le克一模一样的功能,那么奥Le克本身还有价值,奥Le克数数据库是很贵的数据库,对不对?所以这一点呢,从基础上是没问题的,但是我要保证这个马S底层的多引擎的话,还是需要有B劳日志啊,这一点要注意,那么这里呢,就是一条这个语句写下去之后,整个的一个处理过程啊,比如说我要去数据库里面找一个ID01的,比如说我找一个身份证啊等这个张三这个人是吧,那他首先会到内存去找,内存没找得到,那就马马上返回数据,如果内存找不到,这个时候到磁盘里去找,对吧?啊,返回数据,嗯。
53:11
啊,那那就是比如说我要执行一个下面介条C口语句嘛,我执行一个ID等于一的N加一这么一个操作,对吧?那这个时候先找到ID等于一的这个数据,然后在这个基础上面再进行加一,然后把数据写到新的啊这个内勤的块里面去,然后这个时候如果发生提交的时候,那么就会写的日志啊,以及会写B到日志啊,这两个日志,实际上这个地方就是啊两阶段提交,就是在马税库里面也会有个两阶段提交,就要他要写两份日志啊,B劳日志是协调底层的所有的这个啊,应期的这个日志,保证失误的一致性啊。数据的一致性啊,数的原则性的数据一致性,最后一个提交,这是这么一个过程,OK好,那这个呢,大家听起来会比较累是吧,所以呢,我们再来一波这个什么这个奖品啊,我打开一下这个这个啊。大家听到这个是不是比较累,所以这个内容有点深入啊,有点深入,可能这个听起来还是这个,我不知道,这个不是搞it的,你肯定听不懂啊,你搞数据库的估计能听个一知半解,然后这个没关系啊,没关系,我们后面还会继续给大家分享各种技术,好大家扫一下这个,大家后续呢,去学习这个t c form my c版的话,有这个无门槛的这个代金券三份啊,那这个呢。
54:25
后续呢,我们也会啊,对这个啊,因为我们是训练营嘛,是吧,可能有更多这样的这个这个啊。让他去学习的机会啊,所以大家可以拿这个代金券,可以实现这个啊,这个提这个马C可能啊,我们后面会有这么一一个系列的这个这个课程,所以你拿这个代金券呢,可以抵OK啊,大家扫一下,大家扫一下啊,我看大家有没有啥问题啊,来我看一下。好看大家没啥太大问题。啊,大家扫一下啊,大家扫一下。
55:09
好,大家扫一下,我放点音乐,稍等,我们还啊,我们还没讲完啊,我们还想还没还没讲完,好大家应该扫完了啊,OK,我们继续。啊,大家可以拿着这个啊代金券啊,那我们来看。我们再往下看啊,我们大家坚持一下,这个下面啊,内容还是挺多的,干货挺多的,那么我们说数据库是存在这个磁盘里面,那么我们的应用系统去取这个数据的时候呢,不会直接去吃饭,吃饭去磁饭的,去找数据的时候是比较慢的,我们数据库性能要越快越好,比如说我们经常用手机查我们银行一些账户是多少,你如果是点一下那个手机打账户,要五分钟出来,或者几分钟出来,那太慢了,我肯定不等了,是吧,或者我这个时候要转账,我到底有没转出来,那转半天对不对,那越快越好一点,就马上这个钱啪一下就好了,对吧?那数据库呢,最好是放在内存里面,因为内存的速度比磁盘要啊快几千倍对不对,所以我们要理解这个在数据库里面怎么去配这个内存。
56:10
那么这么这个数据库里面内存有两大块,一个是全局的内存。一块是这个线程,像私有的内存啊,那全球的内存呢,最主要一块就in d一般配整个内存的60%-70%,你比如说我这个内存是128G的,那我这个配个80个G啊这么一个。那对于下面的像数据字典啊,或者说in DB啊,这个刚才讲的是吧,这个包括buff啊,这个这个可以设比较小,几百兆就可以了,几十兆就可以了。啊,那像这里呢,就是我一个线程连上来之后,那我需要获取的内存,那么像sort b size这个是排序用的,比如说我们查一个secret要auTo By是吧,排序它肯定呃要放在内存里面,内存放不下,它肯定要放在临时临时文件里面啊,还有什么随机读是吧,这种这种是买SM的,这个不管它,然后我们两个比较join易的时候放在中间,结果里面要放在这个join b size里面,还有我们的B或日志设程的这个放在这个,因为这个是个私有的线程是吧,放在这个B开size里面,还有我们的线程,对于就是我一个线程也需要占内存的啊,占内存的啊,还有一些这个比较小的一些人事表啊,或者就堆表。
57:15
就刚才我们讲memory这个表意是属于这个对表。这就属于这个一个线程,那如果说我有多个线程啊,那我到底比如说100个连接,100个连接就有100个人连上来,那每个人连接占的内存这么大,那我乘一个100啊,这个是怎么去算啊,大家理解一下这个内存。那么对于类型啊,就是啊,有三种不同的方式去啊,这个配置方法啊啊。在服务器层啊是吧,在服务器层啊,那共享的这个有现层啊,还有查询,查询这个一般开启不要开啊,现程这个开启试一下,然后引擎层的这个的in DB b括po是吧,还有lock b。那还有这绘画级别连接过来排序啊,交印啊,临时表啊三种。
58:00
这个能了解一下,那呃,我们去配这两个参数是吧,一个lock buffer,一个in the DB b po啊,这个两个参数啊,这两个参数你配的话,对应的会有两个,呃,参数就设啊,一般来说那个buff这个配的比较少,它默认的话这个几兆几十兆啊,这个这个问题不大,然后主要是八泡一定要把它配好,它这个领域是整个数据库的缓存,基本缓存在这个b po里面。啊,这个注意一下。好好,那么刚才讲了这个,我们讲了这个,呃。马的各种组件是吧,然后三大三层,然后呢,嗯。讲了这个内存啊,讲了内存,然后我们再看一下最后一个马思克的核心参数,这个也是啊,相对来说比较难理解一些啊,难理解一些,因为今天我可能我的难度搞得太大了啊,可能太大了,就是相当于我把大家这个高度拔高了啊,本来是这个啊,大家追求的可能就是哎,我就是个啊,可能看看数据库到底是长什么样是吧,到底是什么工作,但是你下次讲这些东西我不知道,听不懂。
59:05
这个时候你听不懂,你不知道你自己不知道的对不对,你知道你不知道,你自己不知道你要要啥,你要爬波你是吧,你赶紧去什么学习是吧,拿这个各种百度或者拿资料或者告诉诶我到底怎么学是吧,那我觉得没问题,你知道已经什么知道了方向,为什么这样学啊,因为我讲的就是我讲的这些内容,你比如说你要去大厂这种这些内容你要滚瓜乱熟,而且你要倒本只是说你在你的里面要是吧,怎么看你都非常清楚的,怎么去理解这些东西啊,这些都是啊,有可能就是我一面试我肯定啊需要理解这件事,第二呢,我今天干活的时候碰到问题,我要搞定他,对吧。首先我们来看一下马赛克数据库,我比如我装好了对吧,然后我数据库也上线了啊,那我要配置一些比较核心的参数,这里我讲几个,因为马赛克参数有几百个是吧,每个参数背后都有一套啊非常完整的理论,那这个东西就是你看你怎么去理解,有些理论你看不懂,你要去找源码去看啊,然后再啊加上自己的一些测试,你比如说我去讲一套,这个是我们从一个用户去连一个马CQL数据库怎么连进来的啊,连完之后他怎么创建线程,然后我写SQ的时候啊,写完之后,那我提交是怎么提交的啊,这么一个几个参数对应的比较重要的,第一个呢,我讲的是马的。
60:15
这个连接马克连接啊,这里面有两个参数,一个是max connection啊,比如说我这里设个3万啊,还有一个是马use connection,两千九百八啊这么两个参数,那我一般比如说我们呃去设置两个参数,比如说我的背景什么呢?我的背景是这个。这个服务器啊,我一台这个数据库服务器,我可能是这个。啊,250656G内存的啊,内存是256G的啊,我的CPU呢啊,我可能是这个啊32个核的靠。我的磁板呢,是用s sat固态盘的,就3.2T的啊这么一个环境啊,那我装这么一套数据库是吧,那我配的这个连接数,因为接数预示着就刚才我们讲的在群众这个马SQ的这个主机里面啊,我要接入的时候,他去判断我的离接数有没有超过我设置的啊,为什么要。
61:08
在这里控制一把,不控制把数据库是不是会爆掉对吧?啊,那我这两个参数有什么区别。首先我得讲一下max connection这个参数,这个参数指的是啊,我用户要连进来之后啊,我要去判断一下这个参数是不是超过3万了,3000了,如果超过的话,我就不让他去叠。所以我们要去理解这个参数的话,可以找出那个源源码啊,马SQL的源码啊,是用CC加加写的啊,看起来会比较难,因为它这个整个调用啊调用啊,这个看起来不像C语言这么这么这么解决啊。这个是定义这个my connection这个源码里面定义这么一个定义啊,定义的这个参数那。这个参数定义的话,它里面有几个,呃,看源码的时候,有的时候要看注解是吧,看注解那么呃,这个是什么呢?呃,允许这个客户端啊模拟并发上来,它这一个叫global吧,也就是我们设这个参数的时候,是这个全局的,就是我们去设置个,比如说你要set去设置的话,要加global meaning global啊global,然后啊max connection等于多少,所以它这个全局的一个参数啊,因为参数设置的话有两种模式,一种是全局的一个绘画级别的,绘画级别你设了他这个啊,马上就就生效,然后当前绘画有效,然后全局的话,整个实力数据会有效的。
62:29
而且这个参数设了有可能啊,你是可以试一下当前里面设是吧。那么它的范围是一到一万一到十万一到10万,也就这个参数最大设10万连接啊,最小一个啊,最小一个。然后它有个默认值啊,默认值写议你在源码里点进去之后,它会弹出来源码的解析,它默认这个值是啊,151啊,这个跟这个我们的这个架构有关系,比如说我们常用的架构叫lamp lamp价格,大家也听过lamp架构吗?Lamp lamp lamp l是什么?L就是啊。
63:07
啊,陈老师给我们讲的Linux操作系统。对吧,操作系统就首先要操作系统好,有了操作系统之后呢,然后啊,我要去部署一套。啊,这个业务系这个系统的话,那我需要有一个AA什么的,阿帕Che,阿帕Che是一个中介键,阿帕Che这个中介要启动这个服务,那么这个服务上层会有一个啊我们的应用程序,应用程序可以用啊,用这个写PHP代码写啊,那么数据存台的数据我存在MYQL里面,MYQ里面马SQ里面叫lamp技术,这是为什么马Q这么火,因为这几个技术全部是开源免费的,很多这个互联网公司都喜欢用这个免费的嘛,啊都叫lamp lamp啊lamp那为什么151啊,因为在这个,呃,阿帕奇他们开的里面啊,默认就是151,因为这个跟这个程序有关系,因为啊,因为你设的越多,它比较消耗内存,所以他们开的默认这个地方是其中这个啊,中间就是151啊。
64:06
然后布block等于一,然后没有没是个锁啊,没这个锁,像底层最底层的那种锁啊,就是做啊排他这种这种啊,就个排他啊,排他锁啊,排他锁啊。然后这个设这个参数的时候啊,就是我们去设这个参数的时候,它不会产生这个b blog日志的啊note in blog,所以如果说我们搭组存的时候,你在主库里面日志啊,这个参数设了备库里面要设一下,否则这个日志就不一致了啊,就是两边参数就不一致了啊等等,还有操作的时候还要去检查一下它这个约束啊,然后如果你做了什么啊,这个这个这个啊,他去去做update的这种啊参数,那这个是它这个啊,一个这个参数一个定义,那么这个参数的定义的话,它这个参数,它这个参数啊。它这个参数到底有什么作用呢?对吧,这个参数有什么作用呢?这个参数的作用就是啊,我去连接的时候,我去连接的时候,我要让它连进来,连进的时候,当前这个连接连进来的时候呢,我要用当期我离金理好了这个,比如说我当前离金是啊2000,那我这个用户离进来之后,我2000加一这个时候啊,当期如果离金的话,那两千01,那两千01要跟我们的这个啊,最大的这个max connection的这个参数里面定义的3000进行比较,如果说2001小于3000 OK,那我就让他往下走,让他什么加价进去,然后就连接成功,否则的话,如果说,如果说我当前的连接已经大于了这个那个的话,那么它会抛出一个太多连接了啊,所以这个参数是这么控制的啊,那为什么我们有有的时候要设一个U势connection啊,2980的留出一个20个连接呢。
65:41
因为如果说你这个连接超过了3000,这个时候数据库其实啊没法连了,如果说你作为一个DBA啊,一个DBA这个时候要去处理这个数据库,这个时候你去理的时候也没有没有连接了,所以呢,这个时候我们设个2980的话,相当于预留出20个连接给DBA用啊,所以呢,我们的用户连接来时候是看这个,这个呢到这个的话就不让你了啊,用户理解啊。
66:04
好,这是这个,呃,连接啊这么一个功能,那大家想到到到底说诶我数据库到底3000还是2000还是1000合适呢?那我们啊给大家讲一下,就是说你啊,你的这个整个应用场景里面,我到底是怎么设啊,比如说我举个例子,比如说我前端,比如说我一套非常啊这个大的一套系统电商平台是吧,我的订单系统啊,那我要处理很多订单,我应用服务器啊有很多台,比如我有100台钱啊应用服务器,然后底层有一个马赛克数据库啊,那么我应用要把这里过来访问的应用的话,处理完这个数据都要进到马些克数据库里面啊。那么大家,呃,这个想一下,就是说你应用程序列到马赛克数据库里面,它其实这个马赛克数据库刚才讲了马克数库整个引擎里面,接入层这边,它要去产生一个线程,这个线程会占用一块内存啊,最小的话,这个线程占在马西的这个内存呢,是256K。啊,那。那随着这个连接啊,不断的做不断的操作,比如说做这个排序啊,做这个表交易啊等等的操作,那么这个绘画所操作的结果都会放在这个连接所对应的啊,它的那个内存里面,比如刚才我们看到那个S8SIZE啊等等啊,那这个连接所占的内存会越来越大,可以大到什么最大大的可以略四兆。
67:18
啊,那他想一下啊,你一个连接上来的话,不断的操作不断掉的话啊,那这个手机内存越来越大,越来越大,那只是一个连接啊,啊那如果说我这里设了三千三千个零,同时上来之后都用了600兆的话,大家想一下,我这个服务器64兆一个连接乘以一个3000的话,大家算一下,大家会算的话,同学算一下是多少,192。啊,000兆除除一个1024接近什么192G,那我的内存是256G的话,那基本上用的快差不多了,离关离接,那我们说数据库,我还要缓存数据啊,我我缓存数据,我把一般设置整个256G的70%啊是吧。
68:02
那不是没没没没内存的吧,对不对,所以我们要控制它,要控制它啊,控制它不能说太大,你不能收个1万或者10万是吧,随便试,这是第一个,第二个我们要看一下我这个DB的能力到底有多强,到底要达到多少,因为数据库里面非常重要一个指标叫QPS。TPS经常要去评估这个数据库多少啊,多少多少牛逼,对吧,比如说我举个例子,比如KPS是3万,怎么去算这个TPSTPSKPS区别的啊,比如说事物,什么是事物呢?事物值是在马里面begin。然后写一条语句select好,然后update,做一个操作好,然后呢,这commit好,那么这个四条命令。啊,Begin select什么一个一条数据,然后比如查一下银行账户,然后再update转个账对吧,转账然后呢。提交啊,四条命令组成了一条啊。啊,一条TPS事五啊,就像CP处理,那QPS呢是四是四从begin select4啊这么去算,那有的时候我们经常会说QPS就是我们业务层的并发,那呃,这个看系统的请求数是吧,每秒的请求数,比如说我设的是3万,是3万,我觉得我这个数据库只能支撑3万的请求量,每秒钟啊每秒啊每秒OK,那哎,我的一个业务系统刚才说他过来访问,他访问这个之后,访完之后他处处理完这个结果,处理完处理完处理后的结果要返回给应用这个包的一个区步,一来一回的话,可能比如假如举个例子场景,比如它消耗20毫秒,OK,一个连接下来之后,我。
69:38
啊,一个QPS,就是我从应用这边来请求数据库拿数据,拿到数据返回给他,一来一回的话需要20毫秒啊这样的一个叫。TPS或QPS也好。那么呢,那我们想一下,那我一秒钟有几个KPS啊,一秒钟啊,一秒有几个啊,50个,因为50乘以20毫秒,就1000毫秒,就一秒50个QPSOK,那大家想一下啊,大家想一下。
70:09
那么我的这个一个一秒钟我50个QPS,一秒钟是50个QPS对吧。那现在我有。100台。是吧,100台加加加va程序就要连上来是吧,然后一一台机器一一秒钟可以实现啊。这个。50个PPS,大家去算一下,大家去算一下,我需要我一台服务器,比如假设我就一台服务器。我就一台服务器。我就一台服务器,我能实现几个连接啊,很简单啊,3万。啊,3W3W。每秒钟总的这个DB的服务器除以一个,我以前端有100台家务服务器100台,大家算多少?3万除以100是多少?
71:08
300是吧,啊,三百三百个KKPS,然后每个连接上来的话,每秒钟是50个300,再除以个50就是六个连接啊六个连接那啊那我就非常清楚的算出这台服务器只要提供六个连接就可以搞定它了。所以这么去算,如果我把你提升为一个架构师啊,你怎么去给老板算出我这个服务器你执行多少啊,那这个就啊。啊,这个就比较强了,这个强了我是打到大家我都带往往大肠鹅肠这种标准化这种这种就带大家去学这个数据库啊,不是说真的,如果你真的需要看源码,你把源码一下,然后打开那个工具SS那工具打开看是吧,就就可以啊,这是这个参数啊,大家要理解一下啊,要理解一下这是这一个啊,看大家有啥问题没哦,没有啊,然后我们再看这个参数,这个参数很多人也肯定也没怎么记过啊backlog。哎。我告诉大家,你们经常去面试的时候,这个就是问一些比较高难度,平时不怎么用的技术,但是这个时候去挑战你,因为大厂要筛选人才的话,你一天一分1000分解题过来,我肯定就要选两个DBA,对不对,这个时候就看谁啊谁你啊谁比较强,特别是比较有经验的同学,他问的就是理论底层到底啊能理解多少,比如说我们看这个参数backlog。
72:21
对吧,那么你理解这个参数,如果你去看马赛克的官网啊,它很简单啊,几句话,它这个简单,为什么它简单,它是啊在。你在理解TCP原理的基础之上去理解它就简单了,如果你不理解TCP,那你肯定理解不了这个参数。什么是TCP呢?TC pip这个网络层的这个第四层啊,第三层第四层的这个啊,传队协议这个这一块啊,首先一个TCP有一个三次握手,三次握手就是说我应用层啊,刚才讲的我通过我的应用层啊,应用层应用层或者我用户层去访问我的DB,这个社会层就是我的DB对吧?那我访问题就是首先我要进来去请求这个DB,那请求它是要三次握手啊,这是一个败站点的问题啊三啊。
73:15
啊是无解的,那这个应用层端去访问DB首先啊。这个。科呢,会发起一个think c啊,发给这个啊社成,然后设成呢,会回给客户端一个AC确认告诉他我已经收到了,然后呢。客户端。啊,这回他一他啊,我也收到了啊,说白了很简单,就是说啊,客户端这么说啊,客户端是说,诶,我现在给你啊服务器这边发起了一个包啊,发起一个啊一个一个那个连接。然后呢,服务器端收到这个链接,好告诉客户端说我已经收到了,可以理解,我没问题。好,那服务器已经回给客户端,客户端也收到了这个确认之后呢,客户端告诉他,好,那你发过来我的A,你发过来的A我也收到了,那我也可以,你也可以理解我,OK,这个三次握手就达成了什么。
74:11
客户端服务器的一个连接。好,那我们说在马Q里面这个参数到底是500。啊300,那就看你理解这个参数,这个参数的配置,其实就是这个三次握手的。这个位置。Accept q,大家如果写过网络程序的话,大家呃,有没有知道那个socket?啊,Socket socket socket啊,Socket。Accept。括号sock sock是什么?I加端口,那么socket这个队列里面这个队列so这个队列你可以理解它这个队列是一直处在这种什么阻塞状态,阻塞状态啊相当于它什么,它一直是监听的,监听他监听什么呢?监听你的客户让过来请求,我所有的请求都丢到这个接受这里面。
75:10
大家想一下,如果这个时候我是黑客,我黑客拿到这个客户端应用程序肉机,然后我不断的攻击访问请求服务器,那么服务器这边的队列会占满一七个队,一个占满,占满之后第一期零一个进来,进来之后那发现这里面一是一期了,这个时候就爆掉了,这个是直接报错,直接报错所以。这个是控制连接风暴,大家听过点DOS攻击吧,是听过吧,然后这个啊,那么那这个队列什么时候,比如说我达到1000,他这个地方什么消费一会会拿走呢?诶这个地方需要我们一个有一个应用程序来消费这里的请求什么情绪呢?就是我们的马CQ数据库马CQD。啊,就是我们的马。D啊,这个这个进程来它的对应的进程,这个比如说它的实例叫3306啊,这个明天我会给大家部署啊,它的实例,比如说有3307第二个实例啊,来消费这里的请求,拿走一个这里就解易啊所以呢,你这些请求过来,那我要去。
76:15
接受这个请求之后,我拿到一个马赛克地里面的一个线程,去创一个线程,然后去拿到一颗CPU啊去执行,所以这里啊要理解这个参数啊,你不需要设太大,也不是不能设太小,太小的话它给你爆掉。啊,这里其实是,所以说我们去看官方文章时候,发现两句话就讲完了,那他需要啊,你需要有TCPIP的这个背景,第三次握手,然后这个参数里面。它主要是接收客户端发过来的命令begin啊,然后这连接完之后,它就个连接上来啊,要请求一个啥,就就连过来了,你就连过来了,这里会申请一块内存出来啊,然后然后之后呢,这个时候用申请一块内存之类,我这个时候要去获取一个CPU,这个时候需要一个会有一个线程,所以你会看到一个连接就会有个线程,一个线程就会获取一个CPU,一个CPU就会对外提供一个服务。
77:10
这是这个。那么三维这个呢,这个呃呃,Think qua这个是属于操作系统级别的一个,那个呃,参数是在内核层,在linuxx里面S,呃,这个CT啊,ctl.com figure里面配置的啊,这个是跟操作性统有关系,这个无所谓啊,这这个地方啊,这个地方,所以你理解它之后呢,就是如果你碰到类似这样的诶反问链就被拒绝了,那到底是不是这个地方是大缩小了还是失大对吧,是当了它占内存。对不对啊,所以这里呢,这个参数啊。一般是五百一千啊,这个看你怎么去理解。啊,就是连接过来之后啊,刚才我们说连接控制到我们的那个是吧,这里是连接过来一个请求,然后进行这个。对列啊。好,我们再来看,那么连接进来之后啊,我们再看你这个用户啊,刚才就是用户应用层嘛,就APP应用层,应用层去离我们数据库,刚才说连数据库连进来之后,它一个接入层,接入层完了之后呢,到serve层,Serve层这里会有一个线程池,线程池,线程池就这个参数Li pull mark reader啊,比如说我设2000什么意思啊,我可以放2000个人进来,因为我们那个参数,我们讲了那个connect可以设3000,那我能不能放2000个人进来可以,因为放进来只是我。
78:26
是吧,那先进来。啊,获取这个县城。或者是个县城。他还没具体真正的去干活啊,对吧?啊,那这个线程池呢,Allac商业版里面5.7有收费的啊,线程池那开源的po啊麦DB有开源的这个线行,因为线行词其实提高了我们的性能,因为大家注意刚才我讲了整个连接啊,整个连接如果说你连接连进来之后,操作完了之后,要要消消费,要消耗掉,要消毁掉,那整个创建连接,要创建要消毁是非常消耗CPU的,CPU是我们计算资源里非常重要的一个,如果没有CPU,你这个没法执行,没法没法操作,所以如果你频繁的短一接进行操作的时候,那整个系统都大量的去连接的时候,占用大量CPU,就会在我们的Linux呢,S层会产生大量的内核型资源的一个占占占用top mini top mini看到哎,CPU这个资源啊,百分之六十七十都是用S。
79:26
STEM里面内核做了什么?CPU的什么上下文切换。对吧,3M切换所以。所以要有个线程池来存放我这个线程,这样就不会消耗CPU啊,那么它底层这个漏斗底层为什么还有一个线,还有层数叫什么in no DB con又是啥意思呢?这个就是要理解我刚才我们讲的马的内核主机里面三层接入成进来之后,在serve层这边啊,哪一个线程去解析CQ啊,然后。优化优化器升成完CQ,然后去执行的时候,要到底层去存储引擎点去获取数据的时候,这个时候就要拿一个具体的CPU出来,然后去执行,然后这个地方是64,为什么是64呢?如果说你的CPU是32靠的,那CPU一般是超线程的乘以个二的话,就64,那我们不能设的太大。
80:18
不能设的太大,设的太大的话,那我把2000个人都放进来的话,那么这个队列就很长,那两千个人排队窗口只有64个,就像你去银行,去银行这个这个这个这个去存钱的话,我有64个窗口,但是我有2000个人去存钱的话,那这个时候封掉了,对吧,最好是64个窗口,一个窗口一个人呢,每个人都可以拿到这个这个这个窗口去干活,对吧,就去买票啊,这个地方就要理解,所以呢,这个地方啊,你要最好设成这个跟CPU个数一样的啊,通过这个Linux的命令啊,Cat命令可以看一下pro跟下的PROC下面CPU in命令啊看一下,然后呢去设,如果默认的话是设零的话,设零的话是默认的话,设零的话是不限制的,就是我多少个连接进来就去找,这个时候会产生一个对立,这个对立是什么样子的,长的是这个样子。
81:05
长成这个样子什么意思呢?我一共又又是四个线程,我要去,我都进到这个啊队列里面,那我线程一线程二,因为马修刚才讲是个单进程多线程的都进来了,那你看这么长的对列,OKOK,好,那第一个线程啊,拿到一个C口语去去执行,比如执行一个1万行的一个C口去执行是吧,第二个星再去执行,那么第一又有四个星期再执行,那第一个首库呢,就排队了。哎,就排掉了,那这里还有一个问题,六四啊,我试好了是吧,或者我有更多的人要进来啊,去去执行这个CQ拿CPU,那还有一个这里有点不公平什么呢?比如说我一个线程去执行的是执行10万行去操作,那时间是不是很长,因为数据量比较大啊,就像你个仓库,我要工作量,这个数据量比较大,它执行的时间比较长,那这个系统跟执行呢,就是两行数据可能一下就执行完了,那这个这个CPU拿到每个系统拿到CPU的时间不均匀,像这个线统一其行10万行的时候啊,非常慢,可能需要这个两分钟是吧,那这个呢,只有两秒钟就搞定了,嗯,这么慢怎么办?要公平怎么办?这个时候他来自另一个另外一个参数设一个什么。
82:07
In the DB卡啊5000啊,然后5000什么意思呢?就是我执行这个10万行记录的50005000行的时候就释放出CPU,然后让它是吧,到第啊64个后面去排队去啊,到最后面去排队去啊115001啊,后面去排队啊,然后等到他再去执行,这样的话做三下文切换,那么这个慢查询就实际就很长了,所以这个时候我们经常会说在马赛克输求里面就优化什么慢查询,慢查询,所以这个参数来控制啊这个CPU啊,均等啊均等。因为马有一个叫啊。平等协议就是在早期版本里,我拿到这个CPU就往死里干,就CPU就不算出来,那导导致别人拿不到,所以呢之后呢,用了这个参数来优化啊,均等均等,这是这个参数的理解。OK。好。好好,那么大家听的比较累,最后还有参数优化是吧,那在优化之前我们再来一波啊,这个福利啊,看大家能不能坚持下去啊,如果你能听完这个能坚持下去写的话,一直坚持下去啊。
83:10
要不了一年你就会成为马西克的高手啊,马高手啊,因为我给他讲的东西的高度就比较高啊,然后如果你真的知道方向了,那啊应该就很快就能成为啊,入门这个马西克数据库,我们再来一波啊,大家可以扫码这个啊,这个呢是CSDN的程序员杂志啊,这里面也啊杂志里面有非常多的这个啊,技术啊,非常多的技术。然后呢,这个里面有这个。啊,可以拿这啊这个这个奖品啊,这个也是不错的啊,就大家如果是在这个学技术的。好,大家扫一下。首先我给大家还有。啊,等大家耍会我看看啊,有什么学习群可以加入啊,有有群的啊,可以到时候那个。我们这个小姐姐啊,可以去回复一下这个这个可以看看。
84:00
是怎么我们有一个那个训练营群啊。好好大家扫了吧,啊,扫了之后那我们继续啊,最后还有一个参数啊,马上结束啊。啊,今天讲的有点快。内容也比较多啊,这个参数当我们一条C刚才讲了,你一个C在执行的时候,是不是获取了那个in DB引擎的数据之后执行完了,这个时候我们一定要发起一个科密的提交,科密的提交是保证数据一定会落到数据库里面去,那么科密的提交有两个参数,我们叫双一,这两个参数必须要设为两个一,不要设其他。双一是保证数据库提交一定会写进去,那为什么会有这两个参数?第一个think blog是指的commit提交一定是写到设备层的blo质。第二个in the flash log at transaction commit等于一是指的写完之后会写到阅读里面啊,这个我讲过了。热度和B劳日志这两个日志是什么区别?刚才啊讲过了,如果还不清楚的同学去看前面的内容。
85:07
那么这个也是这里比较难理解的,就是在马SQL数据库里面,它虽然说是马CQ数据库是一个单机版的,但是它内部也有一个。啊。这个两阶段提交,那这个地方大家就懵了,诶两阶段提交。这个不是在分布的数据库里面吗?为什么说一个单机版的马赛克数据库有两件提交呢?因为。马数据库是一个多引擎的数据库,它底层有不同的引擎。如果一个事物。有两个命令操作的话,一个在in DB,一个在MYSM,那这个呢是组成一个事物,但这里我不介意啊,你一个事物放在两个不同的引擎里面,会导致数据的不一致,那么我们要,呃,我们对外。对,用户这边是一个commit命令。
86:01
啊,一个commit meaning,那么实际上对于内呢,在马克底层呢,会有两个持有化的接口,Interface叫X1的。Ex啊?Exit。还有一个是xa的commit啊,有两个接口,这两个接口都是持久化,整个commit提交的过程,X的时候呢,先写阅度啊,就先写这个参数的。先写日度,写完日度再写blo字,这样来实现这个日志的回滚,因为日度是个物理,它可以回滚,要一定要先写日度,再写blog啊。写完之后落到盘里,整个事物还是不可见,这个是加词加锁,然后我们再最后一次做一个xa的commit,把这个锁释放掉,让事物可见啊,提交起来,这个啊,这样一个两阶段提交,所以所以说大家要理解两阶段提交,而且马这5.65.7嘛,两阶段提交的这个算法是一样的,那比如说T这个数据库,它有两节提交,怎么保证这个computer消息日志写进去呢?那T这个用的是5.7.17的版本,因为5.6的两件提交是有问题的,逻辑上这个算法是有问题,会啊,这个这个数据会啊,得不到一个保证的一致,所以你看所有的版本的这种无解七啊,这个之后。
87:22
那么我们再来看这个图啊,就是经常会有人会面试,诶把这个数据库里面一个坑下去之后,你给我讲讲原理,那很多人懵了,一个提交下去之后,数据写进去,那还有啥可以讲呢,你们。看到这句话。大家想一下,我数据库是一个多用户的是吧,那我比如说我现在有五个用户去操作数据户,这个时候五个用户同一时刻这个发起提交,比如五个用户同时在银行里面存钱啊,去转账对吧,在同一个银行啊,同一个同一个银行下面去转账,那都很有可能嘛,哎,每个用户转账完之后,这个时候提那个提交按钮,一提交,这个时候五个人啊,那都会要数据,要写到写到日志里面,写到我们数据文件里面,那这五个提交都要先写到我们的。
88:04
需要的b block里面,实际上这个地方五个用户去写的时候,为了提高性能的话,他会把这五个命令合成一个组,合成一个group,一个组,那么这个组呢,他要找一个leader,叫group leader。啊,Leader出来就是呃,Commit group会找一个leader去找其中一个leader,然后一起来提交啊到这个show block,注意提交这个缓存这个地方其实个会话,因为他是private是私有的,每个人是看不见的,也就说你张三李四,呃转账你每你这个会画之间是不知道这个里面的数据的,这知道数据那不完蛋了,对吧,是不知道OK。那它这个放到共享的里面,是只是把这个数据放在一起统一处理,这样比较方便一些啊,然后这个注意commit下来,这个是一个缓存还是个内存,然后最后呢,它RA到啊,每个缓存所在的标准L,就是每个文件的具备,大家注意写数据的时候,你你比如说你用open去写一个啊文件的话啊,你open写一个文,写一个文件的时候,首先open吧,Open你这个首先文件的名字对不对。
89:12
啊,文件的名字杠一下什么一个文件,然后我这个文件是吧,可以读写吧,啊可以读写,是否可以读写RA或者或者那个read是吧?啊然后呢,文件文件你这个时候要等于RA的话,那你这个write什么东西呢?就把数据写进去是吧,那写到每个文件本身的内存缓存标准IO catch里面。写完之后啊,其实这个地方。这五个绘画还是每个人看不到,自己的还是看不到,那我要让全局隔机的话,这个时候要发拉SH到操作系统的全局啊缓存里面,实上到这个里面,那这五条这个那呃这个的话,那这个是个全局的也就可接了,际上到这里的话,这个可见的类型里面日志就可以通过这个发送到这个备库啊,这个备库去了,如果做为一个主从两个的话就可以发过去了,当然有可能这个类型被覆盖了,写到磁板上去了,那这个时候从磁板上去发也是有可能的。好,那大家注意一下,我commit下来之后,写到共享lo缓存,同时写到标准的话,然后flash到啊可接的全局区的话,这commit right flash操作都非常非常快,为什么全在内存里拷贝的非常快,内存是十的负60秒,这么一个操作是吧,十的负60秒,什么五一秒是吧,很快很快。
90:28
那么最后呢,我们这个因为都在内存里面,这个时候如果宕机了,数据主服务器宕机了,那这里面不是都没了吗?对不对,对不对,如果这个时候创新宕机了,这个是不是都没了,是怎么办?这个时候我们还要think到我们的磁盘,磁盘才是持久化的内型是吧,这个时还会丢失,所以最后还要think这个操作,会有一个大量的IO的一个操作。I的操作去可以训练问题,所以有的时候经常会讨论说,哎,这个两个参数401的话,那那性慢妈怎么办?因为每个提交都会做这么这么commit right flash s是吧。
91:00
那这都慢了吗?那我问大家数据库,首先我们要保证什么稳定性,也就是说转账慢点没关系,那个账不要错,比如我把那个企业转到账上,这个中间丢了这个,我企业转出去,账上没收到这个钱,一笔钱飞掉了,那不就完蛋了,对吧?所以我们保首先保证稳定性,数据不要错,不要不要错,不要丢,第二我再来考虑我的。信快一点。秒级啊,毫秒级对不对,所以这里呢,就是啊,你去考虑数据库的时候,首先保证稳定性,在略考虑性啊,这是可没的提交的这个流程,那么我们的B劳日志这五个合在一起写进去之后啊,在我们比如说你大组从在重复这个地方来回放这个的话,我们可以通过并发啊这个。这个这个啊,并行的去复制啊,就是去运用这个日志,这个时候就马赛克五解七就能体现出,我可以按照这个里面的这五条去在一个事物里面啊。也不是一个事物,一个group commit,这个里面并行,每个拿五个系统去回放这五个事物啊,这就很快了。
92:04
这是这个参数啊,这个参数好,那这个今天内容就讲的比较多啊,我这个节奏也控制的比较好,我因为我内容准备的太多了,所以每个内容没有非常细致的去深入去讲,其实我跟他这么讲,这一页PPT,这一张PPT可以讲一天啊,可真的要展开讲可以讲一天,但是呢,我用一两一个半个小时把它讲完,确实难度也比较比较大,所以如果大家没听懂的话,没关系的,因为。我今天的高度是比较高的,也就是我把你啊看作是一个啊,年薪三十万五十万的一个级别去讲好不好,所以大家如果听不懂没关系啊,然后明天明天的课程。可能啊,全部是操作了明天的课程,可能哪怕你是自身级别,你听完我的课,你也会学到很多东西,为什么明天我讲的是大规模的思想,就是你要管理过四位数的服务器,上万个马SQ实力,这个才是真正的级别哦,你不是说你在你你是公司里面只管了什么两三套马Q管的数据量很少,那我觉得你即使再牛逼也没经历过大的产品,没有经历过这个啊这种啊,DBA的血的血的这个教训的话,是不算DBA的,懂吧。
93:15
所以明天我会从MYSQL安装开始。从一个编译。然后编译完之后马上可用了,然后我通过一个打包技术生成一个R片包,然后装一个单机版的马。然后再叫他装一个同一台服务器嘛,怎么装多实例啊,这是非常标准的一套啊,所以呢,明天也会很精彩啊,让大家真正去落实到实战啊,明天有PPT也有实战,主要是以实战为主,PPT主要解释一下这个安装功能的原理。OK,好,那今天啊,我就讲这么多啊,然后看看大家有啥问题没有,看看那个。
94:02
啊是这样子的,如果你的block block,呃呃,Backlo等于五啊500的话,然后你用户是1000的话,那你这个1000里面这个接收对里要被消费掉,如果说你消费不掉,说明你这个数据库有问题的,这个进程啊,他因为什么意思呢?就是你个用户现在是很快速,因为大家想一下,如果你这边你相当于就是什么,你这个队列1000的话,如果你你有1000个请求上来的话,你只有500的话,如果同一时刻都进来的话,那你的队列马上就会填满,这个时候肯定是进不来,这个时候你要设大一些啊,适当的这个时候我们要看等待世界啊,看等待世界去判断出是这个参数的问题,然后把它调大。当然这种可能性是比较小的。因为。为什么呢?因为我们只要连接进来之后,我马上就会获取CPU,除非说后端CPU没了,我获取不到这个线程,那就拿不到这个,那我才会一直在这里面等这个CPU啊,所以我们在写马的时候一定要减少这个慢查询大事误。好吧。
95:01
Black,你可以理解。啊,可以理解。白love,你的理解就是在呃,马赛克这边,我要到请求对立里面,因为那个是一个监听啊,监听他要去,呃,请求请求是吧,请求请求什么呢?要去获取一个线程,获取一个线程,作为获取一个线程,这个时候这个时候就要一个一个什么correct,一个reader,呃获取一个CPU是很快的,是很快的,但是如果后端资源不够了,或者我前面有大啊。这个风暴过来了,那这个参数就把它去掉,因为这个地方实际上说白了也是什么控制你的大啊,大并发的一个请求,你比如说那我我问大家你在这个,呃,你在这个真正的环境里面,里面是是长理性还是短连接一般都是什么长理性。短离器比较少,短离接相当于是我一下子每次请求进来完了之后又释放掉,又进来又释放掉,那这个时候非常消耗CPU三角形切换的对不对。
96:03
啊,所以我们一般用长链接啊,这种技术来来来来连接啊,相当就这设啊几个长链接是吧,那这样连接进来,连接里面直接去请求就可以了。短一些,那一般是我内网我我我黑客是吧,发起这个风暴,那有可能会把这个这个数据库呈报了。啊,这个PPT到时看看一下啊。OK,好,那今天的分享到这啊,然后明天啊,啊继续啊,我继续讲这个马的这个部署吧,这个你有了这个架构的基础啊,一定要学会部署,而且我告诉他部署是完全不一样的,就每个人的部署方法不一样,如果你说诶晚上下一个R偏波一条命令搞定,那这个呢,你只能说是装成了,但是如果你去生产房讲不是这么干的,所以我明天讲的是在大规模下面啊,然后怎么样去玩这个数据库是怎么装的,怎么装成一个标准化,怎么装成像云上RDSN点一下就啪就出来,这个叫标准化大规模的思想去做啊,我不要利用这种这个小做法啊,这样的体现出你的能力出来,诶我干了什么,包括你面试,你可吹牛逼啊,我管了,我管理到啊四位数的机器,几千台机器啊,把这个实力是上万台的,那这个你就把这个东西你编能讲励你自己的,那就牛好不好OK。
97:24
好,那我们直播就到这里啊,谢谢大家。
我来说两句