前 言
为什么要写这本书
写一本Oracle数据库方面的技术书籍,是我一个持续了四五年的想法。本着自我总结和快乐分享的初衷,不只一次地咨询过eygle大师关于写书的细节,eygle大师也热情地予以指导。遗憾的是,总是因为这样那样的原因,这个想法迟迟不能落地。
2013年的夏天,我有幸作为微博特使参与了甲骨文全球大会(Oracle Open World)上海站的活动,跟一位甲骨文的朋友闲谈中,不经意聊到了与Oracle数据库“共事”已经快十年了。朋友说我应该有不少心得了,鼓励我花一年的时间来做一个总结,可以写一本书分享给更多的朋友。“十年”是一个非常特别的东西,它彻底激发出我写书的热情。凌乱的思绪,不知该写些什么的时候,联想到再游十年未见西湖的感触:
云恸风摧山北暮,桥断平湖,西子颜如故。曲院风荷香暗渡,余晖昨日穿朱户。
月澹星稀闻浪住,对酒当歌,言莫愁时苦。意若随心晴若雨,谁知明日鸿归处?
对于技术人来说,杭州渐渐演变成技术之城,然而因为西湖,她应该是艺术的。正如以艺术之眼去欣赏Oracle数据库,不仅仅是纯技术活,更能发现其艺术之美。怀着一颗附庸风雅之心,我决定写一本具有一定实用价值的数据库架构设计和性能优化方面的书。
回顾十年技术之路,如大多数同行一样,一切都是从OCP认证开始的,没能赶上8i OCP的末班车,只好搭乘了9i OCP的头班车。如今认证不如以前受重视了,然而我一直认为OCP给我们提供了一个完整的基础知识体系,其价值不在于那一张纸而已。现在,DBA工作内容逐步实现了流程化和模块化,一些初学者已经可以轻松地完成一些复杂架构的搭建,却时常会因为一些基础的概念性的东西而纠结不清,我会毫不犹豫地推荐他们去进行OCP教材的学习。只有建立自己的基础知识体系,才能主动地去思考问题,才能开始专职DBA之路。
在十年之前,有专职DBA的公司可以说少之又少,早期的DBA都是从开发转过来的,做的人多了,也就有专职DBA这个概念,进而很多不愿意写代码的人也纷纷投身其中。各个公司也出于系统安全和精细分工的考虑,开始禁止DBA了解、熟悉业务,禁止DBA访问业务数据等,以至于现在很多DBA没有开发能力,也不懂得业务应用,仅仅是一个数据库技术的支持者,进而导致DBA被误读为夕阳职业。早期的DBA为什么能备受重视,不仅仅是因为物以稀为贵,更多的是因为有开发背景,了解业务流程,具备复合能力,这才是最可贵的。可以说不懂得DBA技能的开发不是好开发,不懂得开发的DBA不是好DBA。
可喜的是,随着时间的发展,大家都开始意识到这个问题,于是数据库架构师的概念应运而生,他们是一群复合能力的拥有者,是开发人员和DBA之间的桥梁。然而,复合能力也是有较强的行业依赖性的,没有可以跨行业的万能复合,也没有能完全跨行业实现的万能数据库架构。我在本书的编写过程中,也是以我熟悉的金融行业为立足点,尽可能地兼顾全面阐述。
本书将给读者一个全新的视角,秉承大道至简的主导思想,只介绍高并发数据库架构设计中最值得关注的内容,不在于某种技能的分享,而致力于一种方法论的建立,希望能抛砖引玉,以个人的一些想法和见解,为读者拓展出更深入、更全面的思路。
目 录
第一部分 内政篇
第1章 大道至简
1.1 初见高并发
1.2 说句时髦话
1.3 在Oracle的世界里
1.4 本章小结
第2章 高效B树索引
2.1 索引扫描识别
2.2 索引与排序
2.3 索引设计优化
2.4 索引分裂
2.5 索引维护
2.6 本章小结
第3章 高效表设计
3.1 数据生命周期管理
3.1.1 什么是数据生命周期管理
3.1.2 架构模型设计
3.1.3 数据分层存储
3.2 常用字段类型选择
3.2.1 VARCHAR2与CHAR
3.2.2 NUMBER与VARCHAR2
3.2.3 主键字段的选择
3.2.4 LOB字段
3.3 字段顺序
3.3.1 热字段靠前排
3.3.2 行宽需要控制
3.4 行链接与行迁移
3.4.1 行链接原理
3.4.2 行迁移原理
3.4.3 发现问题
3.4.4 解决问题
3.5 分区表的使用
3.5.1 何时使用分区表
3.5.2 分区表设计思路
3.5.3 分区表特性
3.6 适当的冗余
3.6.1 反范式建模
3.6.2 物化视图
3.6.3 结果集缓存
3.6.4 直接路径插入
3.7 碎片分析与整理
3.7.1 碎片的产生
3.7.2 DBMS_SPACE包
3.7.3 碎片的整理
3.8 本章小结