提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:莫成敏|2020-01-15 15:21:21.883|阅读 182 次
概述:Giorgi Abashidze解释了他的团队如何将两阶段部署过程与SQL Compare命令行以及一些SQL同义词一起使用,以自动为其每个客户进行自定义部署,而只需要在源代码管理中为每个版本维护一个分支。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
SQL Compare是一款比较和同步SQL Server数据库结构的工具。现有超过150,000的数据库管理员、开发人员和测试人员在使用它。当测试本地数据库,暂存或激活远程服务器的数据库时,SQL Compare将分配数据库的过程自动化。
在以前的文章中,从使用SQL比较命令行的源代码控制到数据库,我解释了我的团队如何使用SQL Compare命令行为我们的客户自动化数据库部署,而无需访问实际的登台数据库或生产数据库,这是不可能的这是一个银行数据库。我演示了如何仅通过访问我们的开发数据库(包含在TFS源代码管理下),如何使用SQL Compare命令行来部署所有客户通用的数据库元数据和代码。
但是,除了此共享代码外,还必须为我们的每个客户提供每个软件版本的唯一变体,以便向他们提供可满足其不同业务和合规性要求的自定义例程。我们每个客户都需要其中一些例程,当然,此专有功能应始终仅部署到该客户的生产数据库中:至关重要的是,任何客户都不能看到专门为另一位客户编写的逻辑。
我们如何实现这一目标?传统观点似乎是,在每个发行版中,我们将数据库版本的每个特定于客户的变体视为一个单独的分支。但是,这可能会增加构建的复杂性。有了一些创造力,我们可以避免这种情况,而是为每个新版本创建一个分支,我们可以使用该分支来维护和部署我们每个客户的所有共享逻辑,以及专用于无限数量客户的逻辑。
在本文中,我将解释如何使用SQL Compare命令行、同义词和一些独创性来完成所有这些工作。
我们如何将客户特定的例程存储在单个数据库中
因此,为了更接近于开发数据库的构造方式,我们假设我们的Trunk结合了我们所有的逻辑。假设我们有三个客户Cust1,Cust2和Cust3。
我们还提供了一些代码,即一个称为loan.calculate_effective_rate的SQL存储过程,该程序根据某种算法来计算一段时间内贷款的实际支付利率,称为“有效利率”。 所有客户的代码都是相同的,但是有一天客户Cust1要求我们更改其版本的算法,这意味着我们现在需要维护和部署“有效费率”程序的两个不同版本。
首先,我们需要按照Cust1的要求,为Effective_rate过程实现替代算法(从这里开始,我将使用其缩写形式)。 我们只有一个开发数据库,称为Trunk,并且由于任何例程中每个例程的名称都必须唯一,这意味着我们必须有一种命名策略来区分这些变体。
我们做的方法是:
这意味着所有客户的应用程序代码现在都必须调用该effective_rate_default过程,但必须调用的Cust1除外effective_rate_cust1。但是,我们不希望对任何客户的调用代码进行任何更改。毕竟,该过程的目的没有改变,但是我们现在有多个相同的操作实现(计算贷款的有效利率)的方法。相反,我们使用同义词来表示具有多个实现的任何操作。换句话说,调用者代码从不直接调用确切的实现,而是调用操作(SQL同义词)。
因此,在这种情况下,我们将创建一个SQL同义词并将其部署给每个客户,该SQL同义词的名称为effective_rate,表示effective_rate_default过程。 当然,仅对于Cust1,此同义词必须不引用默认过程,而是引用Cust1变体。 但是,正如我已经提到的,我们在源代码管理中仅维护一个数据库,而在Trunk(以及任何发行分支)中,每个同义词始终仅引用相关操作的默认实现。 那么我们如何实现这一目标呢?
答案是一个两阶段的部署过程。第一阶段向每个客户部署effective_rate_default过程以及引用该过程的effective_rate同义词。第二阶段仅将effective_rate_cust1过程部署到Cust1,然后删除Cust1数据库中的effective_rate同义词,并创建一个引用effective_rate_cust1的新同义词。
通过遵循这种方法,基于对每个客户的SQL同义词和两阶段部署过程,我们可以在一个开发数据库中包含所需的专用例程,因此仍然可以为我们的客户提供代码,考虑到不同的业务和合规性要求。
让我们看看如何使用SQL Compare命令行实现此两阶段部署过程。
本教程内容较多,分为上下两篇文章,想要查看教程后续内容,请继续关注我们网站!或者下载SQL Compare试用版尝试一下~
相关内容推荐:
SQL Compare教程:使用SQL Compare命令行从源代码管理到数据库
SQL Compare使用教程:如何在SQL Compare中使用自定义过滤器
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