首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以使用CosmosDb的TTL功能,但始终保存至少n条记录?

问是否有一种方法可以使用CosmosDb的TTL功能,但始终保存至少n条记录?
EN

Stack Overflow用户
提问于 2021-09-20 12:58:08
回答 2查看 284关注 0票数 2

我有向宇宙写入设备的诊断数据,有些设备每天写1000条信息,而另一些设备只写几条。我总是希望有诊断数据,不管何时添加,但我不想永远保留所有这些数据。添加一个90天的TTL对于那些非常活跃的设备来说是很好的,他们将总是有诊断数据,因为他们每天发送它。非活动设备将在TTL之后松掉它们的诊断日志。

是否有一种方法可以使用CosmosDb的TTL特性,但总是保存至少n条记录?

我正在寻找类似的东西,只保存记录,从过去90天(TTL),但始终保存至少100个文件,无论最后更新的时间戳。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-20 13:27:59

对于TTL没有内置的基于数量的过滤器:要么是基于集合的TTL,要么是collection+item TTL (集合中基于项的TTL覆盖默认设置)。

您需要自己创建一些内容,在其中标记要删除的合格文档(可能是基于时间段?),然后运行基于项目计数、删除年龄等的定期清理例程,等等。

或者,您可以对低容量设备和大容量设备进行不同的处理,将大容量设备遥测写入基于TTL的集合,将低容量设备遥测写入非TTL集合(或类似的内容).

博士这不是内置的东西。

票数 3
EN

Stack Overflow用户

发布于 2021-09-20 13:28:03

简短的分析者:没有这种内置的功能。

您可以创建您自己的函数应用程序,它使用调度触发器来触发这样的查询:

代码语言:javascript
复制
SELECT * 
FROM c
WHERE NOT IS_DEFINED(c.ttl) --only update items that have no ttl
ORDER BY c._ts DESC
OFFSET 100 LIMIT 2147483647 --skip the newest 100

然后通过为它们设置一个ttl来更新它们中的项。这样,您将确信最新的100条记录仍然可用(假设您没有另一个进程删除其他记录),同时定期清理其他项目。请记住,更新将重置tll,因为_ts将被更新。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69254833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档