《高并发Oracle数据库系统的架构与设计》一1.3 在Oracle的世界里

1.3 在Oracle的世界里

如果你是一位Oracle数据库的使用者,那么我们说你将是立足在Oracle的世界里的。本书的主旨也是以此为出发点,立足Oracle的世界,以海纳百川的胸怀选择性吸收各种数据库的使用。
立足点的不同,同样会影响到我们视角不同,那么在Oracle的世界里的高并发数据库系统架构设计将会是怎么样的呢?这也将是本书需要给读者们介绍的。
相信在每一个Oracle数据库用户的眼中都有其独特的风景,对Oracle的理解可以是技术的,更可以是艺术的。在讨论中,我经常提及的一个观点:“将技术的东西当成一种艺术去做,那你将不再是简单的技术者,而是更富创造力的艺术家。”

1.3.1 数据库森林体系

在这里,我们也不妨东施效颦一回,模仿经济学里的“布林顿森林体系”,架构一个属于数据库领域的“数据库森林体系”。
数据库森林体系,是指以Oracle数据库为核心的多种数据库集群工作的生态体系。该体系的特点应该是:
应用系统核心内容和性能直接与Oracle数据库挂钩;
其他类别和功能的数据库与Oracle核心库挂钩;
其他类别和功能的数据库与Oracle数据库按业务需求实现数据同步与交互;
其他类别和功能的数据库作为Oracle核心库的扩展,分摊前端或外围业务支持。
图1-5所示为一套比较完备的数据库森林体系架构图。秉承以Oracle核心库为中心,从业务逻辑层面、数据库功能层面两个维度展开纵横方向的扩展。

Oracle核心库与Oracle子系统库、MySQL子系统库之间,使用GoldenGate实现即时的数据同步,MySQL子系统库是单向同步,它的角色更像是一只伸出去的手,处理前置业务。
Oracle核心库与灾备库之间通过Data Guard功能实现异步同步,起到灾难备份的作用,特殊情况下,也是可以临时打开使用的。
同样,在核心库与ADG库、T-1交易库之间也是通过Data Guard功能实现数据同步。ADG库可以看成是核心库即时的映像,服务于只读业务;T-1交易库则可视为过期的核心库映像,可以给时效要求不高的业务提供读写服务。如果必要的话,通过ADG库衍生出一些开源数据库的业务应用,就像伸出去的另一只手,处理前置业务。
对于前面提到的Oracle核心库的高并发热点争用问题,可以将这部分业务分离到前置的TimesTen内存数据库中,提高高并发会话的响应速度,其可通过TimesTen提供的方法和接口实现与Oracle核心库的即时数据同步。
当然,数据库森林体系也可以视为一种高并发热点争用问题的解决方法论,不要求全盘实现,可以选择性地搭建,满足了需求就是最佳的架构设计。
说到高并发处理能力的提升,就会不只一次地被问及Oracle数据库的RAC架构。我只能说RAC只是一种高可用的解决方案,对于高并发问题,它未必擅长。高并发热点问题,往往成了它的短板,RAC环境甚至会加剧问题的影响程度。举个例子来说,我们将会在高效索引设计章节提到的高并发会话导致主键索引分裂的等待事件——“enq:TX-index contention”,如果这个问题不先解决掉,从单节点到RAC的迁移后,问题将更加显著。
从历史来看,国人好像都很喜好RAC数据库架构,并无形中夸大了RAC数据库的作用,集高可用、高可靠、高并发、高性能的光环于一身。RAC一度风行的时候,技术人员如果不会RAC都不好意思说自己是Oracle数据库的DBA,公司如果没有RAC数据库都不好意思说自己的业务量大。这和前面提到的盲目夸大去IOE的现象是一样的,光环效应是要不得的。
然而,RAC确实也是一个不错的东西,如果在节点应用之间尽可能地实现了业务的独立,也就是说按节点完全区分业务应用,其处理并发的能力是有一定的优势的,但是是在解决了数据库结构分散的前提下。
为什么这么说呢?我们知道不论是RAC数据库还是单节点数据库,物理存在的数据库只有一套,如果数据库内部实现了业务逻辑上的必要隔离,各节点就能各行其道,反之,各节点的争用会更加剧烈。与其纠结在这个问题上,不如跳出来看问题,为什么不干脆将其按业务逻辑拆成多个库呢?必要的共享数据,可以通过即时同步来实现。
如图1-6所示,在左边RAC架构中,实例1对应业务1,有其独有的数据部分,实例2对应业务2,也有其独有的数据部分,两种业务有一定的关联性,所以还存在共享数据部分。演变成右边的架构,将其拆分成两个独立的单节点数据库,其中数据共享时效要求较低的进行数据库间即时同步,时效要求很高的冗余到各自业务数据库中。这样做虽然数据库的总容量大了,但是架构简单了,少了内存的即时同步,业务并发处理能力也提高了。回过头再来看一下我们的数据库森林体系,核心库、子系统库以及各种功能库,不就是数据库按业务逻辑拆分的结果吗?

