Architechure of a Database System翻译一

数据库系统的架构

Joseph M.Hellerstein, Michael StoneBraker and James Hamilton

  1. University of California Berkeley, USA, hellerstein@sc.berkeley.edu
  2. Massachusetts Institute of Technology, USA
  3. Microsoft Research, USA

摘要

  数据库管理系统(DBMS)是一个无处不在且至关重要的现代计算的组成部分,是学术界和工业界数十年的研究和发展成果。从历史上看,数据库管理系统是最早发展的多用户服务系统之一,因此开创了许多具有可拓展性和可靠性的系统设计技术,这些技术至今也在许多其他的环境中被使用。虽然许多数据库使用的算法和抽象理论已经是教科书中的材料知识,但是仍然有一些在系统设计论题论文中覆盖相对较少的内容支持着数据库系统运行。这篇论文展示了一些数据库管理系统的设计原则,包括处理模型,并行架构,存储系统设计,事务系统应用,查询处理器,优化器架构,以及典型的共享组件和工具的讨论。本文用成功的商业和开源系统作参考,尤其是已经被不同团体采用的多个可选的设计。

介绍

  数据库管理系统是复杂的,任务关键型的软件系统。今天的数据库管理系统包含了数十年的学术界和工业界的研究以及激烈的企业软件发展。数据库管理系统是最早部署的在线服务器系统之一,因此,它开创了许多设计方案的先河,不仅在于数据管理,还在于应用,操作系统和网络服务。早期的数据库管理系统在计算机科学中是最具有影响力的软件系统之一,它开创的思想和实施部署的问题被广泛复制和重新改造。

  数据库系统结构的课程应该被广泛开设,然而出于各种原因,却没有被广泛开设。首先是因为应用数据库系统的社区非常小。市场力量仅支持几个高端的竞争对手,所以只有少数几个成功的数据库系统存在。参与数据库系统开发和应用和的人群也很少:许多人来自同样的学校,在具有同样影响力的项目中做研究,合作了相同的商业产品。其次,数据库系统的学术经常忽略架构问题。数据库系统的教科书演示例行地集中在了算法和理论问题,这些传授,学习和测试都很自然但是缺少全面实现系统架构的整体讨论。由此,许多关于如何构建数据库系统的传统智慧是可用的,但很少被记录或者是广泛传播。

  在本篇论文中,我们试图去捕捉现代数据库系统的主要的架构层面,讨论一些高级的主题。一些出现在本论文中的文献,我们在适当的地方提供参考手册。其他的一些问题有些藏在了手册之中,有些则是社区中简单的口头传统。我们在适当的地方使用商业的和开源的系统作为讨论的不同架构形式的例子。然而,由于篇幅原因,我们不能枚举基于百万行代码找到解决问题的方法和细微的更好的差别,其中多数的代码已经是十多年前的。我们的目标集中在教科书中通常不讨论的总体的系统设计和压力问题,以提供更多广为人知的算法和概念可以应用的有用的场景。我们假设读者们熟悉数据库系统教科书的内容(例如:[72]和[83])和现代操作系统的基本功能比如UNIX,LINUX以及Windows操作系统。在下一个章节介绍完高级的数据库管理系统的架构,我们在章节1.2的每一个部分都提供了一系列背景阅读资料。

1.1 关系型系统:查询的生命周期

  如今在生产中最成熟和广泛被使用的数据库系统是关系数据库管理系统。可以在世界上许多应用程序的基础设施核心中找到这个系统,仅举几例:电子商务,医疗记录,计费,人力资源,工资单,顾客管理和应用链管理。网络商务和社区网站的出现仅提高了使用他们的广度和深度。关系型系统是几乎所有在线交易和绝大多数的在线内容管理系统(blogs, wikis, 社交网络等)背后的记录存储库。除了作为重要的软件基础设施,关系数据库系统还作为未来拓展的或者具有革命性改变的新数据库系统的一个众所周知的参考点。因此,我们通过本论文来专注探讨关系型数据库系统。

