我有向宇宙写入设备的诊断数据,有些设备每天写1000条信息,而另一些设备只写几条。我总是希望有诊断数据,不管何时添加,但我不想永远保留所有这些数据。添加一个90天的TTL对于那些非常活跃的设备来说是很好的,他们将总是有诊断数据,因为他们每天发送它。非活动设备将在TTL之后松掉它们的诊断日志。
是否有一种方法可以使用CosmosDb的TTL特性,但总是保存至少n条记录?
我正在寻找类似的东西,只保存记录,从过去90天(TTL),但始终保存至少100个文件,无论最后更新的时间戳。
发布于 2021-09-20 13:27:59
对于TTL没有内置的基于数量的过滤器:要么是基于集合的TTL,要么是collection+item TTL (集合中基于项的TTL覆盖默认设置)。
您需要自己创建一些内容,在其中标记要删除的合格文档(可能是基于时间段?),然后运行基于项目计数、删除年龄等的定期清理例程,等等。
或者,您可以对低容量设备和大容量设备进行不同的处理,将大容量设备遥测写入基于TTL的集合,将低容量设备遥测写入非TTL集合(或类似的内容).
博士这不是内置的东西。
发布于 2021-09-20 13:28:03
简短的分析者:没有这种内置的功能。
您可以创建您自己的函数应用程序,它使用调度触发器来触发这样的查询:
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将被更新。
https://stackoverflow.com/questions/69254833
复制相似问题