在这个充斥着大数据与商业智能的新代时,唯一不变的技术就是变化,尤其是在数据库方面。出于数据统计、继续增加的对服务的需求,以及规定制度等方面的原因,几乎每天都有业务方面的变更需求,这些都会对数据库产生变更需求。当数据库变更发生时,能否从自动化中获得更大的敏捷性,以较少的资源实现较多的功能,正是那些具有高度竞争力的世界级企业在芸芸众生中脱颖而出的关键因素。 如果你的竞争对手能够更快地、并且交付质量更好的特性,那么 你必然会失去市场份额。敏捷开发方法的出现正是为了在应对不断变化的需求的情况下快速地发展,在有限的资源下也能够确保理想的质量。 重量级发布的方式已经过时了,为了每次更新或发布要等上足足六个月,这种方式无异于自掘坟墓。敏捷开发方法减少了每次发布的范围,换取的是更快地完成每个变更,并且将每个变更的影响降至最低。对于技术公司与IT部门来说,必须以敏捷性来保证对不断变化的业务需求的支持。 接下来的一个逻辑步骤是将开发与运维相结合,即采用DevOps方法。 为了在敏捷的Sprint发布中有效地应用DevOps,你需要实现部署与流程自动化,自动构建内部的开发与QA环境,以及生产环境。否则的话,你只能选择手动实现部署与发布的每个步骤与流程,这就很可能产生人为的错误,而且也无法频繁地重复这一过程。 实现自动化依赖于版本控制系统,它能够管理所有等待构建并部署到下一个环境的软件资产。 构建流程的第一个步骤是清理工作空间,并从版本控制库中换取相应的文件。这一重要的步骤避免了流程外的变更。如果开发者直接将变更保存到构建服务器的工作空间,而不是将变更签入版本控制库中,那么这种变更仍然有可能产生。这个例子听起来似乎有些可笑,因为开发者都明白,如果不把变更签入到版本控制库中,这些变更就会丢失,因为技术手段保证了流程的正确性。这一步骤同时也避免了将尚未完成的变更包含至构建过程中,只有通过正确的签入流程提交至版本控制库中的变更才会加入构建过程。版本控制库在这里成为了唯一的信赖源。 数据库是关键的部件如今多数的IT应用程序都包括数量众多的部件,使用了多种不同的技术:移动、ASP、PHP、应用程序服务器、Citrix及数据库等等。为了让应用程序正确运行,必须让这些组件相互配合。下面举个例子,如果在某张表中加入了一个新的列,或是在某个存储过程中加入了一个新的参数,那么为了让功能正常运行,其它所有的应用程序组件也必须与结构的变化进行同步。一旦同步过程出错,应用程序在调用存储过程时使用了错误的参数,或者是在插入数据时遗漏了新的列,应用程序就会出错。 数据库组件的独特性将它与其它组件区别开来:
必须满足的需求在管理数据库变更时,需要克服一系列的困难,你必须做到以下几点:
对于在开发阶段,以及内部部署(开发环境与QA环境)或部署到生产服务器时的数据库变更管理,有四种通用的管理方式。
建立开发阶段生成的SQL变更脚本管理数据库变更的最基本方式,就是将所有变更命令保存在一个或一系列脚本中,并且在基于文件的版本控制系统中对它们进行管理。以此保证在一个单一的存储库中保存所有的应用程序组件资产。对于开发者来说,将数据库变更进行签入可以使用的功能类似于他们签入.NET或Java的变更时的功能,例如将变更与变更原因(变更请求、缺陷编号、用户故事等等)相关联。对于当前流行的各种基于文件的版本控制方案来说,基本上都能够在多个开发者对同一个文件进行变更的时候发出合并的警告。 但让我们来看一下,这个解决方案是否真正能够克服数据库方面的各种挑战,并且避免各种可能的风险呢:
|