Azure Functions Cosmos DB输入绑定:是否每次调用都执行查询?
Azure Functions Cosmos DB 输入绑定的SQL查询执行机制
首先直接给你明确答案:配置了SqlQuery的Cosmos DB输入绑定,会在每次函数调用时执行查询,不存在后台自动缓存或者基于ChangeFeed的变更检测来复用之前的查询结果。
具体细节可以拆解来看:
- 输入绑定的工作流程:每次函数被触发(不管是HTTP请求、定时任务还是其他触发器类型),Azure Functions runtime都会在执行你的函数代码之前,根据你配置的SqlQuery去Cosmos DB发起一次查询请求,把查询结果注入到你指定的函数参数中。整个过程是每次调用从头走一遍,不会留存上一次的查询结果。
- 为什么不做缓存?这个设计是为了保证函数每次处理的都是最新的数据。如果默认加了缓存,很可能会导致函数拿到过期数据,这对于大多数需要实时数据的场景来说是不可接受的。
- 如果需要缓存怎么办?你可以自己在函数逻辑里实现缓存逻辑,比如用
MemoryCache(适合单实例场景)或者Azure Redis Cache(多实例分布式场景),把查询结果缓存一段时间,下次调用先检查缓存,缓存命中就直接用,没命中再去查Cosmos DB。不过要注意处理缓存失效的问题,比如当Cosmos DB数据更新时,要及时刷新缓存。 - 关于ChangeFeed的区别:ChangeFeed是用来监听Cosmos DB容器的数据变更的,一般是和Cosmos DB触发器配合使用,属于被动接收变更通知的模式;而输入绑定是主动拉取数据的模式,两者的应用场景完全不同,输入绑定不会借助ChangeFeed来优化查询。
内容的提问来源于stack exchange,提问作者Markus S.
相关产品推荐
相关产品推荐

