解密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的主线代码中,然后其它各个分支团队将重新获取主线代码并融合其分支的当前代码,来保证和主线代码的同步。
那么如何确保主线的代码质量总是符合严格的要求和标准呢?我们将会在后续文章中揭示另一个神奇的领域,下次见!
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 今天从网上看到这个功能,不错啊,以后就可以在文章中,增加这个功能了var re = /<a h
- range()反向遍历的几种表达for i in range(10,0,-2):#有10 print(i)prin
- 本文实例讲述了Python实现针对中文排序的方法。分享给大家供大家参考,具体如下:Python比较字符串大小时,根据的是ord函数得到的编码
- 使用 Rxjs,对于初学者来说,当我们处理 observables 错误的时候容易疑惑,因为我们会考虑使用 try-catch 方式捕获。但
- GraphSAGE是一种用于图神经网络中的节点嵌入学习方法。它通过聚合节点邻居的信息来生成节点的低维表示,使节点表示能够更好地应用于各种下游
- 作业备份,不是备份数据库,是备份作业。 我的方法是把作业导出成文件备份起来,因为当你服务器维护的多了的时候很多你的作业 就很成问题,很麻烦。
- 学习python编程,首先要配置好环境变量。本文主要讲解python的环境变量配置,在不同版本下如何安装Windows打开Python官方下
- 完成asp语言对XML文档中指定节点文本的增加、删除、修改、查看 <% '-------------------
- 描述 嵌入在你的web页面中的导航元素能够降低你的搜索引擎评价排名并且降低你的网站的响应性能。本文作者想同你一起探讨如何使用AJAX技术来解
- 模块安装:数据操作用到的模块pymysql,需要通过pip install pymysql进行安装。redis操作用的模块是redis,需要
- 本文介绍我使用QQ得到服务器上回传的python代码的探索历程,面向的对象是对计算机网络有一定了解的读者。期待有兴趣的人和我一起探讨!需求来
- 中间件介绍中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与
- 6、遮罩滤镜作用:该滤镜可以为对象建立一个覆盖于表面的膜,其效果就象戴着有色眼镜看物体一样。语法: {filter:mask(color=c
- 本文实例讲述了Python2与Python3的区别。分享给大家供大家参考,具体如下:python2与python3的区别1、性能2、编码格式
- 1.现在我本机系统已内置python2.62.下载进行源码安装复制链接下载到/root/mypackage,解压接着mkdir /usr/l
- 在深度学习中训练模型的过程中读取图片数据,如果将图片数据全部读入内存是不现实的,所以有必要使用生成器来读取数据。通过列表生成式,我们可以直接
- 创建数据表的SQL语句如下: string tatlename = "T_useruid";//定义一个变量。用于自动创
- 接上章《pygame实现俄罗斯方块游戏(基础篇1)》继续写俄罗斯方块游戏五、计算方块之间的碰撞在Panel类里增加函数def check_o
- 在讲CSS优先级之前,我们得要了解什么是CSS,CSS是用来做什么的。首先,我们对CSS作一个简单的说明:CSS是层叠样式表(Cascadi
- 返回函数所谓返回函数,顾名思义,就是把函数作为返回值。高阶函数除了可以将函数作为参数之外,还可以将函数作为结果进行返回。下面来实现一个可变参