1。是否使用azure cosmosdb changefeed right方法将数据从旧容器迁移到新的分区容器?
2.Azure cosmosdb changefeed是否会有甚至直到现在都没有被修改过的文档?
3.如果上述情况均成立,那么使用azure cosmosdb change feed迁移数据涉及哪些步骤。
答案 0 :(得分:0)
您当然可以使用Change Feed来实现所有这一切。 Cosmos DB有consume the Change Feed的多个选项,其中一个是using Azure Functions。
如果使用“功能”选项,则可以像这样将Cosmos DB Trigger(从StartFromBeginning
到true
)和Cosmos DB Output binding混合在一起,进行快速迁移,< / p>
[FunctionName("Migration")]
public static async Task Run(
[CosmosDBTrigger(
databaseName: "your-source-database",
collectionName: "your-source-collection",
ConnectionStringSetting = "Connection-String-Setting-Name-For-Source-Account",
StartFromBeginning = true,
CreateLeaseCollectionIfNotExists = true,
)] IReadOnlyList<Document> source,
[CosmosDB(
databaseName: "your-destination-database",
collectionName: "your-destination-collection",
ConnectionStringSetting = "Connection-String-Setting-Name-For-Destination-Account" // In case your destination is on a different account, otherwise, it could be the same value as the Trigger
)] IAsyncCollector<Document> destination,
ILogger log)
{
foreach(var doc in source){
await destination.AddAsync(doc);
}
}
有些优化可以应用于多主数据库或地理分布的应用程序(例如,如果您的函数在其他区域运行,则使用PreferredLocations
)。
请记住,该功能可作为实时迁移。它会开始迁移部署之前存在的文档,然后如果您的源集合不断获取插入/更新,它将继续迁移新文档,同时继续运行。
如果您需要的是冷迁移,则也可以使用Data Migration Tool