【问题标题】:How can I get items from DynamoDB in reverse-chronological order?如何按时间倒序从 DynamoDB 获取项目?
【发布时间】:2018-12-20 18:51:52
【问题描述】:

我正在使用 Javascript AWS SDK 来查询 DynamoDB 表。

我有一个存储“应用程序”的表。每个应用程序都有一个主键(哈希键?)id

每个项目还将applicationTime 存储为日期时间字符串,例如2018-05-21T19:22:50.884Z

我想根据applicationTime返回最近的十个申请。

到目前为止,我有:

db.batchGet({
    TableName: 'Applications',
    Limit: 10,
    ScanIndexForward: false,
}, (err, data ) => {
        err ? console.log(err, err.stack) : console.log(data)
})

文档对新手不太友好,seems to suggest 我可能需要一个本地二级索引才能按applicationTime 排序。

但是,很明显,只有在最初创建表时才能创建本地二级索引。这是一个生产数据库,因此非常希望避免重新制作表。

与我使用过的所有其他数据库产品(SQL 和 noSQL)相比,这非常困难。

我肯定遗漏了一些明显的东西吗?

PS。这适用于只偶尔使用的面向管理员的工具,而不是面向用户的核心功能,所以如果这是唯一的选择,我将满足于低效的解决方案(例如扫描)。 p>

【问题讨论】:

    标签: javascript amazon-web-services amazon-dynamodb


    【解决方案1】:

    您是对的,您不能使用本地索引,因为它们是在创建表时创建的。因此,您可以选择全局索引或扫描。

    扫描

    这很简单。不支持对扫描进行排序,因此您只需获取所有数据并在应用程序中对其进行排序。

    GSI

    拥有索引可以简化任务。唯一的问题是使用什么哈希/排序对?根据伟大的"Best Practices for Handling Time-Series Data in DynamoDB" 指南,您可以做一个技巧并将日期拆分为日期和时间对,然后使用日期作为哈希键和时间作为排序键。这样做需要更改applicationTime 处理应用程序的某些部分,但影响似乎并不可怕。然后,您可以使用对该索引的查询来获取最新的应用程序。但是,如果您每天的应用程序少于 10 个,则需要进行多次查询。


    与我使用过的所有其他数据库产品(SQL 和 noSQL)相比,这非常困难。

    没错!

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2020-03-23
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多