没学好数据库的程序员,真的混不到饭吃么?

来自公众号:SegmentFault

业内有句俗语:

只会写代码的是码农;学好数据库,基本能混口饭吃;在此基础上再学好操作系统和计算机网络,就能当一个不错的程序员。

如果能再把离散数学、数字电路、体系结构、数据结构/算法、编译原理学通透,再加上丰富的实践经验与领域特定知识,就能算是一个优秀的工程师了。

这么说其实是有一些道理的,因为计算说穿了就是两个东西:数据与算法。

目前市面上常见的软件应用,大部分都属于数据密集型应用。通俗的话来讲,就是这些应用干的事儿就是把数据收集起来,需要的时候再拿出来。而这些操作都需要数据库来进行承载。

所以说,数据库离我们很近,也是一项开发者们非常需要掌握的技能。这期的 「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 年底前实施「九七工程」。

「九七工程」共分为九个子系统,其中,营业受理、配线配号、定单管理、机线资源、综合管理与查询属于基本子系统,112、114、计费、号簿子系统与基本子系统完全实现数据共享。

而中国的第一代 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年历史:隐秘的江湖与恩怨》
常垒资本:《国产数据库崛起史》

上一篇:Windows Server 2008之AD DS活动目录详细部署步骤


下一篇:Python 学习笔记 - 时间模块