不带租赁收集的Azure功能上的CosmosDBTrigger

时间:2018-11-14 19:14:55

标签: azure-functions azure-cosmosdb

我有一个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集合的修改?

谢谢

2 个答案:

答案 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,则可以在集合之间共享数据库。