我有一个Azure函数,每次CosmosDb集合中的一项或多项更新时都会触发。
代码正常工作:
[StorageAccount("AzureWebJobsStorage")]
public static class ChangeFeedFunction
{
[FunctionName("ChangeFeedFunction")]
public static void ChangeFeedFunction(
[CosmosDBTrigger(
databaseName: "MyDataBase",
collectionName: "MyCollection",
ConnectionStringSetting = "CosmosDbConnectionString",
LeaseCollectionName = "MyCollection_Leases",
CreateLeaseCollectionIfNotExists = true
)] IReadOnlyList<Document> documents,
[Queue("collection-changes")] ICollector<Message> analystQueue,
ILogger logger
)
{
//Operations;
}
但在这种情况下,这意味着我有2个CosmosDb集合( MyCollection 和 MyCollection_Leases ),每月最低费用为40美元。我想降低成本。有没有办法在不使用另一个CosmosDb集合的情况下观察我的CosmosDb集合的修改?
谢谢
答案 0 :(得分:3)
继cosmos db trigger function document之后,lease
集合至今尚无法避免,因为它承担着重要的责任。
使用触发器存储每个功能的检查点时,我们需要一个lease
集合。我要说的是,如果将10个文档插入到cosmos db中,则触发函数被一个接一个地触发,并且检查点随过程移动并存储到lease
集合中。突然,触发器关闭是由于某些原因造成的。在这段时间内,又有5个文档插入db。触发函数重新启动后,它将知道从哪个节点继续执行lease
集合中的检查点的执行函数。(我希望我已经说清楚了……)
顺便说一句,您可以为所有馆藏共享一个lease
馆藏,以采用更具成本效益的方法。请参阅此article。
关于成本,您可以创建最少配置的lease
集合。门户网站上的成本是估计值。基于RU消耗的价格。请参阅此document。
答案 1 :(得分:0)
我建议扩展数据库而不是集合。如果您将数据库扩展为400 RU / s,则可以在集合之间共享数据库。