|
Oracle与金庸
网人真能扯。感觉IO、CACHE、CPU那段说的还挺形象。
来自http://searchcio.techtarget.com.cn/。
简单的说,Oracle就是在服务器、存储等硬件基础上进行计算,保存和查询操作,各个环节都很重要,可以做一个比喻。
王重阳与全真七子,关于硬件体系结构与CPU调度
smp,如果cpu的频率好,cpu个数多,总线和cache设计巧妙,性能是很强的。 就如同王重阳乃不世武林高手,学贯武学,可个人的能力再强都是有限的,打不败金兵。
cluster 王重阳的7个弟子功力较逊,组成北斗七星阵,不亚于其他武林高手,更重要的是,一个挂了,其他人可以接着打下去,适当的时候找个人补上去。扩展出来就是军队。
numa 硬件分区的基础,就如同少林十八罗汉,任务重的时候,十八罗汉共同执行一个任务,很强,任务多的时候,每几个罗汉分别做一件事情,动态调配。
七子授课全真派弟子众多,假如每个人(Process)都想得到7位师长(CPU)的指点,怎么办,排队,没有生病的、没有外出的都排队轮流,根据各种情况来衡量谁先谁后,一般都是一样的,当然重点培养对象优先级高可以插队开小灶。七子分配一段时间(时间片)给弟子授课,中间弟子上厕所了,就重新其他弟子分配传授时间,上厕所的呢,重新排队把。总有一种方法使得授课效率比较有效。假如弟子上万呢,如果都让全真七子教,肯定是七子累死了和弟子无能死了,让出色弟子授课或者另立门户吧。
武当派与日月神教,关于数据结构
武当派规模比较小,有多少个人,能干什么,数看看都知道了,于是管理方式就是list,table。
日月神教规模比较大,于是有了光明左右使、五大护教法王、五散人、五行旗(巨木旗. 厚土旗. 洪水旗. 烈火旗. 锐金旗)、各地分舵,你说你是吴劲草,找你到费姥姥劲了,你说你是五行旗-瑞金旗的吴劲草,一下子就找到了。还你告诉张五忌你想做些比较大的工事,往巨木旗. 厚土旗询问几个高手就可以了,不用几万人一个个问。这个核心就是分类和分而治之,管理方式就是hash table和partitions,index也属于这个类型,可是对于比如锐金旗的兄弟,谁不知道谁啊,管理方式还是list和table。
还有一个就是日月神教看起来就像一个金字塔或者说索引中的B树,朱元璋所在的江淮一带分舵就是扩展和节点分裂太快,造成了不平衡。所有组织应该有 pct used,pct free这个限制,假如一个分支人数不够,当新人增加进来的时候就分配给他,当一个分支人数较多的时候,就不让他招人了但同时给他留下名额吸引英人才。就像公司经常会会有机构重组来提高效率一样,随着形势的发展,就应该不同的策略。
太极拳
为什么张五忌学了张三丰的太极拳就能能够赵敏手下强劲的武林高手呢,因为太极拳强调阴阳相济、刚柔并重,就是说洞悉奥妙,恰到好处,机器配置高,存储性能好,不见得Oracle就跑得更快,throughout就高。
Oracle的基础
对于包括Oracle在内的各种数据库来讲,除了计算,保存和查询操作这些基本功能以外,进一步来讲是能够并发处理数据,即实现事务处理。
事务具备ACID四个基本特征:
1. Atomic
原子性,一件事情,要么成功,要么失败。
2. Consistent
一致性,一件事情在处理过程中,看到的数据应该是一致的。
3. Isolate
隔离性,一件事情在处理过程中,应该是独立的,不受到其他事情的影响。
4. Durability
持久性,一件事情的完成以后,效果应该是永久性的,否则数据一旦丢失,所做的一切都是无意义的。
Oracle以自己的体系结构实现了这个基本的功能。
1.为了保证原子性,用户处理数据以后,要么commit,要么rollback,即成功或者失败。
2.为了保证一致性,引入了回滚段,即使数据在查询开始以后被修改,也可以根据当前数据和回滚段中的数据构造查询时数据的映像,保证数据的一致性。
3.为了保证隔离性,引入了latch,lock的概念,在一件事情的操作还没有完成的时候,其他事情不能够进行处理。引入了enqueue和semphore的概念,保证不同事情的顺序处理和交互。
4.为了保证永久性,所有的修改都保存在物理介质中,并引入了日志的概念,记录了数据操作步骤,在日志保存到磁盘以后,就可以保证数据是已经修改成功的,因为即修改过程是可以重现的。
数据容灾和备份的Service Guard,实现failover,scalebility的RAC,都是满足这个基本的功能的基础上实现和扩展的。
高速运行的秘密
摩尔定律说集成电路每18月内单位面积内集成的晶体管数量都会翻一翻。从而CPU的主频得到快速提升。最近媒体上都在报道摩尔定律到达了一个极限,摩尔自己说摩尔定律也将在短期内失效,度过目前的技术瓶颈以后仍将适用。
然而大部分计算机系统的运行瓶颈不在CPU,而在于IO。为什么这么说呢,因为IO技术的发展远远没有CPU技术发展那样迅速,CPU访问CPU cache比访问Memory快很多倍,Memory又比磁盘快很多倍,如果再进行网络访问,速度会更慢。
下面是从scaling oracle8i一书中摘取的数据
Typical Typical
From TO Access Time Price per MB Size Ranges
CPU register CPU register 2 ns N/A 8–4096 bytes
CPU Primary cache(on chip) 8 ns N/A 8KB
CPU Secondary cache(off chip) 30 ns $150 1–4MB
CPU System memory(off CPU
board, over system bus) 100 ns $15 1–16GB
Memory Local disk (DMA over
system bus) 3 *10^7 ns $0.15 200–n0,000GB
Local disk
(via memory) Networked host 1*10^8 ns N/A 15,000,000GBb
upward
a. All figures derived from manufacturer specifications for typical parts in 1997.
b. Based on 30,000,000 Internet hosts with an average of 500MB of storage on each.
当发生IO尚未返回结果的时候,CPU所做的工作就是等待,远远没有得到充分利用。为了提升速度,就需要 Cache数据,所以Cache is the king。于是Oracle中有了DB BUFFER来Cache数据,LOG BUFFER来Cache日志,SHARE BUFFER来Cache数据字典和程序, SORT_AREA_SIZE来加快排序。
Cache大了,数据的管理就是成为一个大问题。为了能够快速的访问数据,我们不可能来遍历数据,我们需要将数据按照一定的特征来组织,从而根据特征来访问数据,缩小查询范围。最常见的就是Hash算法,Hash算法所做的一个比喻就是上面的武当派与日月神教。
一件事情可以分为多个部分来同时处理,人多好办事,加快处理速度。例如多CPU同时进行计算和处理的SMP系统,多个节点进行处理的cluster SMP系统或者进一步说MPPs,RAID中多个磁盘同时响应操作。
扩展开来,高速运行的秘密就是Cache、分而治之和并行处理。
不过任何事情都是有代价和局限的, Cache需要管理,如果存在多个Cache(如多CPU系统中的CPU Cche)则需要同步,并行处理不同节点间需要沟通,甚至说系统中某一位置存在瓶颈,我们所需要做的工作,就是在个体与群体,时间与空间中如何平衡和选择,跟这个社会一样。 2006-4-17 13:01:00
阅读全文 | 回复(1) | 引用通告 | 编辑
|