解密SQL Server数据库系统的编译
作者:刘春雨 来源:IT168 发布时间:2009-03-16 17:33:00
你知道SQL Server这么庞大的企业级数据库服务器产品是如何build出来的吗?
这有些相关的数据:
每个build 的大小在300GB左右。
每个完整的build需要几十台高端的服务器运行2.5天。
每个完整的build由几千个job、10000多个参数组成。
我们每天同时做20个左右的build,每周130个。
位于美国微软总部雷蒙德和北京的build团队能够保证build全天24小时不间断的顺利进行。
从去年至今,我们build team已经成功而准时地完成了数以千计的build。
也许你会问:你们的build怎么这么大?怎么需要这么长的时间?为什么你们每天要做这么多build?
为什么我们的一个build这么大?比如说你的32位中文零售开发版SQL Server的DVD,包括工具和帮助文档是4GB,那么你可以这样估算一下:首先加上一些内部的build信息和统计,以及用于debug的Symbol,然后乘以2(retail版,debug 版),再乘以3(CPU 类型:x86、x64和ia64),再乘以所有的版本数(企业版、开发版、标准版等),最后再乘以支持的语言数。不只1个TB 了吧?J 幸好SQL 2008 的setup 团队采用了consolidated setup模式,这样在一个语言包中,安装程序可以判定你的CPU类型并根据你输入的产品序列号,自动安装对应的版本。由此我们的build才压缩到了300GB。
为什么我们的一个build需要这么长时间?Build这么庞大的企业级数据库服务器产品是一个极其复杂的过程,况且SQL Server的build 系统已经是微软内最为高效的系统之一。她是图形化用户界面并且高度自动化的。历经60小时,多数build会顺利的自动完成并通知相关人员其build的状态及信息。如果build失败,其也会提供详细的错误信息用于debug。SQL Server的build 系统不仅如此易用和高效,同时可以灵活的适应某些特殊的需求和build工作流。SQL Server的build 系统是由Windows Workflow Foundation驱动的,其数以千计的job被并行或串行的分发到几十台 build机器上并完成。build的过程包括:
将几十GB的源文件及相关的所需文件和资源同步到build机器上
源代码静态分析
编译所有的可执行文件和测试文件并签名
生成系统数据库
优化
本地化
制作安装文件和安装包并签名
索引Symbol和源文件
我们每天做这么多的build正体现了我们如何支持整个SQL Server工程体系和构架:
首先需要声明的是我们随时都在为多个产品提供支持,比如当前的SQL Server 2005和即将发布的SQL Server 2008。
在SQL Server 2008的工程体系和构架中,我们将每个需要增加或增强的功能特性做成一个单独的分支,在这个功能特性开发和测试完成后,其代码才会合并到SQL Server的主线代码中。因此根据功能特性的优先级和大小,SQL Server分成了几十个不同的团队,每个团队包括了架构师、项目经理、开发和测试人员,帮助及案例文档专员,甚至科学家和科研人员。每个分支都需要build来进行及时的测试,因此有了这个我们当前每周需要的build个数——130。当build结束后,Test Execution team和其分支团队会执行自动测试来确保其代码的质量符合严格的要求和标准。最后当这个功能特性开发和测试完成后,其代码将会融入到SQL Server的主线代码中,然后其它各个分支团队将重新获取主线代码并融合其分支的当前代码,来保证和主线代码的同步。
那么如何确保主线的代码质量总是符合严格的要求和标准呢?我们将会在后续文章中揭示另一个神奇的领域,下次见!
猜你喜欢
- 简化了一下 YUI3 中的沙箱实现 方式:if (typeof Sandbox === 'undefined' || !Sa
- 学习一些你已经知道的知识也没有什么坏处,是吧?我知道这可能并不一定非常有意义,但是很多时候我们往往知其然而不知其所以然,这会使得事情出现惊人
- 你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, Safari四大浏览器之外,世界上还有近百种浏览器。几天
- 做教育业的网站,会将此遇到这个问题:如何在网页上显示音标?音标为什么显示为乱字符?等等类似的问题。前两天做沪江网某英语页面的时候也碰到了这个
- 作用域链(Scope Chain)JavaScript中的一种重要机制,JS中所有的标识符(Identifier)都是通过Scope Cha
- 两个多月来唯一一次有时间哄么么睡觉,我先给他讲了遍《从前有座山》,还是不睡。又给他讲了这个“保安的故事”:小A是名很敬业的保安,负责保护客户
- 使用 IE8 时发现其原生的 JSON 解析器存在 Bug,让我们先用 IE8 打开 DEMO 页面体验下。http://lab.grace
- CSS样式和JavaScript脚本是应该放在外部文件中呢?还是把它们放在页面本身之内呢?如何处理是关于一些性能规则的思维,就这些问题,我们
- Mysql分页采用limt关键字select * from t_order limit 5,10; #返回第6-15行数据select *
- 这篇文章与大家分享13个超级有用的 jQuery 内容滚动插件和教程。您可能经常能看到一些网站上特色区域的内容以滚动方式变化,这是一种在有限
- 数字序号① ①② ②③ &
- 本文主要介绍了一个获得当前数据库对象依赖关系的实用算法,具体示例请大家参考下文:create function&nb
- 日前,Mozilla 的 Arun Ranganathan 向 W3C 提交了一个草案,旨在推出一个 JavaScript API,让 Ja
- 如果你经常浏览网页一定见过很多网站在form表单中的文本域(textarea)中添加了的背景图片,一般是使用网站的logo,我记得我最早注意
- Oracle 数据库启动Oracle shutdown的时候突然断电,导致使用sql/plus启动时无法连接到数据库,具体描述为: conn
- 刚才运行了一段代码,来查看Request.ServerVariables里面有多少值,看了一下,共50个!代码<%=Request.S
- 1.查询表名: 代码如下:select table_name,tablespace_name,temporary from user_tab
- 第一次写这类文章,有点儿紧张有点儿新奇有点儿痛苦,来CDC实习2个月啦,每天除了工作就是体验体验再体验,因为之前做了一些有关规范的工作,突然
- 先来看看Global.asax文件代码:<script language="VB" runat
- 一直在用JS写ASP,也不是特别原因,只是当初学的是JS,后来学ASP时知道ASP也可以用JS写,就没去学VBS.前几个月刚学ASP的时候找