近年来,大家也能更加理性地看待RAC数据库架构了,与其面对额外的采购成本和运维成本,不如干脆拆开来,用简单的架构来取而代之,这也正是大道至简的精神。
我们说高并发处理未必是RAC的强项,但高可用就一定是了。当一套数据库应用系统提出如下需求的时候,我们将毋庸置疑地给出RAC的解决方案:
业务7×24小时在线;
尽可能短的故障停机修复时间,10分钟以内、5分钟以内,甚至更短。

1.3.2 大道至简

在此我们不得不先提到一个概念,就是数据库架构师的“术”与“道”。业内很多数据库架构师往往是技术水平比较高的DBA的升级版,这是一个比较典型的以“术”为导向的结果,一切以技术说话,这往往造就了架构的局限性,甚至凡事唯技术论。好比很多项目在制定目标的时候,会把某项新技术的实现作为目标之一,造成驴唇不对马嘴的后果。一个成功的数据库架构师应该是以“道”为导向,那何为数据库架构师的“道”呢?在这里我先卖一个关子,将在本书的第9章中展开讨论。
我曾经在一次技术沙龙上跟几位朋友讨论过一个话题:如何看待数据库五花八门的新特性呢?当说起需求是高并发处理的数据库的时候,大家达成一种共识,就是架构需要设计得充分简单,简单了才能灵活地扩展,对于一些不熟悉或者没有实战经验的新特性,可以不用就不要用。
然而,设计简单的架构并不意味着架构简单的设计,越是简单的东西越是考验设计者的思想,需要对简单的东西充分细化。立足在Oracle的世界里,有哪些是至简而至要的东西呢?就是数据库森林体系中蕴藏的设计的大道。
数据库森林体系看似复杂的架构背后,至简的大道无外乎就是对表、索引、优化器设计的把握,以及以核心库为中心的功能数据库与前置数据库的纵横扩展。本书将分作两个部分,对这两项内容具体展开阐述,其目的不在于帮助读者解决某个具体的高并发问题,而是旨在分享一种方法论,开辟一种思路。或许你在阅读的时候能够得到一点启发,演化出更高明的观点,那么我写作本书的目的也就达到了,也正是我的大道。

时间: 2024-08-31 13:55:34

《高并发Oracle数据库系统的架构与设计》一1.3 在Oracle的世界里的相关文章

《高并发Oracle数据库系统的架构与设计》一1.4 本章小结

1.4 本章小结 纵观本章,主要介绍了一下高并发Oracle数据库系统的特点.难点以及架构和设计的基本思路,并闲话了一些时下流行的话题.下一章我们将进入本书的正题,给读者们介绍如何在Oracle数据库里进行高效索引的设计.

《高并发Oracle数据库系统的架构与设计》一导读

前 言 为什么要写这本书 写一本Oracle数据库方面的技术书籍,是我一个持续了四五年的想法.本着自我总结和快乐分享的初衷,不只一次地咨询过eygle大师关于写书的细节,eygle大师也热情地予以指导.遗憾的是,总是因为这样那样的原因,这个想法迟迟不能落地. 2013年的夏天,我有幸作为微博特使参与了甲骨文全球大会(Oracle Open World)上海站的活动,跟一位甲骨文的朋友闲谈中,不经意聊到了与Oracle数据库"共事"已经快十年了.朋友说我应该有不少心得了,鼓励我花一年的时

《高并发Oracle数据库系统的架构与设计》一2.3 索引设计优化

2.3 索引设计优化 现在,我们知道了B树索引的结构特点,也了解到其对查询和排序优化的意义,但是这并不代表我们就能建好用好索引了.在实际工作中,是不是还是会遇到走了索引反而查询变慢的情况呢?虽然说不是所有的情况下索引扫描都是优于全表扫描的,但是对于一套设计成熟的系统来说,索引扫描往往是值得坚持的,应该定期进行全库SQL语句执行计划的审查,抓出全表扫描的SQL进行优化. 说一千道一万,我们创建索引就是为了使用索引,尽可能地使查询操作能够走索引.但是,很遗憾,不是我们说走索引就能走索引,还是需要取决

