当前位置: 首页 > 知识库问答 >
问题:

Azure cosmosDB不会删除TTL过期的文档

宿楚青
2023-03-14

我在Azure cosmosDB中有一个集合,我在其中启用了无默认值的生存时间(TTL)功能。

根据我将在此问题中提到的文档,一切似乎都非常清楚,但仍然缺少一些东西,因为5天后我仍然可以看到TTL为300秒的文档。

符合文件要求:

Azure Cosmos DB将在这段时间后自动删除这些项目,因为它们是最后一次修改的。生存时间值以秒为单位进行配置。当您配置TTL时,系统将根据TTL值自动删除过期的项目,而不需要客户端应用程序明确发出的删除操作。

但这似乎不适用于我的情况,在2019年7月17日,我可以使用300秒(5分钟)的TTL查看超过5天的文档。

{
    "ClientEnqueuedUtcTime": "2019-07-12T06:49:53.844",
    "ClientDispatchedUtcTime": "2019-07-12T06:49:53.844",
    "ServerEnqueuedUtcTime": "2019-07-12T06:49:53.8949771",
    "ServerDispatchedUtcTime": "2019-07-12T06:49:54.3659741",
    "TTL": 300,
    "EventProcessedUtcTime": "2019-07-12T06:49:55.3583521Z",
    "PartitionId": 2,
    "EventEnqueuedUtcTime": "2019-07-12T06:49:55.25Z",
    "id": "4a0edf24-6a86-4a59-f55d-d7dfe47c30fa",
    "_rid": "SBk4AJadUE6gAgEAAAAAAA==",
    "_self": "dbs/SBk4AA==/colls/SBk4AJadUE4=/docs/SBk4AJadUE6gAgEAAAAAAA==/",
    "_etag": "\"00008f1d-0000-0200-0000-5d282d930000\"",
    "_attachments": "attachments/",
    "_ts": 1562914195
}

更新答案后

< s >我尝试将TTL转换成小写格式,但它会自动转换成大写,所以我不认为这是与预期的TTL密钥大小写不匹配。

我应该做或尝试其他事情吗?

解决方案:

ttl确实区分大小写,您可以将其设置为小写,在我所做的测试中,由于某种原因,ttl仍然是大写的,当我期望它更低时,所以我错误地坚持这是某种保留键。

共有1个答案

艾奕
2023-03-14

正如您在这里看到的,正是属性的情况导致了这一点不起作用。

它需要小写。我刚刚使用TTLttl进行了测试,实际上第一个不起作用,但第二个确实如留档中所述起作用。可能是您的Json序列化程序强制它大写。

您可以使用JsonProperty属性强制属性的大小写为小写。以下是Microsoft文档中的<code>ttl<code>属性的示例。


    // Include a property that serializes to "ttl" in JSON
    public class SalesOrder
    {
        [JsonProperty(PropertyName = "id")]
        public string Id { get; set; }
        [JsonProperty(PropertyName="cid")]
        public string CustomerId { get; set; }
        // used to set expiration policy
        [JsonProperty(PropertyName = "ttl", NullValueHandling = NullValueHandling.Ignore)]
        public int? ttl { get; set; }

        //...
    }

 类似资料:
  • 本文向大家介绍python删除过期文件的方法,包括了python删除过期文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python删除过期文件的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 在web.xml中,my的被设置为120(即2小时)。Hazelcast地图名为SessionMap,其TTL为24小时。这里的想法是,我们希望结束2小时不活动的会话,但如果有人持续使用应用程序,我们希望让会话继续最多24小时。 问题是,如果我让一个会话处于空闲状态,Tomcat将在2小时后终止会话,但会话仍将保留在Hazelcast映射(SessionMap)中,直到TTL。当会话在Tomcat

  • 问题内容: 我刚刚在android应用程序中编写了一个函数,该函数使用Java中的标准“文件”类删除文件。即: 尽管上面的过程很简单,但我一直想知道通过“ ContentResolver”执行该操作是否有任何好处。任何意见,将不胜感激。 干杯, 杰瑞德 ------------------------------------------编辑------- 这是通过Content Resolver删

  • https://ci.apache.org/projects/flink/flink-docs-release-1.8/dev/stream/state/state.html#state-time-to-live-ttl 我想确定TTL特性启用的位置,是在key字段上还是在value字段上。特别是,假设我有一个像这样的mapState结构: 如果我要通过StateTtlConfig在mapStat

  • 问题内容: 我有以下Java代码,它会遍历目录中的所有文件并将其删除。 但是,它不会删除所有文件。在执行此操作时,通常会留下几千个中的20-30个。是否有可能解决此问题,或者我偶然发现了一些最好单独使用的Java伏都教徒? 问题答案: 强制使用垃圾回收器运行会使所有文件可删除。

  • 编辑:修改问题以更好地反映问题。此处最初发布的问题 我有一个父实体(< code >上下文)和一个子实体(< code >用户)。父级上的级联“删除”不会删除子级。代码如下: