问题标签 [database-versioning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hbase - HBase Column family 最大版本破坏?
如果我的列族只保留一个版本,每个 Put 到同一行键都会破坏现有版本,还是会忽略我的 Put 请求?
c# - 在同一数据库上使用多个 FluentMigrator 程序集
假设我在同一个数据库中有两个独立的表,表 Book 和 Cup。我只用主键(int)创建两者,称为 Id。然后,为了保持整洁,我将它们分成不同的项目并为它们创建 FluentMigrations,它们将驻留在Book.Migrations.dll
和Cup.Migrations.dll
.
现在我意识到也许我的书应该能够有一个名字,并创建一个新的迁移来添加一个名为 name 的列。我将它的版本设置为 201408111220(所以写这篇文章的时间戳),并将其命名为 AddNameToBook。我应用此迁移并相应地更新数据库。
然后我意识到也许杯子应该有颜色。因此,我在另一个项目中创建了一个新的迁移,版本为 201408111221,并将其命名为 AddColorToCup。我再次运行迁移,并更新了数据库。
据我所知,到目前为止一切都应该正常。我不确定的是,如果我现在向 Book 添加另一个迁移,比如 201408111224,应用它,然后尝试回滚。由于现在201408111221
来自其他程序集的版本存在于 VersionInfo -表中,FluentMigrator 将如何处理这个问题?它会在我脸上抛出一个错误,还是因为当前程序集对此一无所知而忽略该行?
此外,欢迎以这种方式(对一个数据库使用多个程序集)使用 FluentMigrator 提出其他意见。
oracle - 从数据库版本控制开始
我是数据库版本控制的新手,我正在开发一个 java Web 应用程序(vaadin,spring,spring-data-jpa),我在其中使用类似 maven 的项目管理工具。通过 manen,我管理发布和源代码版本控制。现在我的麻烦是数据库版本控制。我尝试通过一个例子来解释我的问题:
当我的应用程序是 0.0.1-SNAPSHOT 版本时,我创建了一个包含一些表的数据库,在某个时候我决定发布这个版本(1.0.0),并将它安装在我的生产环境中,同时在我的主干内(在SCM)我有版本 1.0.1-SNAPSHOT。现在我必须添加一些新功能,这些新功能需要添加其他一些表和属性,当我完成这些新功能的开发时,我会更新我的数据库并发布 (1.1.0)。现在,如果因为某些问题我想重新安装 1.0.0,我将无法重置数据库状态。我看到有一些数据库版本控制插件如何:使用 maven2 进行数据库版本控制?,但我想要一些建议,这些情况下的指导方针是什么,以及哪些插件可以让我管理它们。
mysql - Liquibase (changeLogSync, update, changeLogSyncSQL) 不建表也不插入数据
我一直在关注这个家伙页面,以获取 Liquibase 设置(http://bytefilia.com/managing-database-schema-changes-liquibase-existing-schema/),至少包含我的基表和数据。我已经成功运行
我这样做了两次,一次用于表结构,一次用于数据。
它生成文件 boot.json 和 base-data.json。这些文件似乎很好,至少将它们与其他网站和 liquibase 文件进行比较。我发现的唯一问题是数据文件的日期时间戳会生成一个关于 ":" 的错误,但是如果我将它们包装在引号中,liquibase 运行并 syas 它成功地做到了。虽然当我检查数据库时,我只有 2 个表。
如果我查看 DATABASECHANGELOG 内部,它会在运行同步命令后包含来自两个文件的所有提交。但它没有我需要的任何表格,当然也没有数据。我想也许它不会显示作为版本控制的表,所以我尝试了一个常规的选择语句。
任何帮助都很棒。我需要做什么才能让 liquibase 使用我导出的数据从新数据库中生成我的模式。如果我在获取数据和表结构时做错了什么,我会更改它。在尝试主要开发之前,我只是按照说明启动并运行一个工作示例。
---更新(根据 Nathan Voxland 的建议)
我删除了除了一张桌子以外的所有桌子。我删除了数据库并创建了一个全新的数据库。然后我运行下面的命令。
引导.json
命令
错误信息
database - API 版本控制和存储数据
在公开不同的 API 版本时,您如何处理存储和检索可能具有不同结构的数据?
假设我们有两个 API 版本;V1 和 V2。V1 和 V2 都有一个位于“ https://api.com/message ”的 POST 端点,它将根据传递的数据在数据库中创建一条消息,例如:
在 V1 中,所需的数据与 V2 不同,因为在 V2 中,我们决定将 DOB 从格式为“YYYY-MM-DD”的字符串更改为整数时间戳,例如 1284723728323
在这种情况下,当我们从使用 V2 API 的调用中保存数据时,DOB 字段将是一个整数,但从对 V1 的调用中保存时,它将是一个格式非常不同的字符串。
随着 API 的每次迭代,我们可能会修改底层数据的许多方面。调用较旧的 API 版本将导致存储的数据对于其他版本的 API 不正确。
是否有一种优雅的方式来处理需要不同格式/结构的数据的不同 API 版本?
sql-server - 使用数据库项目进行复杂的重构和版本控制
假设我有一张这样的桌子:
现在假设我在 SQL Server 数据库项目中构建它,并在我的应用程序的 1.0 版中发布它。应用程序已部署,并且表按预期使用。
对于 1.1 版本,产品所有者决定他们要跟踪数据的来源,这将是今后的必填列。对于数据库中已经存在的数据,如果Data
列是数字,他们希望Source
是'NUMBER'。如果不是,它应该是“未知”。
数据库项目中的表现在如下所示:
这构建得很好,但部署升级将是一个问题。如果表中存在数据,这将中断。生成的脚本将创建一个临时表,将旧表中的数据移动到临时表中,删除旧表,并将临时表重命名为原始名称......但如果该表中有数据,则不会,因为它将无法将值分配给不可为空的列Source
。
对于微不足道的重构,重构日志会跟踪架构中的更改,并保持对修改后的数据库对象的感知,但是当您手头有点脏时,似乎没有办法做到这一点。
如何利用数据库项目将这一更改的默认脚本替换为正确捕获升级逻辑的自定义脚本?必须有某种方法来解决这个问题。
php - 在不同的 GIT 分支上使用 Doctrine 2 迁移是否有任何最佳实践?
我正在开发具有 Doctrine 2 依赖项的 Zend Framework 2 项目。源版本控制由 GIT 处理。我们使用 GitFlow 作为分支模型。
有问题的情况:
假设我需要修补并在生产分支上创建迁移 003.php。我还必须将 003.php 更改为 Develop 分支,最终结果将如下所示:
但问题就在这里。如果 Develop 数据库上的当前迁移是 004,并且添加了 003,则不会执行。
处理 Doctrine 2 迁移的最佳方式是什么?
c# - 构建用于版本控制的 Web API 堆栈
因此,在过去的几个小时里,我一直在浏览所有关于 Web API 版本控制的真正绝妙的建议。我最喜欢的一些,对于那些和我一样有趣的人,没有特别的顺序:
ASP.NET MVC 应用程序的版本控制 REST API
http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html
http://www.pluralsight.com/courses/web-api-design
http://www.pluralsight.com/courses/implementing-restful-aspdotnet-web-api
因此,所有这些建议对于设计本质上是 API 的“前端”非常有帮助。我们可以对 API 调用进行版本控制……现在,我进入了最难的部分。
这是一个大量数据驱动的应用程序,适用于拥有多个产品(这是一个新产品)每月发布的公司。一些需要长期支持 API 调用的大客户,一些需要最新版本的小客户。我们可以通过类似于 API 的里程碑/长期支持版本来管理这一点。伟大的。
但在实践中,这会变得非常混乱,非常快。我们努力分离出我们自己网站的层、beta 内部/外部 API、存储库层,甚至是一个用于启动的 SDK。我们将每个版本分开到单独的分支中,但它是 SAAS - 我们托管数据库。因此,我们不仅能够对 API 调用进行版本控制,而且还能够对其下的所有内容进行版本控制。业务逻辑、存储库和数据库。我们甚至不开始单元/集成测试。
所以,尝试并且可能失败在这里只问一个问题。
是否有一种合适的模式来构建分层的、数据驱动的 .NET 应用程序以应对多个版本?
特别是数据库将如何更改以及如何构建通用堆栈以对其进行版本控制。我的一些想法包括:
- 更新堆栈的旧源代码控制分支并部署这些
- 将所有内容保存在同一个项目中,但一直使用文件夹/命名空间
- 进一步拆分项目 - 因此 API 解决方案有许多“控制器”项目,逻辑/回购层具有相似的概念
我们有相当多的开发人员,无论我写了多少 ace 文档,实际上只有在某些东西不工作时才会读取它。因此,理想情况下,开发人员需要尽可能明显地做到这一点。
database - 在 AWS 上设置 Magento
我们为 Magento 进行了 On Prem 设置,它运行良好,但是我们将其迁移到 AWS 环境,我们的站点性能大幅下降,尤其是数据库服务器。是否有任何待办事项或检查清单,我们可以运行并找出路线原因。
flyway - 带人工审核的 Flyway
目前我知道flyway有命令行支持。作为开发人员(或 devops :)),我们使用 jenkins 和我们拥有的标准工具链自动部署。
问题是当我们发布应用程序时,我们必须应用数据库补丁。我们绝对可以自动化它们;但是我们组织的流程说“我们有 DBA 需要在你申请之前审查你的 sql”。
我们知道它相对没用,但我们仍然需要支持它。你能建议一种方法吗?我的意思是,flyway 是否可以/是否有钩子告诉我们将应用迁移 sql 列表?并在屏幕上打印或其他东西,然后DBA可以执行相同的操作吗?
或者我们可以做一些插件来做同样的事情吗?
非常感谢flyway团队的帮助。
这只是阻止我们在实际应用中使用 flyway 的唯一原因。