《高并发Oracle数据库系统的架构与设计》一第1章 大 道 至 简

第一部分 内 政 篇 万物之始,大道至简,衍化至繁. --老子,<道德经> 第1章 大 道 至 简 万物之始,大道至简,衍化至繁.世间一切事物在刚刚开始的时候,都是非常简单的,是为大道,随着事物不断地发展,其衍变出来各种复杂的局面.然而,追本溯源,仍然会发现复杂局面下真正在左右事物的还是那些最基本的东西--大道.如果能牢牢把握住这些被认作是"大道"的东西,再复杂的局面也自然会变得简单. 近些年来,在数据库领域里,可谓群雄逐鹿,志在中原.他们各自有各自的特色,相互间也甚是喜欢

《高并发Oracle数据库系统的架构与设计》一1.1 初见高并发

1.1 初见高并发 高并发这个概念并不新鲜,可以说有数据库的地方都有可能面临高并发的问题.在数据库里,高并发问题主要集中在两个方面:读的高并发.写的高并发,两者看起来都不是很复杂,然而实际情况往往是读和写会交织在一起,并同时呈现出高并发的问题.这个时候,相信很多读者都会提出一个观点:做读写分离嘛.是的,这是一个不错的主意,但只是一个治标不治本的主意.业务系统的耦合度很高,是不可能实现业务层级的读写分离的.在架构设计的过程中,不能驻足于技术层面,还是需要渗透到业务层面去的.不论是业务驱动技术,还是

《高并发Oracle数据库系统的架构与设计》一1.2 说句时髦话

1.2 说句时髦话 活在当下,对于IT人来说,是再合适不过的说法了.IT行业的发展速度堪比高铁.火箭,每一个IT人都在担心自己的知识领域明天就要过时,不得不每天学习新的知识,无奈的是跑得再快也没有办法追得上火箭.在数据库的领域里,也是时刻都在出现新概念和新产品.创新,成了每个人.每个企业都在不断追逐的东西.现有的东西,做好了是应该的,做不好要接受惩罚:创新的东西,做不好是应该的,做好就是绩效.当创新和KPI绩效直接联系到一起的时候,大家都不再是为了创新而去创新,而是为了KPI而去创新,甚至出现了

《高并发Oracle数据库系统的架构与设计》一2.5 索引维护

2.5 索引维护 索引对于性能保障的重要性是不言而喻的,一个优质的索引是性能的润滑剂,相反,劣质的索引将是性能的"绞肉机".通过2.4节的介绍,我们了解到一个设计优良的索引,在经过日常业务应用,特别是OLTP的高并发"摧残"之后,将变得满目疮痍,原本优质的索引也可能转变为劣质的. 这就需要DBA的介入,找到劣质的索引,并恢复其优质的本相.索引的后期维护可能是DBA们日常维护工作中非常重要的一部分,同时也可能是最费时费力的一部分.有人可能会简单地概括一下:"

《高并发Oracle数据库系统的架构与设计》一2.4 索引分裂

2.4 索引分裂 通过前面三节的介绍,相信各位读者已经能对索引的设计及其影响因素有了一定的把握,接下来两节我们将进行到索引新建后的维护阶段.先想一想,索引为什么需要维护?因为它不能保证高效的查询和DML操作,甚至成了一种拖累,或者大家都很"喜欢"它,它有些不堪重负了.这些问题对我们来说都是不能置之不理的,否则宁可不建索引.知其然必知其所以然,要想解决索引的问题,需要先知道这些问题是怎么产生的.我们知道B树索引的结构就像一棵树一样,这棵树随着业务数据的增加,也是会慢慢生长起来的,自然也有

《高并发Oracle数据库系统的架构与设计》一第2章 高效B树索引

第2章 高效B树索引 本章要点: 索引扫描识别,介绍索引的基本概念及展开讨论各种索引的扫描方式. 索引与排序,介绍索引在排序过程中的作用和意义. 索引设计优化,深入解析索引设计的方法技巧,以及设计索引的影响因素. 索引分裂,深入剖析索引树分裂生长原理及因此带来的问题和解决方法. 索引维护,围绕索引重建探讨索引后期维护的方法. 众所周知,索引不论在数据库设计过程中,还是在应用程序开发过程中都是一个至关重要的方面.索引的使用正确与否直接影响到应用程序的性能,并且它是贯穿于设计.开发.运维的各个阶段的