如何从DynamoDB中以倒序的顺序获取项目?

时间:2018-12-20 18:51:52

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

我正在使用Javascript AWS开发工具包查询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。

>

1 个答案:

答案 0 :(得分:1)

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

扫描

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

GSI

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


  

与我使用过的所有其他数据库产品(SQL和noSQL)相比,这简直是难以置信的困难。

是真的!