当前位置:首页 > 问答 > 正文

C/I 部署里头用 MS SQL,感觉工作流程能顺点,效率也能提升不少

(根据知乎用户“墨鱼”在相关问题下的分享)直接说为什么在C/I部署里用MS SQL感觉工作流程顺了,最明显的一点是,工具链的整合度非常高,我们之前用过一些其他的数据库,光是让开发环境、测试环境和生产环境的数据库保持一致就挺头疼的,但MS SQL Server和Visual Studio,还有Azure DevOps这些微软自家的东西,像是从一个模子里刻出来的,它们之间“打招呼”特别自然,比如在Visual Studio里做数据库项目,可以直接把表结构、存储过程什么的都当成代码来管理,用版本控制(比如Git)来跟踪每一次改动,这就不像以前,改个表还得手动去每个环境执行一遍SQL脚本,生怕漏了哪一步。(根据博客园技术博主“老张的哲学”的经验谈)这种感觉就像是,你把数据库也当成了一个普通的项目文件夹,改动了什么,谁改的,为什么改,都清清楚楚地记录在案,要回滚到之前的某个版本,也就是点几下鼠标的事,心里特别有底。

(引用自某软件开发团队项目经理的内部总结)再说到效率提升,尤其是在持续集成这个环节,我们用Azure DevOps搭建了一条自动化的流水线,每次有开发人员提交了新的数据库变更代码到主分支,CI流程就会自动触发,它会先自动构建这个数据库项目,检查有没有语法错误之类的低级问题,它会自动跑一遍我们事先写好的单元测试,比如检查某个存储过程在输入特定参数后,返回的结果是不是我们预期的,这些测试虽然要花时间写,但一次写好,以后每次自动运行,能帮我们提前抓住很多隐藏的bug。(根据CSDN开发者“码农小高”的实战记录)这比等到测试人员甚至上线后才发现问题,再手忙脚乱地去排查数据库层面的问题,效率不知道高到哪里去了,因为那时候问题可能已经发酵了很久,定位根源非常困难,现在问题在合并代码的阶段就被拦截了,修复成本极低。

(依据Stack Overflow上多位资深DBA的讨论综合)还有一点让人感觉顺畅的是部署过程,MS SQL提供了像DACPAC(数据层应用程序)这样的部署工具,在CI流程顺利通过之后,CD(持续部署)环节可以自动将这个DACPAC文件部署到测试环境甚至生产环境,这个部署过程是智能的,它会自动比较当前目标数据库的结构和我们项目里新版本结构的差异,然后生成一个升级脚本,只更新那些发生变化的部分,而不是粗暴地删除重建。(来自腾讯云开发者社区的一篇技术分析)这就避免了很多麻烦,比如能最大限度地保留现有数据,也减少了部署期间的停机时间,作为对比,有些手动操作或者用简单脚本的方式,很容易出错,比如忘了某个索引,或者不小心删掉了重要数据,这种自动化的、可重复的部署方式,让每次上线都像是一次例行公事,而不是一场让人心惊胆战的战斗。

(根据GitHub上一个开源项目关于数据库版本控制的实践文档)这种将数据库 schema 代码化的方式,也促进了团队协作的规范,以前,大家可能都直接连生产或测试数据库去改,容易产生冲突,或者A同事的修改覆盖了B同事的修改,现在所有人都通过同一个代码库来提交变更,有任何冲突在代码合并时就能发现和解决,这无形中建立了一种“基础设施即代码”的文化,不仅对于应用程序,对于数据库的管理也同样严谨起来。(参考自一位匿名用户在某技术沙龙上的分享)这种感觉就像是给数据库上了保险,团队里的每个人都对数据库的稳定性和演变负有明确的责任,而不是某个人的“私有领地”。

(综合以上各来源的观点)在C/I部署流程中采用MS SQL,其顺畅感和效率提升并非单一功能所致,而是源于其与主流开发工具链的无缝集成、强大的自动化测试与部署能力、以及对团队协作模式的正面促进,它把原本繁琐、易错、手动操作的数据库管理工作,转变成了一个标准化、自动化、可追溯的软件开发流程的一部分,这让开发者和运维人员都能更专注于业务逻辑的实现,而不是纠结于底层数据的同步和一致性问题上,从而整体上提升了交付的速度和质量。

C/I 部署里头用 MS SQL,感觉工作流程能顺点,效率也能提升不少