为了避免GSI,数据集中的哈希/范围键应如下所示?

时间:2018-08-12 19:11:24

标签: amazon-dynamodb

id   date     locationId   comment  type
1    2017-01  DSE374HD2    asdf     a
2    2017-01  DSE374HD2    qwer     a
3    2017-02  DSE374HD2    wer      b

因此,理想情况下,我想将locationId设置为哈希键,将date设置为排序键,但是后来意识到,由于哈希键在表中必须是唯一的,因此它将覆盖值,因此将无法正常工作。

然后,我选择id作为hashkey,并添加了一个全局二级索引,其中locationId作为hash和date作为范围键。我认为这可能行得通,但是由于gsi配置是单独的,因此这会增加成本,因此我就浪费了对主表的1个读取和1个写入,因为据我所知,我需要为gsi添加其他配置。

您有更好的主意吗?

1 个答案:

答案 0 :(得分:0)

不确定表每天可能获取的数据量。 您可以尝试:

分区键:LocationId

排序键:data#id或data#id#type (您可以输入任何名称,例如'CombinedSortKey')

当您为排序键推送数据时,请执行字符串连接以在其中组合多个值。因此,该值可能看起来像这样:

locationId CombinedSortKey
DSE374HD2  2017-01#a#1
DSE374HD2  2017-01#a#2
DSE374HD2  2017-02#b#3

而且,当您扫描或查询表时,可以使用比较键或功能与排序键一起过滤掉所需的数据。

在此页面上查看comparison and function details