欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

云栖PPT下载 | 开源界大咖集体现身,开源数据库专场重点再回眸! postgresqlmysqloracle阿里巴巴sql 

程序员文章站 2022-03-26 19:18:46
...
阿里云开源数据库项目最新发布
--------------

**阿里巴巴集团副总裁、阿里云智能数据库事业部总裁、高级研究员李飞飞(飞刀)、阿里云数据库资深技术专家楼方鑫(黄忠)以及阿里云数据库技术专家傅宇(齐木)**三位阿里云技术专家为大家介绍了最新的阿里云开源数据库项目。

### 李飞飞:

数据库在过去这么多年,尤其近几年发展如此迅速的核心原因之一就是开源生态做出了很大贡献。难以想象如果没有开源的MySQL、PG、HBase、MongoDB以及Cassandra等,只有Oracle、DB2、SQL Server等,今天世界会是什么样子?那必然还是寡头垄断的局面。因为核心的OLAP系统难以实现,需要经过大量试错才能不断完善。而开源生态为数据库提供这样的一个平台,帮助数据库快速迭代,使得开源数据库可以比肩商业数据库的能力。

对于阿里而言,AliSQL获得了2018年MySQL的社区公司贡献奖,这是因为AliSQL做了大量优化,比如实现了Sequence、表级并行复制以及隐式主键等。而做这些优化的驱动力是阿里内部的业务需求,并且对于技术的优化后续就会贡献回开源社区。 
![01.png](https://ucc.alicdn.com/pic/developer-ecology/4985323de0ad4af2931f3a5539ba59a6.png)

最新发布是让DRDS支持POLARDB,并且在2020年的某个时间,阿里云将会开源DRDS。DRDS完全由阿里自研,其中包含了Sharding、Unique Sequence、Parallel Query、Global Secondry Index以及Distributed Transaction。希望大家能够更加广泛地使用DRDS,如果有机会也贡献更多的代码,将DRDS做得更好。

![image.png](https://ucc.alicdn.com/pic/developer-ecology/7eab6a4355fa4d2aba451917b5314bb7.png)

### 楼方鑫:

AliSQL通过效率、性能、自主、稳定以及安全方面的不断改进,希望让业务、运维、研发和合作伙伴都能够感觉更“爽”。 
![02.png](https://ucc.alicdn.com/pic/developer-ecology/06e3bed648124450836083ca96bf25d9.png)

基于这个思路,阿里云在一年半之前就将主要精力投入到MySQL 8.0上面,这是因为MySQL 8.0更能够满足以上目标。MySQL 8.0具有Automic DDL、Instant Add Column、Window Function和Temp Engine的能力。而AliSQL在MySQL的基础之上还做了更多的优化,比如支持了TDE加密和SM4国密算法,并且重新设计了线程池,AliSQL Cluster支持三节点并能做到RTO为0等。 
![03.png](https://ucc.alicdn.com/pic/developer-ecology/4d5379ce78b94b75a4fc41343078235a.png)

MySQL官方版本也有线程池,而AliSQL线程池的区别在于连接数可以达到2万,并且能保持非常平稳的输出。首先,AliSQL严格控制了线程数来提升了CPU效率,做到了高性能。其次,AliSQL可以一键随时切换启用线程池,而无需重启实例。最后,AliSQL能够区分操作类型并实现智能优先级排队,并适用于所有业务场景。总之,AliSQL的线程池是完全重新实现的,并且性能也会超出期望。 
![04.png](https://ucc.alicdn.com/pic/developer-ecology/d2d27446ec384b6a9109989a17935489.png)

AliSQL Cluster可以总结出“三高”,即高可靠、高可用和高性能。AliSQL Cluster具有99.99%的可用性,事务数据具有强一致性,并且使用了Paxos智能并行发包实现高效同步。这样的“三高”使得业务、运维和研发都更“爽”。

SQL Outline是在数据库版本升级、增减索引、统计信息以及程序固化时来收集和编辑SQL关键路信息,并用持久化Hint固化执行路径的。

AliSQL基于MySQL做了很多性能的增强,实现了对象统计,并提供了完善的指标和多级维度。比如索引、SQL统计信息都能够一目了然,因此可以加速对业务的响应。这也说明在上云之后,如果想要服务好业务,还有很多工作需要做。 
![05.png](https://ucc.alicdn.com/pic/developer-ecology/51fb5a1917414537a2249266d2b9db3e.png)

AliSQL在5.6版本时做了开源,经过总结之后发现让官方合并AliSQL 5.6这条路走不通,因此也将对于AliSQL 8.0进行开源。在开源8.0版本的时候会吸收5.6版本的经验,想办法更高效地维护AliSQL开源项目。

### 傅宇:

在阿里巴巴业务中,DRDS和MySQL是相互配合,荣辱与共的关系。DRDS是阿里云提供的一个服务,全称是分布式关系型数据库服务。DRDS功能最简单概括就是分库分表,用户可以从DRDS接口上创建一个表,只需要在建表时指定分库分表的方式,剩下的工作由DRDS搞定,用户可以像操作普通表一样操作DRDS,业务层无需再做分布式相关的考虑。除此之外,DRDS还提供了读写分离、弹性扩容等能力。

下图是典型的DRDS部署拓扑,图左侧分为两层,Server层包含多个无状态的DRDS节点,DRDS节点向Load Balancer汇报心跳,如果出现宕机,Load Balancer就会将流量迁移到其他节点上,保证集群高可用。存储层可能使用RDS、POLARDB甚至列式存储。总体来说,查询会在Server层被转化成执行计划,在存储层具体执行并返回给用户。图右侧是DRDS的分析型只读实例,里面包含多个MPP Worker。对于复杂SQL,单台机器可能无法完成计算,此时就会将SQL的执行计划发往MPP集群来计算,并且不会对主库产生影响。 
![06.png](https://ucc.alicdn.com/pic/developer-ecology/278f21396bd840ecbeb29ace279d51fa.png)

DRDS的架构演进经历很长的过程,最开始只想着如何将分库分表做到极致。随着DRDS上云,企业级场景更加丰富,遇到了越来越复杂的SQL,需求推动着DRDS架构的重构。如今的DRDS架构最分为了网络、优化器和执行器。

SQL进入DRDS首先会经过Parser变成AST,之后经过Validator进行验证,通过验证之后转化成最朴素的逻辑执行计划,在经过SQL Rewriter和Plan Enumerator变为最优的物理执行计划,并交给Executor进行执行。 
![07.png](https://ucc.alicdn.com/pic/developer-ecology/19f733ca8c7c40c0b0e8e9d2bdbd0e24.png)

对于查询优化器而言,SQL Rewriter会对逻辑执行计划进行改写,它是基于启发式规则的优化器,也被称为RBO。SQL Rewriter会实现子查询的去关联化,并做算子Transpose,而为了实现极致下推,SQL Rewriter还做了Join Clustering。 
![08.png](https://ucc.alicdn.com/pic/developer-ecology/9b96af553f51410ebfeec50bc0b61408.png)

查询优化器的第二步是Plan Enumerator做的物理优化,主要负责Joint Recorder和算法选择。DRDS采用的最为通用的Volcano/Cascades优化器,经过这一过程会拿到理论最优的物理执行计划。

DRDS查询优化器的优化过程是基于代价的,而代价最初计算来自于统计信息,这些统计信息将会计算代价并带入算子Cost Model中进而计算执行计划的总体代价。 
![10.png](https://ucc.alicdn.com/pic/developer-ecology/8740c8573ac1455d809a9abc144267e7.png)

查询优化无法瞬间完成,因此需要管理执行计划,可以将执行计划存储下来加以复用,提升优化速度。DRDS使用了基于Chunk的执行器,使得每个算子一次性产出一批数据。在Chunk里面数据按列存储,分析速度更快,计算效率更高。Parallel Query部分会启动多个Worker进程并对结果加以汇总。

并行处理--MySQL发展的趋势及中国本地应用实践
-------------------------

中国计算机行业协会开源数据库专委会会长,极数云舟CEO周彦伟为大家分享了MySQL的基础架构和ArkDB的并行化实践。

#### MySQL基础架构

MySQL Server引擎的好处在于大家可以基于此实现自己的数据库。目前,MySQL已经发布了8.0版本,可以看到这么多年MySQL官方其实一直在进步。MySQL在并行和提高速度方面做了很多工作。在引擎方面,最开始MySQL使用的是MyISAM,现在默认是InnoDB,这是因为MyISAM的并行处理能力不够好,而InnoDB实现了行级锁,还支持了MVCC,增加了并行读写的能力。在引擎层面,从MyISAM过渡到InnoDB是一个巨大的进步。 
![11.png](https://ucc.alicdn.com/pic/developer-ecology/c92cc7c32c00494eb21f221190ecac60.png)

#### InnoDB的发展

InnoDB也在MySQL 5.6、5.7、8.0的演进过程中发生了很大变化。InnoDB最早采用共享表空间,一堆表放在一个文件里,效率极差。后来InnoDB采用独立表空间,一个表放在一个文件里,再后来演变到一个表分成多个文件。这样的变化是希望提升数据的处理速度。而到现在为止,MySQL 8.0还是落在单台服务器上,只能利用单台机器的计算和存储功能。

现在,MySQL的进步其实就是InnoDB的进步,这在一些参数的变化上有所体现。此外,Inno DB也对Undo进行了优化,5.7之前ibdata文件中包含Undo段,导致文件空间无法回收。5.7版本之后,Undo段从ibdata文件中独立出来,就可以实现并行读写。

很多年的时间,MySQL扩展都是基于Replication的。现在,MySQL官方也做了集群化的处理。5.6之前是单线程复制,5.7版本中增加支持Write Set级别的并行复制。

总结而言,MySQL数据库自身也在不断进步,到如今MySQL 8.0版本已经做得很不错了,能够支持复杂查询并且效率不错。

#### 并行化在ArkDB的实践

虽然MySQL官方近几年很努力,但是依旧存在一些不足之处,因此ArkDB也希望能够基于MySQL做出一些贡献。ArkDB在MySQL的基础上做了大量并行化实践。在引擎层,ArkDB实现了计算和存储分离,通过分布式存储实现了并行读写优化。在集群层,ArkDB实现了自适应多线程物理复制,极大地提升了数据复制效率。在接入层,ArkDB实现了对称式中间件集群路由,是接入层成为无状态的,能够承担大规模的访问应用。在高可用方面,ArkDB实现了去中心化分布式哨兵守护集群。在迁移层,ArkDB实现了多源端多通道多结构实时同步,可以实现精确到行级的运行。 
![13.png](https://ucc.alicdn.com/pic/developer-ecology/01d830d4454a43cd94fd8696ef1b2dc1.png)

ArkDB在引擎层既基于索引树存储数据,又将数据分片地存储在索引结构中。基于分布式存储实现了并行读写优化,基于索引结构实现数据并行分片,基于对象存储实现并发读写支持,基于分布式存储支持了多副本和快照备份。ArkDB在集群层实现了自适应多线程物理复制、物理日志的多线程读写,并基于从库的多版本控制实现了多节点无锁同步。ArkDB在迁移层充分利用了各种并行方式,从前端多源端,到多通道处理实现了在数据打通过程中尽量提升效率和传输速度。

PostgreSQL 12 迎来新机遇
-------------------

Postgres中国社区,太阳塔科技创始人赵振平为大家分享了PostgreSQL 12带来的新机遇。

目前,PostgreSQL 12的开发速度非常快,今年5月份发布Beta 1版本,6月份发布Beta 2版本,8月份发布Beta 3版本,9月份发布Beta 4版本,并且有可能成为了最后一个Beta版本,这意味着PostgreSQL 12即将正式发布。虽然每个Beta版本对大家而言可能只是一个小版本,但对于PostgreSQL社区而言,却意味着大量修改,比如在PostgreSQL 12的Beta 3版本中修改了2个安全issue并且修改了40个小Bug。截止到目前,PostgreSQL 12的Beta版本总共做了161项修改,整体而言修改非常大,很多技术的修改和完善将为PostgreSQL带来很大的提升。而且在未来,PostgreSQL基本上每个季度都会推出一个小版本,每年发布一个大版本。 
![14.png](https://ucc.alicdn.com/pic/developer-ecology/e41d882be80c4316acabfb30d9d4a67f.png)

如今PostgreSQL等开源数据库正在面对新的机遇,除了数据库领域的国产化之路,世界各地方都开始了“去IOE”。而围绕PostgreSQL可以做很多创新,企业可以基于PostgreSQL开发产品,甚至将PostgreSQL和后台产品打包销售到国外,开发者还可以基于PostgreSQL开发新的数据库。而对于太阳塔这样的公司,也可以更好地提供PostgreSQL技术服务。

之所以选择PostgreSQL,首先是因为它历史悠久。PostgreSQL在互联网产生之前就已经存在了,其创始人Michael Stonebraker获得了图灵奖。从DB-Engines的数据来看,PostgreSQL在一路飙升。并且PostgreSQL和SQL Server等主流数据库同宗同源,都是从Ingres衍生出来的。

从技术的角度来看,PostgreSQL也具有很多的优点。第一点就是并行,这一能力在PostgreSQL 10时开始成熟,在PostgreSQL 11时发挥得淋漓尽致。PostgreSQL的并行能力主要体现在并行扫描、并行连接以及并行Append三个方面。第二点是稳定性,从版本迭代的过程可以看出,PostgreSQL是经过千锤百炼的。第三点是安全,大家可能对于开源数据库的安全性存在一些误解,其实PostgreSQL是非常安全的,它提供了认证方式、通道加密和数据加密一套完整的安全机制,基本可以认为Oracle有多安全,PostgreSQL就有多安全。第四点是功能强大,PostgreSQL在功能上还有超过Oracle的地方,比如索引更丰富、计时功能更强大、分布式数仓功能更加成熟。

此外,之所以说PostgreSQL会有很大机遇的另外一个原因就是它的开源协议,大家可以随意使用、拷贝、分发,而且可以随便修改,没有任何版权风险和专利风险。因此,如今很多数据库都是基于PostgreSQL,也正是因为它的开放协议和开放策略,提供了很大的商机。

实践已经证明,基于PostgreSQL不仅诞生出很多公司,也诞生出很多的产品,比如独角兽公司Greenplum。此外,PostgreSQL具有强大的生态圈,国际社区的凝聚力和开发能力能够碾压一切,PostgreSQL采用的是开放式体系结构,也就是插件结构,开发后可以很容易地反馈社区。而且PostgreSQL的代码和贡献的质量都非常高。

开源数据库在平安科技的应用实践
---------------

平安云数据库及存储产品团队总经理汪洋为大家分享了平安科技的开源数据库选型原则以及应用实践。

#### 为何使用开源数据库

作为一个管理着数万亿资产的金融王国,平安为何要引入开源数据库?其实,技术永远是服务于业务和场景的。平安在2013年做完银行新核心的“换心手术”之后,开始考虑向互联网、数字化转型。在这一过程中,一方面需要高性能、高可靠、高可用的系统架构,另一方面需要快速地捕捉市场需求,并快速转换为IT需求开发出产品,再投入市场进行验证。如果使用传统的商业数据库,在敏捷地捕捉市场需求之后快速将产品推出市场方面就显得捉襟见肘,这是平安引入开源数据库的原因之一。

在敏捷方面,微服务解决了单体架构的很多问题。第一点,单体架构牵一发而动全身,修改风险很大,开发和测试周期很长,新功能的上线速度很慢。第二点,在单体架构中,为了扩容某个组件或模块需要对整个系统进行扩容,这是一种浪费,而微服务架构则可以针对某一个服务进行扩容。第三点,微服务可以满足不同技术栈开发人员的需要,不同团队可以使用不同的技术栈进行开发。

如今,一种数据库难以适应所有业务场景的需要,需要依靠混合持久化数据库来解决不同数据存储需求。One For All时代已经过去,数据库即便做到“大而全”,也难以涵盖所有场景,现在要做的是“Best Fit”,针对某一种业务和负载,使用最适合的数据库。此外,传统的商业数据库过于沉重,而开源数据库则非常轻量。这些也是引入和推广开源数据库的原因。此外,即便使用开源数据库,也很难满足所有业务的需求,需要能够基于开源数据库进行二次开发,而这也是商业数据库无法实现的。

#### 开源并不意味着免费

引入开源数据库是必然趋势,但开源并不意味着免费。虽然License是免费的,但还需要付出其他成本。掌握开源技术需要一个过程,需要学习成本;从商业化产品到开源数据库的迁移需要迁移成本;迁移完成之后还可能会增加运维成本以及风险,这些成本都需要在引入开源数据库的时候考虑。

#### 如何选择开源数据库

首先要看业务场景,因为技术是服务于业务场景需求的。再看是否有合适的替代方案,比如PostgreSQL就是Oracle比较合适的替代方案。还要考虑现有开发人员的技能,否则会非常痛苦。此外,需要考虑现有数据库的负载模式、开源社区的活跃度、市场份额以及行业知名度。另外还需要关注开发语言和数据库类型,需要与团队及业务场景适配。也需要关注数据库技术的发展趋势,比如存储和计算分离、云原生、分布式等。最后一点就是不要使用太多开源产品,每类选择一种即可。

#### 开源数据库引入和应用策略

引入和应用开源数据库也有一些策略:区别现有和新建的系统,选择不同策略,可以降低迁移风险和成本。将数据库进行分类,先从不重要的库开始迁移,积累经验,最小化风险。划分不同的业务条线,先从要求不高的业务条线下手。实现数据库产品引入过程中的Owner机制,做到“术业有专攻”。制定数据库架构、运营和开发的指南手册。还需要对运营、开发和DBA进行培训。针对遇到的问题持续进行架构优化,积累开发和运营经验。还需要通过学习源代码来快速追踪到根本原因,并防止问题的再次出现。如果现有功能满足不了业务需求,可以组建研发团队进行二次开发。最后一点就是拥抱开源社区,建立自己的生态,实现与开源社区的良好互动,进而实现双赢。

#### 数据库选型策略

在关系型数据库方面,因为平安属于金融公司,所以只要涉及到资金交易都需要极高的数据安全性和一致性以及7\*24小时不间断的服务。不涉及资金交易的则可以根据具体业务场景选择。在分布式关系型数据库方面,有两种数据库选型——自研的PDRS和开源的TiDB。

#### 开源数据库推广成果

现在平安总共有将近三万个数据库实例,其中Oracle占比非常低,Redis最多,PostgreSQL次多,也有一些MongoDB和MySQL实例。

#### 发展路径

总结而言,数据库的发展路径未来将会支持容器化部署,和K8S更好地结合,甚至实现Serverless化,也会出现更多的自研数据库和基于开源数据库研发新的功能。最后一点,就是在云上可以收集大量运维数据,进而实现AIOps。

传统数据库到开源数据库迁移的工具化流程
-------------------

迪思杰DSG公司创始人、总裁韩宏坤为大家分享了传统数据库到开源数据库迁移的工具化流程。

现在已经到了数据库历史的一个拐点,各个企业纷纷从高价值的商业数据库走向*的开源数据库,并且混合架构时代已经来临,各种数据正在快速地流动。

DSG需要服务于各种行业的客户,而他们的系统千差万别。DSG拥有完全自研的技术,因此能够快速跟进各种技术的变化。DSG的核心技术优势在于几乎能够涵盖所有主流数据库日志的实时分析技术,并且创造了一种统一的数据库数据表达语言,因此DSG可以使用较少的研发资源创造很大的价值。目前对于中国而言,在数据库方面有巨大的压力和需求,正因此才驱动着数据库技术走向极致。阿里如此,DSG也如此。

DSG具有强大的数据处理和复制能力,对于Oracle的迁移而言,机遇在于PostgreSQL,实践也证明了PostgreSQL。各个企业都需要做迁移,而对于工程人员而言,可以说“兵贵神速”,因此DSG和阿里合作对Oracle的迁移方法论做了整体梳理。Oracle迁移的客户痛点主要有6点:

>  源数据库对象关系、依赖关系复杂;  
>  数据库和应用改造工作量不明确;  
>  目标库规格不明确;  
>  迁移割接业务停机时间短;  
>  需要同步进行数据对比验证;  
>  需要数据回流保证安全和应用回切。

对于Oracle迁移的解决方案而言,首先要通过采集和评估提前发现定位问题,不是在迁移的时候才发现问题,而应该是在迁移之前,就完成对数据库对象关系以及应用和库之间关系的梳理,发现可能存在的问题并作出规划。其次要做自动兼容性识别和转换,自动地发现不兼容的对象,并自动梳理数据库对象之间的关系,从头到尾自动地生成完整的迁移报告。这样一来,用户就能够知道自己应该负责什么,DSG应该负责什么。最后还可以实现高效低干扰的增量同步和数据实时对比,DSG可以帮助客户以每小时300G到500G的速度进行数据库迁移,并实现快速验证。

阿里推出了ADAM计划,将整个数据库和应用迁移的流程都定义得非常清晰。ADAM提供了功能强大的采集、画像、评估、改造以及迁移系统。ADAM的智能画像系统能够为用户客观地进行Oracle数据库画像,分析其特性、性能、容量以及外部依赖等并以图形化方式展现出来。ADAM的智能评估系统能够分析数据库对象以及SQL的兼容性,识别风险SQL,将PLSQL转成Java以及自动对数据库对象进行兼容性转换。ADAM的智能改造系统则会为用户提供一个数据库报告,并通过仿真为用户提供数据库改造建议。 
![15.png](https://ucc.alicdn.com/pic/developer-ecology/5acf94e6343c4ff0bdaf56aab8fe51ee.png)

当ADAM的工作完成之后,DSG就负责打通数据迁移的最后一公里了。DSG提供了一个非常强大、完整的数据库迁移工具,实现了以ADAM迁移计划为核心的完整方法论,打通了数据迁移的最后一公里。DSG可以实现场景化、自动化、流程化的数据全量迁移、增量迁移、数据校验、数据修正等,帮助用户轻松、高效地迁移到云上或者POLARDB一体机等。

DSG和ADAM的核心能力结合起来就能够形成Oracle迁移智能全链路解决方案,并且在国内的很多客户企业中已经落地。这么多年来,DSG一直在深耕数据迁移方面的底层技术。而且DSG for ADAM深度集成了阿里云的技术,实现了数据迁移、数据比对等过程的可视化。此外,DSG for ADAM数据库迁移方案对于正常业务的干扰极小,并且可以在中间状态、云上云下环境中部署。为了打消客户对于数据库迁移的疑虑,DSG还提供了完善的数据回流功能。 
![16.png](https://ucc.alicdn.com/pic/developer-ecology/77ca313f948342f0840004361cc7d671.png) 
DSG拥有真正的底层技术,因此可以和阿里云一起推出更多的产品和相关的服务,比如加入ETL功能增强Oracle迁移大脑,支持blob to oid等更多类型方案,异构在线DDL转换能力,加强迁移指导评估能力,支持POLARDB、ADB等更多全新的目标数据库等。

DSG相信未来是开源和PostgreSQL的时代,Oracle被取代的速度可能非常快。而且国家也提出了软件国产化的要求,PostgreSQL为核心的数据库很可能是一个突破口,因此对于信息架构的管理人员而言应该抓紧行动。

数据迁移能力只是DSG的一部分,DSG在数据备份、容灾、集成和汇集等方面也非常强大,DSG能够适应各种各样的异构数据库,并且可以在数据采集和实施过程中进行转换,可以帮助用户获得数据迁移的*。

传统数据库DBA到开源的技能和心理切换
-------------------

云和恩墨创始人,ACOUG盖国强从天道酬勤、认识时间和大道至简三个方面分享了DBA的学习探索之路。

现在是一个“相向而行”的时代,无论大家如何讨论Oracle,但是没有一个数据库敢说自己超过了Oracle,而都在学习和追赶Oracle的特性。作为技术人,无论曾经熟悉什么技术,在这个快速变革的时代,都会面临学习的挑战,都会感到焦虑。如今,随着数据库技术的飞速发展,DBA应该进行“战略转移”。

#### 天道酬勤

无论对于程序员还是DBA而言,学习方法可以分为6步。第一点就是打好地基,“为山九仞,始于垒土”,学习任何技术将基础打牢都是前提,这样才能灵活运用这些技术解决现实中遇到的困难。第二点是学会思考,很多人虽然学习了很多知识,但是没有独立思考的意识,在学习过程中一定要学会自己设问、自己解答,这样的历程可以促进自己成长。第三点是掌握方法,总有一种方法可以帮助你加快学习速度,其中最经济的方法就是“由点及面,由浅入深”,抓住遇到的任何一个问题,深究到源码层,这样由知识点到线再到面连在一起。第四点是养成习惯,对于DBA而言,严谨是非常重要的,任何一个疏忽都可能导致灾难。第五点是实践修正,最有助于个人成长的是高压环境,通过实践来验证知识体系。最后一点就是臻于至善,走过千山万水,最后得以“见微知著,大道至简”,可以轻而易举地解决困扰别人已久的问题。 
![17.png](https://ucc.alicdn.com/pic/developer-ecology/20ab4f07f0404894b3b1f66f68bf4eee.png)

总结了一个学习公式:**兴趣+勤奋+坚持+方法≈成功。**首先是兴趣,兴趣是最好的老师,除了痴迷于技术的人,大部分人在深入学习时都会感到枯燥。因此在学习时,最好的方式是找到兴趣,然后培养、呵护兴趣,遇到挫折、打击时不要放弃。其次是勤奋,所有做出卓越成绩的人都是勤奋的。第三点就是坚持不懈,不要频繁地调整方向。第四点就是找到适合的方法。有了这些条件就约等于成功,即使不一定真正能够做到世人看到的成功,但可以无愧于心。

在这个时代,学习的速度慢就是退步。如今的数据库世界可以说是百花齐放,目前全世界有超过400种数据库,可以分为关系型和非关系型,还可以分为操作型和分析型,这样一横一纵可以分为四大类,而进而可以细分成小类。今天,国产数据库也正在崛起,这是数据库人最好的时代。

#### 认识时间

运用方法来加速学习,首先要从时间开始。其实在研究数据库时,最重要的一件事情就是考虑数据库如何计算时间。数据库的任何时间都需要度量,而在分布式环境里面更需要关注时间。数据库中通常四种计时方式,逻辑的、物理的、混合的,还有全局统一时钟TSO。数据库需要计时的原因有很多,如事务需要排序,MVCC需要靠时间控制等,所以时间必不可少。

Oracle数据库是怎么计时的呢?其实Oracle数据库依靠SMON\_SCN\_TIME表计时,绝大多数Oracle修复完启动时都会出现相关错误。Oracle建立了物理时间和Unix Time的对照表,因此在数据库出故障的时候,这张表大概率会发生不一致。再进一步,数据库如何和操作系统打交道的呢?通过跟踪Oracle进程就会发现,它会通过gettimeofday来获取时间。

MySQL又是怎么计时的呢?MySQL提供了很多函数来转换Unix Time。如果大家关注MySQL Binlog,就会发现MySQL的日志里面有大量Timestamp,这些就是Unix Time,这是因为MySQL在下面引用了now函数。MySQL是开源的,因此想要了解差异只需要打开源码就可以,因此从Oracle转向MySQL是很容易的。MySQL使用字节存储Timestamp,而Oracle则是将SCN作为数据库内部时钟。

在PostgreSQL里面,Unix Time无处不在。有趣的是在PostgreSQL文档中写道它所有的时间计算都是使用儒略历法计算的,这个历法从公元前4713年开始计时,理论上可以计算到未来任何一天。

#### 大道至简

接触新技术时,心理恐惧是最大的障碍。当你克服了心理恐惧就胜利了。云和恩墨最早研究了数据库是怎么初始化和启动起来的,于是就跟踪它,最后发现Oracle是通过初始化表的引导启动起来的。这张表指向了block file 377,后续再深入探索读取的文件地址。但是其实在最开始的时候就能够看出读取的文件地址,这说明如果我们能够跳出思维惯性并战胜心理恐惧,就能够战胜困难。

理想中的深入浅出是一种经历千难万险、峰回路转之后,看山还是山的平淡。有时候能感受到会心之意是非常难能宝贵的,运用之妙,存乎一心。我们应该花力气去积累、深入、思考,然后才能举重若轻。

 

 

 

 

[原文链接](https://link.zhihu.com/?target=https%3A//yq.aliyun.com/articles/722263%3Futm_content%3Dg_1000083045)

本文为云栖社区原创内容,未经允许不得转载。