Cosmos DB 和 DevOps 自动化

xwr*_*wrs 5 .net powershell devops azure-cosmosdb

最近我遇到了一个场景,我需要在我的 CosmosDB 数据库上执行某种 DDL 和 DML 迁移(我知道这些首字母缩写词不适用于 NoSQL,但无论如何)。这些迁移计划在 CI/CD 管道中自动化和执行。

显然,很难在网上找到有关我想要实现的功能的任何信息。以下是一些标准:

  • 将静态数据存储在源代码存储库中。查看。可以使用一些 powershell 部署到数据库
  • 在源代码存储库中有 javascript 存储过程。查看。再来点powershell
  • 修改一些数据以反映应用层的变化。例如,在集合范围内或选定记录上添加一些具有默认值或特定值的字段。- 不检查。目前找不到可接受的解决方案。

我对最后一点感到非常沮丧,并试图避免创建将使用 SDK 应用 DML 更改的应用程序。在 .net 世界中,AFAIK EntityFramework 不支持 CosmosDB 中的自动迁移。

所以一个好的社区的问题是:有没有什么被认为是自动化 Cosmos DB 数据修改的好做法?

我上面所说的是否有意义,还是像处理 RDBMS 一样处理 NoSQL DBMS 的另一种尝试?

Noa*_*ahl 1

例如,虽然 Cosmos 不强制执行模式,并且会接受您开始提供的任何新字段或格式,但我有时会遇到一种一次性“迁移”有意义的场景,例如重命名字段。我使用的一种方法是创建一次性、按需的 Azure Function,其唯一任务是读取现有数据、验证并进行所需的更改。

这段代码可以非常谨慎地进行更改,并配置安全措施,以确保它仅手动/有意运行,并且具有幂等性,可以安全地多次运行并获得相同的结果。它在逻辑上可以与应用程序的代码库分开,但仍然可以使用共享数据访问代码,例如存储库类。除非您安排停机时间,否则需要考虑迁移窗口期间发生的更改,幂等性通过允许根据需要运行多次传递来解决这一问题。

另一个值得考虑的选择是利用Azure 数据工厂及其集成来读取和转换 Cosmos 数据。