我想要的数据库工具

发布于:2021-01-14 10:37:46

0

86

0

数据库 代码 开发工具

考虑到现代开发流程时,与提供的代码开发工具相比,我总是发现数据库开发工具尚未开发。我们拥有版本控制系统,审阅工具,CI / CD解决方案,短毛绒等等。它们很多,因此您可以根据需要自动化工作流程,并专注于编写代码。但是,现代开发工具现在无能为力的是如何处理和版本数据库更改。

建立自动数据库开发流程的斗争

我尝试了许多不同的方法:模式比较工具(复制器,Redgate,DBComparer等)与版本控制挂钩相结合,编写迁移,使用ORM框架进行自动迁移等。但是始终没有成功,只能恢复为半手动方法。当然,数据库模式比较工具可以很好地完成工作,但是要考虑复杂的部署管道,蓝/绿部署,回滚等。在这里,您必须手动执行很多操作才能使模式比较真正起作用。

我有一个项目,其中数据的架构和结构确实非常复杂且不稳定。这是一个数据密集型应用程序,我不得不更改很多架构和数据。这造成了很大的痛苦,最终使我的交付流程成为自动步骤和手动步骤的组合,这使整个过程缓慢而费力。

弄乱数据模式时事情很难

那么,自动化数据库开发时常见的痛点是什么?

代码和状态问题。您必须独立于代码来跟踪数据库更改。这意味着您不能总是说此特定提交将与数据库的当前版本一起使用。测试会有所帮助。如果您对数据库对象有ORM定义,那就很好了,因此您可以从代码中重新创建整个结构。但是在那种情况下,问题在于您应该考虑如何处理现有数据。您可能必须为开发,测试和生产环境开发单独的方法。另外,您可以在数据库本身内部跟踪模式版本,并在代码内部存储指向版本的链接。将此与迁移结合起来,这就是大多数Web框架处理它的方式。或者,您可以将整个数据定义语句导出到代码中。

与时俱进的问题。您不必忘记自己编写迁移。跳过这个关键步骤总是很犹豫的,尤其是对于回滚部分。如果使用ORM会更容易,因为您始终可以在代码中区分定义。如果不是,则必须谨慎,不要错过所做的任何微小更改。模式比较工具在这里确实很有帮助。

成本问题。对数据库的更改非常昂贵。如果在开始生产之前具有稳定的数据库结构,则很好。当然不是。随着您获取更多数据,添加字段将变得越来越昂贵。而且,当您希望将派生数据库用于ETL层进行分析时,事情将开始崩溃,您将陷入困境。

数据回归问题。更改数据库很危险。您是否害怕删除字段?你必须。这就是为什么许多公司从不删除字段,也没有冗长而复杂的生产模式变更过程。但是保留所有遗留字段会使架构难以维护。只有好的文档才能为您提供帮助。我从未见过。

时间问题。对数据库的更改很慢。您要添加字段或更改现有字段,必须测试代码是否正确处理了新架构,然后继续进行并测试登台服务器上的部署。如果您有生产数据库的副本,那就很好。但是有时候你没有。因此,您必须检查生产中的所有内容,以避免由于数据更改而引起的常见陷阱,例如在切换字段类型或忘记外键时丢失数据。是的,外键。当您要触摸关键字段时,紧密耦合的数据始终是挑战。这是非常耗时的。

解决方案

我真正想要的是一个可以解决上述问题的工具。看起来如何?关于它应该做什么的一些想法:

  • 它将与版本控制工具(git)集成。当我提交时,它将快照数据库架构。更改应该是可逆的,并在可能的情况下分别应用。考虑差异的模式。

  • 应用更改时,应注意数据。重命名字段,更改字段类型和添加约束不应降低数据质量。例如,删除字段实际上不应从数据库中删除值,而应将其移动到诸如field_a_delteted之类的位置。

  • 单个命令行工具可处理可轻松集成到CI / CD管道中的所有任务。与许多人一样,我喜欢在控制台中工作。想象一下签出修订并执行类似“数据库还原”的操作。监控和日志。此特定迁移需要多长时间?有错误吗?

  • 一个UI,用于查看对数据库所做的更改。评论对于代码至关重要,为什么不对数据也是如此?这可以通过在ORM定义中进行差异来部分解决,但它没有提供有关影响多少数据的内幕。

在评估上述要点时,我认为它可能不仅仅是一个工具,而是一个完整的数据库管理框架,结合了用于建立完整数据库开发管道的方法,模板和框架。启动Web项目时,通常从框架开始。它将指导您如何组织有关应用程序的事情。添加数据框架将指导您如何组织有关数据库及其更改的事情。我不是在谈论ORM。

我个人认为,随着应用程序朝着智能,基于ML的解决方案的方向缓慢发展,数据模式变得越来越复杂。快速引入变更并在线进行测试的必要性对于今天的竞争至关重要。我真的感到需要新的出色的现代数据工具。