数据库漫谈(六)
2021/5/3 19:26:50
本文主要是介绍数据库漫谈(六),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
转:
数据库漫谈(六)
今天想想聊一下ORACLE数据库的发展。
这个问题有点儿敏感,因为聊完今天的话题,肯定会有人说我崇洋媚外,不符合当前大力发展国有数据库产品,去“O”的趋势背景。
而且我本人也是ORACLE出身,多少会有些“自卖自夸”的嫌疑。但是,作为关系数据库的一个巅峰,我相信ORACLE数据库是任何一个IT技术者都绕不开的话题。那我也就本着尽可能中立的态度,来说一下ORACLE数据库的发展历程和可以借鉴的地方吧。
做过软件开发的人都有这样的经验,就是一开始的时候,无论是最终客户还是产品经理都对自己需要的东西模模糊糊,需求改了又改,加了又加。然后,原来单薄的代码,越来越丰满,最后甚至肥胖起来。ORACLE数据库也是这样一步步成长起来的。
话说RSI(ORACLE公司前身)在1979年发布了在PDP-11计算机上的商用ORACLE 2.0版商业产品(Ellison认为客户更愿意购买第2个版本,而不是第一个版本,所以他直接省略了1.0 版,厉害吧!)。这个版本是采用PDP-11计算机的Macro-11汇编语言开发的。也就是说,给PDP-11开发的ORACLE数据库不能用在IBM主机和DEC的VAX上。所以,为了满足第一个ORACLE数据库用户(美国中央情报局)的在多种计算机上同时使用的需求。OARCLE从第三版(事实上的第二版)就开始用C语言进行重写。要知道,C语言当时推出不久,用它来写ORACLE软件也是具有一定的风险的,但除此之外,别无他法。但幸运的是,很快就证明了这样做是多么的正确,C编译器便宜而又有效。从那时起,ORACLE产品有了一个关键的特性:可移植性。
这也对ORACLE之后的数据库产生很大影响,绝大多数的数据库的开发语言都采用了C语言进行开发。
然而,使用了C语言重写后的ORACLE数据库也并不是从此一帆风顺。幸好在经历种种磨难之后,登上了关系数据库的巅峰。
下面我们给ORACLE数据库的发展做一个简单的总结:
1979年夏季,发布了PDP-11计算机上的商用ORACLE Ver2.0 产品,这个数据库产品整合了比较完整的SQL实现,其中包括子查询、连接及其他特性。
1983年3月,发布了使用C语言重写的 ORACLE Ver3.0 产品,推出了SQL语句和事务处理的“原子性”和“非阻塞查询”,使用存储在"before image file"中的数据来查询和回滚事务,从而避免了读锁定(read lock)的使用(虽然通过使用表级锁定限制了它的吞吐量)。
遗憾的是,由于厌倦了无休止的软件调试,RSI的第一个员工Scott带着他的猫Tiger离开了公司。
1984年10月,ORACLE发布了 Ver4.0 产品。产品的稳定性总算得到了得到了一定的增强,达到了“工业强度”。这一版增加了读一致性(read consistency),这是数据库的一个关键特性,可以确保用户在查询期间看到一致的数据。
1985年,ORACLE发布了Ver5.0 产品。实现了可以在Client/Server模式下运行的的RDBMS产品。还发布了ORACLE并行服务器(ORACLE Parallel Server ,OPS)提供集群服务。
1986年,发布了 Ver5.1 产品。支持分布式查询,允许通过一次性查询访问存储在多个位置的数据。并且,在1986年3月12日,ORACLE公司以每股15美元公开上市。
1988年,ORACLE发布了Ver6.0 产品。由于过去的版本在性能上屡受诟病,Miner带领着工程师对数据库核心进行了重新的改写。引入了行级锁(row-level locking)这个重要的特性,也就是说,执行写入的事务处理只锁定受影响的行,而不是整个表。这个版本引入了还算不上完善的PL/SQL(Procedural Language extension to SQL)语言。第6版还引入了联机热备份功能,使数据库能够在使用过程中创建联机的备份,这极大地增强了可用性。同时在这一年,ORACLE开始研发ERP软件。
到此为止,ORACLE已经完成了原始积累,看起来以后的道路会越来越顺利,但恰恰就在这个时候,两个高速发展留下的弊病暴露了出来。
第一个是测试不足。ORACLE数据库从一开始就是只有开发,没有专业的测试和专业的测试人员,都是客户给免费测试。这种开发模式在早期软件规模较小时没有太大问题,但是随着各项功能增加,软件规模的变大,Bug数开始变得不可控制。客户的忍耐也到了尽头,在第六版刚发布之后,很多迫不及待开始使用的用户就怨声载道。这个问题也真实的反映了软件开发产业的一个通病,就是市场部门为了销售业绩会对产品的安全和性能进行各种夸大的宣传,并且给开发部门压力,加快产品的迭代速度,而开发部门只能为了速度牺牲安全和性能,把明显测试不足的产品仓促的推向市场,让客户帮忙测试(这一点从ORACLE的Bug DB里记录的数十万个Bug就可以想到了)。
第二个是财务问题。这也是一个普通公司到上市公司的初始阶段的通病。因为没有上市之前财务管理不规范,上市之后各项监管制度完善之后,就会把以前的各种问题暴露出来。ORACLE也是一样,1990财年第三季度报表的公布引爆了一切。财务人员发现了1500万美元的坏帐,并且公司利润距离预期相差甚远。接下来的时间里,大公司病的诸般症状接踵而来,面对股东的指控,股票一落千丈,公司前景暗淡,甚至面临破产。
幸好ORACLE公司的管理者及时地发现问题,一方面加大开发投入,放缓迭代速度,一方面下大力气整顿财务,削减开支,裁退大量销售人员,同时聘用了专门的管理人才。
终于在1992年6月,ORACLE Ver7.0 产品才终于闪亮登场。这一次公司吸取了以前的教训,听取了用户的多方面的建议,集中力量对新版本进行了大量而细致的测试。该版本增加了许多新的性能特性:分布式事务处理功能、增强的管理功能、用于应用程序开发的新工具以及安全性方法。ORACLE7还包含了一些新功能,如存储过程、触发过程和说明性引用完整性等,并使得数据库真正的具有可编程能力。这个版本还在原有的基于规则的优化器(RBO)之外引入一种新的优化器:基于开销的优化器(Cost-Based Optimizer , CBO)。CBO根据数据库自身对对象的统计来计算语句的执行开销,从而得出具体的语句执行计划。在以后的几个重大版本中,ORACLE的工程师们逐步对这个优化器进行改进,CBO逐渐取代了RBO。这也是ORACLE数据库里含金量最高的两个地方之一(另一个是RAC的Cache Fusion)。
1997年6月,ORACLE 8i 产品发布。“i”代表Internet,这一版本中添加了大量为支持Internet而设计的特性。这一版本还为数据库用户提供了全方位的Java支持。支持面向对象的开发及新的多媒体应用。
2001年6月,ORACLE 9i 产品发布。这一版本中发布了Real Application Clusters(RAC)功能。虽然第五版ORACLE就开始开发ORACLE并行服务器(ORACLE Parallel Server ,OPS),并在以后的版本中逐渐的完善了其功能,不过,严格来说,OPS只是一个集群环境,但是并没有体现出集群技术应有的优点。9i的RAC使得多个集群计算机能够共享对某个单一数据库的访问,以获得更高的可伸缩性、可用性和经济性,称得上是真正的应用集群软件。
2002年3月,ORACLE 9i 第2版产品发布。这一版本中发布了本地的XML数据库、自动管理、Data Guard等高可用方面的特性。
2003年9月,ORACLE 10g 产品发布。“g”代表“grid ,网格”。这一版的最大的特性就是加入了网格计算的功能。何谓网格计算?网格计算可以把分布在世界各地的计算机连接在一起,并且将各地的计算机资源通过高速的互联网组成充分共享的资源集成。通过合理调度,不同的计算环境被综合利用并共享。听起来玄幻无比,然而却没有啥具体新功能推出。不过,ORACLE从这一个版本,开始把重点放在了软件的自动化管理(例如ASM)和性能优化(例如AWR和ASSM),还有 DBMS_SCHEDULER和 Datapump之类的管理工具。
2005年9月,ORACLE 10g 第2版产品发布。加强了安全方面的功能(例如TDE、ROLE、PASSWORD)和 SQL、 PL/SQL的功能 。
2007年8月,ORACLE 11g 第1版产品发布。这一版本推出了众多新功能和增强功能,详细内容可以参考以下网址:http://www.orafaq.com/wiki/Oracle_11gR1
2009年9月,ORACLE 11g 第2版产品发布。这一版本推出了“RAC One Node”功能,使得单机数据库也可以使用RAC构成的高可用性等高级功能。https://www.orafaq.com/wiki/Oracle_11gR2
2013年7月,ORACLE 12c 第1版产品发布。这一版本推出了“multi-tenant”功能和“In-Memory”功能,“multi-tenant”功能即CDB/PDB架构,使得以前一台服务器上多个INSTANCE的构成方法变成了多个数据库以共同数据库( CDB)下挂载多个Plugin 数据库(PDB)的构成方式。“In-Memory”功能即在SGA中开辟出一块空间,以“列存储”方式加载数据,提供类似数据仓库需要OLAP计算支持。另外,“c”代表“cloud ,云”。表示ORACLE数据库开始向“cloud”发力了。
2017年3月,ORACLE 12c 第2版产品发布。这个版本并没有推出革命性的新功能,但是在传统RDBMS之外的功能(例如类似分布式计算的sharding功能,原生的Json支持功能等等)。另外,这个版本也是传统的基于功能版本升级体制的最后一个版本,从下一个版本开始,ORACLE数据库开始以年度为单位进行Release,例如,18c、19c、20c、21c……。你也许会说,这不是又走回头路了。确实像回到了老路上,但又有很大不同,因为:第一,ORACLE已经不是几十个人的小公司了,而是一个拥有数万名研发工程师的巨无霸,有能力在较短的时间内进行产品的迭代。第二,虽然以年度为单位安排Release计划,但是并没有保证每一个版本都有Release产品,就像去年的20c就没有真正Release,而是作为一个开发版本存在。
Release Schedule of Current Database Releases (ドキュメントID 742060.1)
下面是一个可以查询11.2之后的新功能的网页,有兴趣的同学可以自行参照。
https://apex.oracle.com/database-features/
絮絮叨叨的写了几千字,有点儿累了,今天就写到这儿吧。
下次想从面向用户功能之外的角度谈谈ORACLE数据库可以借鉴的地方。
1. OWI的设计 2. 动态视图 3. Diagnostics
下面说一下上篇文章里留下的思考题。
既然flash memory的寿命有限,那为什么我们在使用的过程中没有发现容量逐渐变小呢?
因为,每个SSD厂商都预留了 flash memory颗粒,也就是说你买的1GB的SSD硬盘上实际粘贴的闪存颗粒要比1GB多得多。每当有的颗粒到了寿命之后,就会被弃用,所以你在相当长的时间内是不会看到SSD的容量变小的。
Do you get it?
转:
数据库漫谈(六)
这篇关于数据库漫谈(六)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27消息中间件底层原理资料详解
- 2024-11-27RocketMQ底层原理资料详解:新手入门教程
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器