2013春季巡讲讲稿—基于传统数据库的大型系统构建—赵振平—中国人民公安大学CSDN高校俱乐部

来源:互联网 发布:知进退明得失 姚崇 编辑:程序博客网 时间:2024/04/28 00:26

巡讲主题:基于传统数据库的大型系统构建

巡讲讲师:赵振平

推荐阅读对象:对创业感兴趣,对编程感兴趣的学生

主要内容:基于传统数据库的大型系统构建,从数据库的角度去诠释。主要介绍了数据库的历史,从古到今的一个发展历程。并且赵振平老师还从数据库角度出发来教你如何构建一个大型的系统,值得一看。

点击查看人民公安大学CSDN高校俱乐部巡讲视频巡讲报道

讲师演讲PPT下载地址:http://share.csdn.net/#/detail/718 

以下文字为巡讲视频中的全部内容,编辑成文字方便大家学习观看。希望可以给大家带来收获和帮助。

    这一次呢分享的是基于传统数据库的大型系统构建,从数据库的角度去诠释。其实呢,现在很多的大型的系统,比如说银行啊,铁路啊都是基于数据库的思想的。互联网兴起的一个重要标志就是大数据量。

    在讲怎么构建一个大型的系统之前,我们先来讲下什么是关系数据库。其实呢,关系型数据库就是传统的数据库。传统的数据库跟最新的NoSQL数据库是不一样的,在这里分享的是传统的数据库,以后有机会再跟大家分享NoSQL数据库。传统数据库已经有好几十年的历史了,而NoSQL数据库才有三四年的历史,技术非常非常的新。在关系数据库产生以前呢,我们的开发者应用程序,他们的数据是紧紧捆绑在一起的。也就是说,这一堆数据是为专门的开发者应用程序服务的。如果说这个数据离开了这个应用程序,它是没办法生存的。这就是关系型数据库产生之前的一个现状。那么在介绍关系型数据库之前,我先来介绍一个人,他的名字很长,就简写为中文考特。考特这个人在数据库的方面特别伟大,在关系型数据库出现以前呢,我们没有办法开发一个大型的系统。考特的功劳就是在数据库这一块,他是一个标志性的人物。我对这个人其实挺感兴趣的,这其实牵扯到一些思想问题。考特呢出生在英国,他在开始以前跟技术用现在的话讲,半毛钱的关系也没有。在第二次世界大战呢,他去参加了英国的皇家空军,他在皇家空军的表现非常非常的好。第二次世界大战结束以后,他到了美国一所大学学习,他开始接触了计算机,但只是很表面的,并没有很深层次的。毕业以后呢,又去了加拿大工作,后来到了IBM的一个实验室,正好有了一个机会,他对关系型数据库产生以前的一些情况进行了系统的研究,接着他就发表了一篇论文,论文题目就不翻译了,因为翻译不好。这篇论文奠定了关系型数据库的基础,这是一个里程碑式的改变。接着呢,IBM公司就根据他这篇论文,根据他的理论,研究出了DB2关系型数据库系统。现在的NoSQL数据库等先进的数据库其实都是基于关系型数据库的。IBM是世界上第二大的软件公司,可见考特的贡献是多么大,他是个非常了不起的人物。

    那么关系型数据库呢,其实说白了它就是一个表。一切概念的产生其实就是根据考特的这篇论文,无论是那种数据库,他们的核心就是表。另外呢,考特在70年,71年发表了这篇论文,在81年左右获得了图灵奖,可能同学们不知道,图灵奖就是计算机界的诺贝尔奖,这个奖获得的人很少,可能这个人对IT界的贡献不仅仅说是十年。考特对数据库的贡献,算起来差不多已经有了三四十年。

    那么今天给大家分享的话题就是如何构建大型系统。什么是大型系统呢,当然啦,这是我个人的理解,不一定正确,就是我给你这个系统存储的数据非常大,这是一个重要标志。但是呢,如果我存储的数据量非常大,但是一天只有一两个人在访问,这样的系统也不叫大型系统,所以说高并发是大型系统的一个重要标志。这是大型系统的两个标志,一个是大数据量,一个是高并发。那么,什么样的数据量才是大数据量呢,一般我们觉得T级的很大了,但是你跟别人谈,你的系统是P一级的还差不多。那么,今天我给大家讲两个例子,一个是基于ORACLE的,一个是基于MYSQL。看今天的时间吧,如果时间够的话,我把两个例子都展现出来,如果时间不够,我可能只讲一个,为什么讲两个例子呢?两个例子非常具有代表性,大家如果认识很多人的话会知道很多系统是基于ORACLE的,公安的系统其实也是基于ORACLE的。而MYSQL是互联网公司用的比较多,所以说这是两个非常典型的例子。但是不管再怎么典型,他们都是基于传统的关系数据库。ORACLE是关系型数据库,MYSQL也是关系型数据库。ORACLE代表的呢,其实是一个贵族阶层吧。为什么说它是一个贵族阶层呢,ORACLE它是一个软件,这个软件的成本非常非常高,一般要20几万一套,那么这样一套昂贵的软件势必要运行在昂贵的硬件上面。它可以运行在一个小型机上面。我给大家说一下小型机上面的一个部件,咱们PC机上面一个内存要100多,而咱们的小型机呢,我只记得四年前一个内存条的价格是3万钱。所以说,一个小型机是非常非常昂贵的,便宜点的70,80万。所以说ORACLE运行在高端的设备上。另外一点呢,ORACLE需要在一个操作系统上,这个操作系统也是很昂贵的。维护这样的系统,我们也需要找很高端的人才。ORACLE就代表很昂贵的系统,所以我们称它为贵族派吧。如果大家了解互联网历史,可以知道,大约在2000年以前,我们的系统都是基于ORACLE和DB2去构建的。因为在2000年以前,互联网在当时还不太流行。2000年以后,互联网兴起以后,很多的互联网公司如果使用像ORACLE这样高端的硬件跟软件以后,他们没有办法生存下去。他们不是靠国家拨款,他们都是自己的钱或者是风险投资的钱。投资是需要产出的,这时需要寻找到替代品,这个替代品其实就是MYSQL。MYSQL其实是一个时代,一个互联网的时代!

    所以呢,今天我想跟大家分享就是这两个例子。那么,如何构建基于ORACLE的大型系统呢?主要从数据库角度去解读啊,如何构建一个大型的系统。我从一个软件的生命周期来引进一下基于ORACLE数据库的大型系统。什么是软件生命周期呢?一般的说,一个软件分成好几个阶段,有问题定义啊,有需求分析啊,可行性分析啊,然后就是说开发阶段,开发阶段又分为设计啊,编码测试啊,后面还有上线,运行维护,这就是一个完整的软件生命周期。大家可以看第一个阶段---问题定义,比如说在银行信息化以前有大量的单据,这些单据的数据我们并没有进行信息化,我们需要大量的人力手工去整理这些东西,就存在一个问题,如何把这些信息管理起来,这就是一个问题定义,就是说我存在这个问题,然后怎么样去解决这个问题。这就是软件生理周期的第一个阶段。问题提出以后,那我一定要进行可行性分析啊,根据我现在的情况,我现在有哪些技术,这些技术能不能构建一个系统去解决当前的问题呢?所以我在技术方面我要进行可行性分析,可行性研究。那另外一种我还要分析它技术风险。比如说我投资了很多钱吧,在我系统进行一半的时候才发现技术是一点也不可行的,所以说技术是一个因素。另外一个就是说,我会对这个投入和产出做一个评估,我投入了那么多钱,我到底能不能解决问题呢,所以我要做一个成本的估计,还有市场,人员,做一个综合方面的评估,评估以后,我再形成一个可行性的分析报告。可行性分析完成以后,我们这件决定干了,ok,接下来就是需求分析,把前期的大的目标给他细化,其实就是量化。举个例子吧,比如说铁路购票系统,一个人到底是一天能买几趟车的车票,一个人是不是可以买一趟车的两张票,其实就是说,我们对上面宏观的东西进行细化,进行量化。什么叫量化,其实这就是需求分析。我们要把所有的东西量化,而不是泛泛而谈。

    需求分析以后,其实下面就是进入开发阶段了。大家其实对前面三个阶段不熟悉,一提到第四个阶段,大家就熟悉了,就是开发阶段。开发阶段其实可以分为三个阶段,先进行设计,然后进行编码,编码其实就是我们那个程序员写代码,在座的各位可能没有经历过程序员的生活,程序员就是在那写代码,翘着二郎腿,叼着一根烟,觉得自己是最牛的工程师,可以与比尔盖茨相提并论,其实就是一个编码。编码以后就是测试,测试就是说,有没有bug啊什么。这就是测试阶段。刚才我没有讲那个设计啊,设计阶段分为软件设计和数据库的设计,其实通常这些工作都是由一个人来完成的。我的主攻方向是数据库,而且我对数据库也非常感兴趣吧。就在我刚毕业的时候,在北京嘛,那时候生活还特别的贫困,那时候还住地下室的时候,其实那时候,我对未来没有任何信心,但是我对数据库非常的感兴趣,我那时候还没有女朋友,好像它是我的情人一样,就是兴趣,并不是说这是工作,为了混口饭吃我才去弄他。有人会说IT技术枯燥,但我就是对它很感兴趣。软件设计就是我们把这个系统分成哪几个模块,数据建模。为什么要数据建模呢?所以说数据库设计分为三个阶段,他是顺序的,第一个阶段是概念模型设计,概念模型设计呢和逻辑模型设计呢的区别,概念模型设计跟计算机没有半毛钱关系,它其实就是说我从现实世界中把实际抽样出来,或者是我们学生是个实体,老师是个实体,国家也是个实体,那么我们就把这些东西给抽样出来。那么概念模型设计,它其实就是利用我们关系数据库里面那个E-RE-R图的意思就是说从现实世界中抽样出一个个实体,老师是个实体,学生是个实体,那么老师跟同学之间是什么关系呢?其实这就是E-R图,这种关系就是说一个老师跟学生的关系,他一个学生可以上不同老师的课,那么一个老师可以上不同学生的课。另一种关系就比如一个国家是一个实体,一个国家只能有一个总统,他们是一对一的关系。一个国家也能有多个副总统,这就是一对多的关系,这就是概念模型。概念模型设计产生的结果其实就是E-R图。接下来就是逻辑模型设计阶段,就是说用关系数据库理论,我把实体的属性进行规范化。就是说一个学生有编号,姓名,家庭住址,我要利用关系数据库的范式对他进行规范,就是说这个实体我到底分的对不对呢。学生的姓名到底可不可以再分呢,可不可以再分成更小的实体呢,中国人的话姓和名是连在一起的,对于老外,这个系统是为老外设计的,那老外就是说可以再分成两个属性,first namelast name可以再分成两个属性。在属性里面我们有个最主要的叫key或者叫主属性。比如说学生的编号,可以确定一个学生,编号以外的我们叫非主属性,它是依赖于编号的,因为编号是主属性。逻辑设计阶段就是把实体的属性利用关系数据库理论进行规范。那么逻辑模型设计完成以后,接下来就是物理模型。刚才说概念模型设计与计算机没有半毛钱关系,那么物理模型就与关系数据库产生关系了。物理模型就是把上面的实体转换成表。数据库设计模型最终的产品就是表。表生成以后,开发人员其实就可以开发了。衡量一个项目好坏的有很多指标,其实我最看重的还是前三项,第一个就是它功能是否可以实现,第二个就是它是否可靠,而第三个其实是我觉得最重要的,就是它的性能达没达到它最初的设计要求。其实有很多大型系统的雏形就是来自一个小笔记本。

  随着我们业务的增长啊,大型系统有两个指标就是大容量和高并发。下面呢我们可以对数据库进行改造,比如一台笔记本可以换成一台台式机,台式机具有更强大的处理能力和更大的容量。那么再发展,台式机也不能承受,我们可以把台式机换成刀片式服务器。刀片式服务器具有更强的处理能力,可能大家没有见过刀片式服务器,图中就是刀片式服务器的长相,刀片式服务器更加强大,大家可以看看它的内存还有硬盘。随着业务继续升级,刀片式服务器没有办法支撑,我们可以换成小型机。小型机跟我们的笔记本,pc机还有刀片式服务器不一样,小型机有自己独立的一个体系结构,比如它的cpu只能使用自己开发的cpu。厂商的小型机只能使用自己公司研发的硬件。小型机的功能确实强大,但是你再强大,但是你的容量也会有达到极限的时候,服务器的内置硬盘已经不能够满足业务增长的需求,这时候只能外挂存储。当达到一定极限的时候,可以再增加一台小型机,这其实就是典型的ORACLE集群。那么ORACLE集群有什么优势呢?这个系统有个最大的有点就是内存共享,那么它怎么来共享内存呢?就是说当我有用户从第一台小型机上发出请求的时候,请求一个读这个磁盘,那么,第一台小型机会把磁盘内容读到自己的内存里面,当第二个小型机也请求相同的数据块的时候,这时候它不会去读磁盘,在计算机系统里面读写磁盘实际上是最昂贵的,最慢的操作,它会请求第一台小型机,说“哥们儿,你这有我要的数据么?”,第一台说“我有你的数据”,然后呢它就直接从第一台小型机的内存拷到自己的内存,这样的方式是不会有任何读写磁盘动作的操作,它只是内存和内存之间的交换,这就叫内存共享。那么如果数据不在这台机器上,它还是会去读磁盘。另外一个呢就是两台小型机可以分担,提高系统的并发性。第三个有点就是失败转移,一个机器挂掉了不会影响外面的用户,这就叫做失败转移。ORACLE集群(RAC)已经发布了十几年,成熟而稳定,广泛应用于各大企业,是大系统的经典解决方案。这样的系统还会有其他的问题,技术问题:1.难于扩展,2.性能会达到上线。成本问题:软件成本包含:ORACLE软件的成本,操作系统软件的成本。硬件成本包含小型机的成本,磁盘阵列的成本。人工成本:工程师的工资成本。 互联网兴起的标志是大数据量,高并发性。

  互联网时代,我们需要更大的数据量和更大的并发性。互联网公司再按照这样的方式没有办法走下去,一来成本没有办法接受,而来没办法满足饿哦这种高并发的需求。所以说这个时候互联网公司寻找了很好的解决方案,这就是MYSQL时代的到来。MYSQL它可以部署在廉价的机器上,它也是开源的。于是MYSQL在互联网公司得到了大量的应用。2000年到0809年这段时间,MYSQL还是占主角的。那么如何构建基于MYSQL的大型系统呢?MYSQL其实它就是一个小麻雀,但是我们想让小麻雀去干更多的活,那么我们就要去用小麻雀构建庞大的系统,这个庞大的系统呢会比ORACLE更大,并发量更大。一套数据库的组成,一个业务对应一台数据库,其实这就是垂直拆分,就是把大的业务拆成小的业务。还有水平拆分,水平拆分其实就是把一个表分成几个表,这些表具有相同的列,但是存放更少的数据。其原理是根据现有的表克隆出新的表,这些表存放不同的数据而已。但是用户数猛涨,怎么办?其实我们克隆出一个新的系统就可以了。针对这样的系统,我们是可以无线扩展的。