gpt4 book ai didi

amazon-dynamodb - 以字段值或元素数量为条件删除 dynamo db 列表中的前几个条目

转载 作者:行者123 更新时间:2023-12-04 07:14:33 25 4
gpt4 key购买 nike

我在 dynamoDB 中有一个数据集,如下所示:

{
"userID" : 2323423, // Primary Key
"lt" : [
{
"timestamp" : epoch1,
"coordinates" : "coordinate1"
},
{
"timestamp" : epoch2,
"coordinates" : "coordinate2"
},
...
]
}
“lt”是位置跟踪列表,用于存储用户 ID 在不同时间的坐标值。
第一季度 要求是:
  • 为每个用户存储最多 1 天的位置跟踪数据,只有在收到新的 LT 坐标数据条目时才会自动删除
  • 这意味着一次可能会有陈旧的 LT 数据,所有这些数据的持续时间都是 24 小时。但是,一旦新的 LT 坐标数据出现,就会删除陈旧的条目,以便删除超过 24 小时的条目。

  • 我很清楚如何将条目附加到列表,甚至从 dynamoDB 的列表中删除特定索引处的条目。

    UpdateExpression : "REMOVE lt[0]" - Remove one element

    UpdateExpression : "REMOVE lt[0] lt[1]" - Remove elements 0 and 1


    但是,现在的要求是从列表的开头删除条目,以便从列表中删除早于 24 小时的条目。我已经为此纠结了很长时间,似乎没有任何条件表达式可以帮助我们做到这一点。我错过了什么吗?
    Q2 作为一种解决方法,我将要求更改为:
  • 将最后 100 个条目存储到这个“lt”列表中。
  • 这将为用户保留潜在的陈旧 LT 数据,以防他们的 LT 数据未收到

  • 如果我为用户收到 N 个新的 LT 点数,如果总条目数变为 100 + “n”个,我想删除前“n”个条目。如果条目总数小于或等于 100,则无需删除条目。
    我显然可以将新的 N 个条目附加到用户项的“lt”列表中,取回该用户项,找出条目的总数,然后删除第一个“n”个条目,但这将是低效的,因为我将有进行两个查询,其中一个我必须返回整个“lt”列表。
    如果可以通过某种 Count 构造检索“lt”列表的大小,这将有所帮助,有没有。
    我想了解它实际上应该如何完成?

    最佳答案

    您不需要将位置建模为列表。您可以将它们建模为 map ,使用 HH:MM 作为 map 的键。在您的更新表达式中,只需 SET lt.#hhmm = :coordExpressionAttributeNames={#hhmm:"16:05"}ExpressionAttributeValues={:coord:"0,0"} .如果您每分钟记录一次位置,则意味着 lt 中有 24 * 60 = 1440 个条目。 map 。如果每个坐标对的长度为 19 个字符,则每个条目大约有 30 个字节,如果每分钟记录一次,则每人大约有 43 KB。

    使用上述方案,每分钟花费大约 43 个 WCU,或每用户每秒不到 1 个 WCU 以分钟粒度维护当前位置。这对一位客户来说有点高。相反,您可以将用户位置项分成 30 分钟的存储段,使用 48 个这样的项来覆盖每人 24 小时的跨度。因此,UpdateItem 写入成本将为每分钟 1 WCU 或每小时 60 WCU。散列键的形式类似于 <user_id>_HH:<00 or 30> .

    关于amazon-dynamodb - 以字段值或元素数量为条件删除 dynamo db 列表中的前几个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39163621/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com