图.1.1 DBMS的主要组成

  从本质上说,一个典型的RDBMS有五个主要的组件,就像是图1.1中显示的那样。作为对每个组件和它们组合在一起如何工作的介绍,我们逐步进入数据库系统的查询生命周期。这也是下面章节的一个预览。

  考虑机场里的一个简单但是经典的数据库交互,一个登机门的经理点击一个表格来获取一个航班的乘客列表。点击按钮触发了一个单查询的事务,大致如下工作:

  1. 机场登机门的电脑(客户端)调用api,这个api可以轮流通过网络和DBMS的客户端通信管理器建立连接(图1.1的顶部)。在某些情况下,这个连接直接建立在客户端和数据库服务器上,比如通过 ODBC 或 JDBC 连接协议。这个安排被称作“双层”或者是“客户端——服务端”系统。其他情况下,客户端也许会通过一个“中间层服务器”(一个web服务器,事务处理监视器这类组件),这个组件使用一个协议来代理客户端和DBMS的通信。这通常被称为“三层”系统。许多基于场景的网站在web服务器和DBMS中间还有另外一种应用服务器层,产生了四层。考虑到这些不同的选项,一个典型的DBMS需要和不同的客户端驱动以及中间系统所使用的许多不同的连接协议相兼容。然而,从基本来看,DBMS客户端连接管理器的职责在所有这些连接中都是相同的:建立和记住调用者的连接状态(不管是客户端还是中间服务器),回应调用者的SQL命令,并且视情况返回数据和控制信息(结果,代码,错误等等)。在我们的简单的例子中,连接管理器将建立和客户端的安全凭证,设立状态并记住一个新的连接的细节和当前调用的SQL命令,并转发客户端的第一个请求深入到DBMS以被处理。
  2. 一旦接收到客户端的第一个SQL指令,DBMS必须分配一个计算线程给这条指令。它必须保证这个线程的数据和控制输出是通过通信控制器连接到达客户端的。这些任务称作是DBMS的处理管理器的job(图1.1的左侧)。DBMS在查询阶段需要做的最重要的决定是关于准入控制:系统是否应该立刻开始处理查询,还是推迟查询,直到足够多的系统资源可用。我们在第二部分讨论处理管理器的细节。
  3. 客户端的查询一旦准入并被分配一个控制线程,查询将开始执行。它通过调用关系查询处理器中的代码开始查询(图1.1的中央)。这一系列的模块检查用户是否有权限进行查询,并且编译用户的SQL文本指令为内部查询计划。一旦编译,生成的查询计划交由计划执行器执行。计划执行器包含一组运算符以执行任何查询(关系型算法实现)。典型的运算符实现了关系型查询任务包括:join, where, select, aggregation, sorting等等,以及从底层获取数据记录的调用。在我们的示例查询中,这些运算符的一个小的子集,被查询优化器组装,然后被调用以满足查询。我们将在第四部分探讨查询处理器。
  4. 在这个查询计划的基础上,一个或者多个操作符被使用来从数据库获取数据。这些操作符创建调用从管理着所有数据获取(read)和数据操纵(create, update, delete)的事务存储管理器(图1.1的底部)中取回数据。这个存储系统包括了用来在磁盘上组织和获取数据的算法和数据结构,像基本的结构像表和索引。也包括一个决定在什么时候什么样的数据可以在磁盘和内存缓冲之间传输的缓存管理器模块。回到我们的例子,在数据获取方法去获取数据的过程中,查询必须调用事务管理的代码以保证众所周知的事务“ACID”属性[30] (将在5.1节中讨论更多的细节)。在得到数据前,必须从锁管理器获得锁来确保本命令在当前其他并发的查询中可以正确地执行。如果查询涉及到了对数据库的更新,它将和日志管理器交互以确保提交的事务可持久化,并且若操作中止则更改可撤销。在第五节中,我们讨论存储和缓存管理器的更多细节。第六节中涉及事务一致性架构。
  5. 在示例查询的生命周期的这个时候,它已经开始了获取数据记录,并且正准备使用它们为客户端计算结果。这是由“展开堆栈”做到目前为止我们描述的活动的。获取方法将控制权返回给查询执行器的操作符,它编排从数据库数据计算得到的结果元组。生成的元组被放置在了客户端管理器的缓存中,它将把结果送回给调用者。对于大型的结果集,客户端通常会多次调用以逐步从查询中获取更多的数据,导致多次访问通信管理器,查询执行器和存储管理器。在我们这个简单的示例中,查询的最后,事务完成,连接关闭。然后事务管理器清除事务的状态,进程处理器清理查询的控制结构,通信管理器清理连接的状态。

  我们对这个示例查询的讨论触及了RDBMS的许多关键组件,但并不是全部。图1.1右侧描述了一系列的共享组件和工具,他们对一个具有完全功能的DBMS的操作所至关重要。目录和内存管理器在任何的事务中都被当做工具调用,包括我们的示例中。目录由查询处理器使用以进行身份验证,解析和查询优化。每当需要分配内存和释放内存的时候内存管理器就会被使用。剩下的模块在图1.1的右侧的框中列出,他们作为工具独立运行于任何特定的查询,使得数据库保持整体的良好调整性和可靠性。我们将在第七节中探讨这些共享组件和工具。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,881评论 2 89
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,113评论 0 9
  • 电脑是我们生活中的好助手、好帮手,可以帮助我们的生活需求。但是,在好处的基础上也是有示处的。是的,在看电脑的...
    姚辰辰阅读 208评论 0 4
  • 不写检视,日子还是一天天的过去,回看本月的日记,大多数都是寥寥几句。还好还是留下了一些痕迹可以查看 写得最多的是卖...
    津津有好味阅读 517评论 0 50
  • 虽然每天晚上日更的时候都在心里念叨明天一定要记得早更新,但是每天都要到十二点前十分钟左右赶紧赶完一篇日更。 今晚也...
    funi阅读 139评论 0 0