我正在使用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。
>答案 0 :(得分:1)
是的,您不能使用在表创建时创建的本地索引。因此,您可以选择全局索引或扫描。
那很简单。不支持扫描排序,因此您只需获取所有数据并在应用程序中对其进行排序。
具有索引可简化任务。唯一的问题是使用哪种哈希/排序对?根据出色的"Best Practices for Handling Time-Series Data in DynamoDB"指南,您可以做一些技巧,将日期分为日期和时间对,然后将日期用作哈希键,将时间用作排序键。这样做需要对applicationTime
的应用程序处理部分进行更改,但是影响似乎并不可怕。然后,您可以使用该索引上的查询来获取最新的应用程序。但是,如果每天只有不到10个应用程序,则需要进行多次查询。
与我使用过的所有其他数据库产品(SQL和noSQL)相比,这简直是难以置信的困难。
是真的!