我希望Cosmos DB数据库中的两个不同容器始终都包含完全相同的数据。唯一的区别是容器的分区键。
最简单的方法是什么?我正在寻找一种几乎没有代码的方法,因此我不喜欢互联网似乎推荐的Data Factory解决方案。也许Azure中有另一项服务或第三方服务-也许可以通过简单的触发器来可靠地完成它?
编辑:澄清-我需要不断对其进行更新。一个容器是在正常使用期间更改所有数据的容器,而另一个容器应在发生这种情况时保持同步。
答案 0 :(得分:2)
如果您不想编写自己的代码来执行此操作,则可以使用具有Cosmos DB Live Data Migrator的此存储库。
这可以通过Azure部署按钮进行部署。部署后,您可以打开网站并输入所有必需的信息。然后单击另一个按钮,它将使两个容器与不同的分区键保持同步。
答案 1 :(得分:1)
这是它的功能代码:
Total_SA =
VAR insSA = CONVERT(SUBSTITUTE([Incremental SA], "RM", ""),INTEGER)
VAR refSA = CONVERT(SUBSTITUTE([Referral SA],"RM",""),INTEGER)
VAR PreviousRow =
TOPN (
1,
FILTER (
'Table',
'Table'[Index] < EARLIER('Table'[Index]) &&
'Table'[Pol No.] = EARLIER ( 'Table'[Pol No.])
),
[Index], DESC
)
VAR PreviousValue = MAXX( PreviousRow,CONVERT(SUBSTITUTE('Table'[Referral SA], "RM", ""),INTEGER) )
RETURN PreviousValue + CONVERT(SUBSTITUTE('Table'[Incremental SA], "RM", ""),INTEGER) + 500
以及必须配置的设置 local.settings.json:
using System;
using System.Collections.Generic;
using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace CosmosDBSyncFunction
{
public static class SyncCosmosDb
{
[FunctionName(nameof(Sync))]
public static void Sync(
[CosmosDBTrigger(
databaseName: "evaluation",
collectionName: "lorem",
ConnectionStringSetting = "cosmos-mm-eval",
LeaseCollectionName = "leases",
CreateLeaseCollectionIfNotExists=true
)]IReadOnlyList<Document> input,
[CosmosDB(
databaseName: "evaluation",
collectionName: "ipsum",
ConnectionStringSetting = "cosmos-mm-eval")] IAsyncCollector< Document> output,
ILogger log)
{
foreach(var item in input)
{
output.AddAsync(item);
}
}
}
}