【问题标题】:Azure Function Cosmos DB input binding document count limitAzure Function Cosmos DB 输入绑定文档计数限制
【发布时间】:2020-03-25 17:29:50
【问题描述】:

我正在构建一个持久函数,它会定期处理我的 Cosmos DB 中的每条记录(晚上和周末)。现在我只有几百条记录,但一旦投入生产,我预计会收到超过 50k 的文档,每周添加约 1k。

我通过activityTrigger 获取文件,绑定如下:

{
  "bindings": [
    {
      "name": "name",
      "type": "activityTrigger",
      "direction": "in"
    },
    {
      "type": "cosmosDB",
      "direction": "in",
      "name": "articles",
      "databaseName": "Arts",
      "collectionName": "ArtData",
      "connectionStringSetting": "CosmosTrigger_ConnectionString",
      "sqlQuery": "SELECT * FROM c WHERE c.type='article'"
    }
  ],
  "scriptFile": "../dist/GetAllArticleData/index.js"
}

通过 SQL 查询绑定返回给 Azure 函数的文档总数是否有限制?还是 Azure Functions 自动处理分页,没有上限?

如果没有内置分页,如何将持久函数链接在一起,第一个活动获取总行数,然后调用扇出/输入查询函数,其中 OFFSET 和 LIMIT 子句是从协调器?这是一个可靠的模式吗?

【问题讨论】:

  • 没有真正的限制,您只需要继续传递继续令牌,直到您耗尽查询。但我有更大的担忧。如果您的分区键是类型,那么如果您继续向此容器添加数据,您最终将达到 20GB 的限制。如果 type 不是分区键,那么您将运行一个非常昂贵的查询,随着时间的推移将继续变得更加昂贵。另外,为什么要批量运行它。 Cosmos + Azure Functions 更适合流式更新。与每周进行一次批量更新相比,IT 更经济且可扩展,可随手更新。
  • 感谢您的评论。使用 JavaScript 绑定,我根本不处理 Cosmos 上下文。我只是将文档作为函数上下文的属性。我根本无权访问延续令牌。我想知道 Azure 函数是否会自动为我处理延续。至于分区键,是另外一回事,所以不用担心20GB的限制。
  • 至于为什么要批处理?我正在使用持久功能扇出/输入来处理批处理(我有另一个处理更改馈送的功能)来执行一些依赖于数据顺序的业务逻辑。我不控制数据传入的顺序,因此处理所有事情的最佳方法是定期通过业务逻辑运行所有内容。我需要处理所有内容,因为从现在开始的几周内出现的数据可能与去年处理的数据有关。这就是为什么我会在晚上/周末运行它。如果运行需要 8 小时,那就这样吧。没有其他人在使用该系统。

标签: azure-functions azure-cosmosdb


【解决方案1】:

Cosmos DB 输入绑定会耗尽整个查询结果并将它们传递给您的函数,不需要继续。

如果查询有 10 个结果或 1000 个,它将耗尽查询并将它们作为输入传递。

这里是code reference

【讨论】:

  • 有上限吗?
猜你喜欢
  • 2019-01-04
  • 1970-01-01
  • 2022-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2018-04-13
  • 2018-06-20
相关资源
最近更新 更多