【问题标题】:How to get last inserted data from DynamoDb in lambda function如何在 lambda 函数中从 DynamoDb 获取最后插入的数据
【发布时间】:2017-07-11 07:42:07
【问题描述】:

我在 Dynam0Db 中有表,
timestamp 作为分区键,
Status 作为普通列。

每当有新数据出现时,我都会在 DynamoDb 中插入 timestampstatus

我想检索最后添加到表中的数据(这里我们可以参考时间戳)。

那么我该怎么做(我正在使用带有 NodeJs 语言的 lambda 函数)。

如果有任何疑问请在下方评论,谢谢。

【问题讨论】:

    标签: node.js amazon-dynamodb aws-lambda nosql


    【解决方案1】:

    您可以使用以下参数对您的表进行查询:

    Limit: 1,
    ScanIndexForward : false
    

    但由于时间戳作为分区键,执行查询似乎很复杂。

    另一种方法是在表中触发 lambda 函数的每个新条目处生成一个流:

    【讨论】:

    【解决方案2】:

    Stream->Lambda 方法在上一个答案中建议是可以的,但是如果您需要多次检索最新条目,这将不起作用。或者,因为你总是有一个最新的项目,你可以简单地创建另一个表,其中只有一个具有恒定哈希键的项目,并在每次更新时覆盖它。第二个表将始终包含 1 条记录,这将是您的最新项目。您可以通过来自主表和 lambda 的流,或直接从执行原始写入的应用程序更新第二个表。

    [更新] 如 cmets 中所述,仅使用 1 条记录会将吞吐量限制为 1 个分区限制 (1000 WCU)。如果您需要更多,请使用分片方法:在写入时将最新数据随机存储在 N 条记录之一中,并在读取时扫描所有 N 条记录并选择最新的一条。

    【讨论】:

    • 请务必提及这将限制为每秒 1000 个项目(第二个表的吞吐量)
    • 为什么是 1000?您可以将吞吐量更改为您想要的任何值
    • 在第二张表上,您只有一项,因此一项将始终位于一个分区中。吞吐量限制为每个分区每秒 1000 次写入。
    • 对!忘了那个。但是,如果这成为限制,您总是可以切换到分片:而不是有 1 条记录,有 N 条记录,并将最新的项目分配给从 1 到 N 的随机 id,然后在读取时,读取所有 N 条记录并选择最新的一。
    • 当然可以,但您可能希望将这些详细信息添加到答案中,以免人们被误导。
    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2015-08-10
    • 2012-01-21
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多