业内有句俗语:程序员
只会写代码的是码农;学好数据库,基本能混口饭吃;在此基础上再学好操做系统和计算机网络,就能当一个不错的程序员。若是能再把离散数学、数字电路、体系结构、数据结构/算法、编译原理学通透,再加上丰富的实践经验与领域特定知识,就能算是一个优秀的工程师了。算法
这么说实际上是有一些道理的,由于计算说穿了就是两个东西:数据与算法。数据库
目前市面上常见的软件应用,大部分都属于数据密集型应用。通俗的话来说,就是这些应用干的事儿就是把数据收集起来,须要的时候再拿出来。而这些操做都须要数据库来进行承载。编程
因此说,数据库离咱们很近,也是一项开发者们很是须要掌握的技能。这期的 「SFKP • 计算机百科」,咱们就来「SFKP • 数据库」。网络
本期内容重点: 数据库解析,数据库发展史,我国数据库进程,对开发者的建议
名词解析:数据库数据库,简而言之可视为电子化的文件柜 —— 存储电子文件的处所,用户能够对文件中的数据运行新增、截取、更新、删除等操做。所谓“数据库”系以必定方式储存在一块儿、能予多个用户共享、具备尽量小的冗余度、与应用程序彼此独立的数据集合。数据结构
数据库技术产生于 20 世纪 60 年代末 70 年代初,设置的主要目的是有效地管理和存取大量的数据资源。架构
数据库其实就是存放数据的仓库。它的存储空间很大,能够存放百万条、千万条、上亿条数据。可是数据库并非随意地将数据进行存放,是有必定的规则的,不然查询的效率会很低。并发
随着互联网的发展,当今世界是一个充斥着大量数据的世界。数据的来源有不少,好比出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。数据结构和算法
数年来,数据库技术和计算机网络技术的发展相互渗透,相互促进,已成为当今计算机领域发展迅速,应用普遍的两大领域。数据库技术不只应用于事务处理,而且进一步应用到情报检索、人工智能、专家系统、计算机辅助设计等领域。编程语言
数据库的概念实际包括两层意思:
1.数据库是一个实体,它是可以合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。2.数据库是数据管理的新方法和技术,它能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。
数据库技术研究和管理的对象是数据,因此数据库技术所涉及的具体内容主要包括:
1.经过对数据的统一组织和管理,按照指定的结构创建相应的数据库和数据仓库;2.利用数据库管理系统和数据挖掘系统设计出可以实现对数据库中的数据进行添加、修改、删除、处理、分析、理解、报表和打印等多种功能的数据管理和数据挖掘应用系统;
3.利用应用管理系统最终实现对数据的处理、分析和理解。
按类型划分,数据库通常分为两类:
关系型数据库:关系型数据库和常见的表格比较类似,表与表之间有不少复杂的关联关系。
包含:MySQL、PostgreSQL、Microsoft Access、Microsoft SQL Server 、Google Fusion Tables、FileMaker、Oracle 数据库、dBASE、Clipper 等;
非关系型数据库(NoSQL):
指的是分布式的、非关系型的、不保证遵循 ACID 原则的数据存储系统。
包含:BigTable(Google)、Cassandra、MongoDB、CouchDB、Apache Cassandra、Dynamo、LevelDB 等;
按照层级架构,数据库的架构通常能够划分为三层:
1.内层:最接近实际存储体,亦即有关数据的实际存储方式;2.外层:最接近用户,即有关个别用户观看数据的方式;
3.概念层:介于二者之间的间接层。
从其应用方式来看,数据库技术主要起着两方面的做用:
1.信息系统开发做用:利用数据库技术以及互联网技术,结合具体的编程语言,能够开发一个信息系统,从而解决业务数据的输入和管理问题.2.数据分析与展现做用:利用RDBMS的数据查询功能对数据库中的数据进行关联组合或逐级汇总分析,并以表格,图形或报表形式将分析结果进行展现,从而解决业务数据的综合利用问题。
从原理来看,不难知道数据库技术的核心和基础就是「数据模型」。因此业内回顾数据库的发展阶段时,通常也是根据数据模型的演进做为相关的时间节点。
在数据库的发展历史上,数据库前后经历了层次数据库、网状数据库和关系数据库等各个阶段的发展。在这短短几十年的发展过程当中,数据库的发展通常划分为下面这三代:
第一代:网状和层次数据库系统;
第二代:是关系数据库系统;
第三代:以面向对象数据模型为主要特征的数据库系统。
第一代:网状和层次数据库系统
第一代数据库系统是层次和网状数据库系统。层次数据库系统的典型表明是 1969 年 IBM 公司研制出的层次模型的数据库管理系统IMS。
第二代:关系数据库系统
第二代数据库系统是关系数据库系统。1970 年 IBM 公司的 San Jose 研究试验室的研究员 Edgar F. Codd 发表了题为《大型共享数据库数据的关系模型》的论文,提出了关系数据模型,开创了关系数据库方法和关系数据库理论,为关系数据库技术奠基了理论基础。
20 世纪 70 年代是关系数据库理论研究和原型开发的时代,大量的理论成果和实践经验终于使关系数据库从实验室走向了社会,所以,人们通常把 20 世纪 70 年代称为数据库时代。
第三代:以面向对象数据模型为主要特征的数据库系统
1990 年高级 DBMS 功能委员会发表了《第三代数据库系统宣言》,提出了第三代数据库管理系统应具备的三个基本特征:
1.应支持数据管理、对象管理和知识管理;
2.必须保持或继承第二代数据库系统的技术;
3.必须对其余系统开放。
随着云计算的发展和大数据时代的到来,关系型数据库愈来愈没法知足须要,这主要是因为愈来愈多的半关系型和非关系型数据须要用数据库进行存储管理。
于此同时,分布式技术等新技术的出现对数据库的技术提出了新的要求,传统的关系型数据库慢慢不能完成知足遇到的新需求,愈来愈多的非关系型数据库就开始出现。
这类数据库更强调数据库数据的高并发读写和存储大数据,这类数据库通常被称为 NoSQL(Not only SQL)数据库。 但传统的关系型数据库在一些传统领域,依然保持了强大的生命力。
中国的数据库历史,要从中国数据库的开拓者 —— 萨师煊老师(上图)提及。
上个世纪 50,60 年代,伴随着登月工程等大型项目而生的数据库,慢慢走近了大众的视野。
1961 年,美国通用公司研发的第一个数据库系统 DBMS 诞生。1976 年霍尼韦尔公司开发了第一个商用关系数据库系统 —— Multics Relational Data Store。
也是在 20 世纪 60 年代,萨师煊等学者就成立了经济数学研讨会,而且已经预见到了数学和计算机技术在将来经济管理中的应用前景。
1974 年萨师煊又利用在中国人民银行和国家计委工做的机会,在计算机上进行实际操做。1978 年人民大学复校,萨师煊等学者最先引入「信息」一词做为中国高等学校经济管理类的专业名称,建立了经济信息管理系。
这是中国高等学校中第一个以信息技术在经济管理领域中的应用为特点的系科,萨师煊是第一任系主任,并于 1980 年在中国人民大学开设了中国第一个数据库系统课程。
1979 年萨师煊将本身的讲稿聚集成《数据库系统简介》和《数据库方法》并发表。这是中国大陆最先的数据库学术论文。1982 年,萨师煊起草了国内第一个计算机专业本科「数据库系统概论」课程的教学大纲。
中国数据库的这第一批星星之火,如今大多数人已经没法经过公开渠道寻找到,可是在萨师煊的线上记念馆里,依然会看到一些名字:王珊《数据库系统概论》做者,国防科技大学计算机学院教授阳国贵等一串国内学界泰斗,由他们编写的教材,现在依然是学习数据库的同窗必看的书籍之一。
与大多数中国老科学家同样,今天的年轻人已经只能在搜索引擎上找到关于他的只言片语。但由他引入中国的数据库行业,却星火燎原,成为时代脉搏的纪录者。
说回数据库的发展。
1978 年,美国的 Ellison 在为中央情报局作一个数据项目时候,敏锐的发现关系型数据库的商机。几个月后,Oracle 1.0 诞生了,这个看起来只不过是个数据库玩具的产物,让 Ellison 今后踏进了信息管理这个巨大的蓝海产业,并在短短十几年间,成长为世界级的巨人。
1989 年,来自中国台湾的冯星君将 ORACLE 带入到中国。商业嗅觉敏锐的他天才般的决定给 Oracle 注册一个中文名称,也就是今天的 —— 甲骨文。
这个将中国历史上最古老的文字与最早进的数据库科技链接在一块儿的商业创意,后来成为了无数的商业教材反复讨论的品牌案例。
中国第一代的 DBA 是从 1997 年开始存在的。
1995 年 5 月,邮电部电信总局提出开发和建设"市内电话业务计算机综合管理系统",即”九七工程“,并于同年 7 月下发了一系列的技术和业务规范,要求全国县以上的邮电局在 1997 年末前实施「九七工程」。
「九七工程」共分为九个子系统,其中,营业受理、配线配号、定单管理、机线资源、综合管理与查询属于基本子系统,1十二、11四、计费、号簿子系统与基本子系统彻底实现数据共享。
而中国的第一代 DBA 就在「九七工程」中崛起。中国数据库的行业格局就在这一时期造成了:金融行业用 IBM DB2 数据库,Informix 数据库,在电信行业则是 Oracle 的天下。
到了 1999年,中国第一家数据库公司诞生了 —— 由上面提到的王珊老师创办的北京人大金仓信息技术股份有限公司。
从 1999 年开始,各个 IT 社区开始兴起,一些数据库的同行开始走出封闭的公司,在社区里活跃起来,更多数据库从业者获取知识的形式,也从产品文档,手册,变成了社区。
“当时国内的整个技术社区里面你们能获得的第一手的资料其实还比较少,因此就有比较强的技术人员会去看英文的文档,国外的网站,而后回去作作实验,而后去社区里分享,帮助别人解决一些问题。” —— 童家旺
2000 年,武汉的达梦数据库公司成立。达梦公司的产品在业界有外号,叫中国 ORACLE,其主要特色就是和 ORACLE 基本兼容;2004年,天津南大通用数据技术公司成立。主要的产品是 GBASE。
这个时期的数据库大部分都是依托大学、国有产业之类,研发的数据库也都大部分用在银行,国家政府机关,行政企事业单位等。来知足国家对自研数据库项目使用的一些要求和建议。
而纯商业数据库公司是在随着中国互联网企业的发展,慢慢发展起来的。
2009 年以前,淘宝使用的数据库产品大部分是 ORACLE,而且有着“全亚洲最大的 RAC 集群”,随着成本等问题,淘宝决定开始自研数据库产品。当时淘宝依托的就是 MYSQL ,并研究出了阿里巴巴本身的 MYSQL 分支 —— AliSQL。
2012 年,Google 的 Spanner 横空出世,这是一款基于分布式架构的事务性数据库。受到 Google 的启发,国外出现了 CockroachDB(蟑螂数据库)等一系列解决 TP 问题的新兴数据库厂商,但国内市场还找不到研发这类数据库的创业公司。2015 年,PingCAP 成立,填补了国内这块儿的空白。
在不少时候,技术的发展除了像上面这种行业相互促进以外,还和社会大环境有关。2018 年美国对中国的贸易封锁,就让数据库行业进入了第二次的大发展。
不少高科技企业面对这种状况,纷纷发布本身的数据库产品,好比阿里的 Polardb , 华为的 GaussDB , 腾讯的 Tbase 数据库等。
以后随着开源趋势的影响,一大批国内的大中型科技企业,开始纷纷将本身的数据库技术进行开源。好比上面提到的 PingCAP,还有和阿里云共同入选 “Gartner数据库推荐报告”的中国数据库厂商 —— 云杉数据库。
他们的主要产品包括 SequoiaDB 分布式关系型数据库与 SequoiaCM 企业内容管理软件,应用场景包括分布式在线交易、数据中台、分布式内容管理等。目前服务的企业用户总数已经超过 1000 家。
2019 年也是 5G元年,随着 5G 和物联网的发展,产生的数据量将提高到下一个阶段,这对数据库厂商既是挑战也是一个大机遇。总之,中国的数据库市场在今年事后,竞争只会变得更加激烈。
就像开头咱们说的,如今的应用大部分都属于数据密集型应用,除非咱们准备从轮子造起,否则根本没那么多机会去搞看起来很高端的数据结构和算法。
甚至写代码的能力可能也没那么重要,这个你们应该都懂。大部分需求都有现成的轮子可使用,主要的创造性工做每每在数据模型与数据流设计上。
实际生产中,数据表就是数据结构,索引与查询就是算法。而应用代码每每扮演的是胶水的角色,处理IO与业务逻辑,其余大部分工做都是在数据系统之间搬运数据。
架构师最重要的能力之一,就是可以灵活地权衡取舍、集成拼接数据系统。绝大多数工程师都不会去从零开始编写存储引擎,由于在开发应用时,数据库已是足够完美的工具了。关系型数据库则是目前全部数据系统中使用最普遍的组件,能够说是程序员吃饭的主要家伙,重要性不言而喻。
我曾经采访过不少 SegmentFault 社区的用户,都表示上学的时候没有好好学数据库,如今发现基础真的很重要又翻出来从新学了一遍。假如你还在上学,建议你抓住如今的机会,好好掌握这些基础的原理,工做以后很难再有时间和机会去”找补“了。
部分资料来源:维基百科词条:《数据库》、《萨师煊》
大学计算机基础:《数据库技术简史》
虎嗅网:《中国数据库40年历史:隐秘的江湖与恩怨》
常垒资本:《国产数据库崛起史》
在本文的最后,但愿你们能够和我一块儿,向全部为中国数据库行业发展作出贡献的先驱与从业者们致敬#respect#