DynamoDB如何设置“反向查询GS”

时间:2019-02-15 21:35:42

标签: amazon-dynamodb

我试图弄清楚如何在DyamoDB中实现反向查找GSI。我参加了今年reInvent(https://youtu.be/HaEPXoXVf2k?t=2674)上有关DynamoDB的精彩演讲。演讲约44分钟后,提出了反向查找GSI的想法。我不知道如何在Dynamo中实现这一点。

我想添加一个GSI进行反向查找。

我当前的计划看起来像: enter image description here

我希望能够仅在CXSK上进行查询。我正在计划重载CXSK,并希望能够以该键开头的查询。

我不确定去创建GSI时会缺少什么。我不确定在以下字段中应该输入什么。我也很好奇拥有重载的排序键是否有意义。

enter image description here

1 个答案:

答案 0 :(得分:1)

假设这是您的原始表格

| pk   |  sk   |  prop1     |   prop2 | ...
| a    |  b    |  xyz       |   abc
| a    |  c    |  lmn       |   opq
| b    |  x    |  rst       |   lme   
| b    |  b    |  tuv       |   opq

在上表中,您可以执行类似的查询

select * where pk = a将返回第1行和第2行

select * where pk = a and sk = b将返回第1行

现在进行反向查找意味着您想通过其他字段名称来聚合数据。 假设我们想通过sk做到这一点。为此,我们将创建一个GSI,其中sk为partitionKey,pk为SortKey。这张表的外观会像

这将是您的GSI1表

| pk   |  sk   |  prop1     |   prop2 | ...
| b    |  a    |  xyz       |   abc
| c    |  a    |  lmn       |   opq
| x    |  b    |  rst       |   lme   
| b    |  b    |  tuv       |   opq

在上表中,您可以执行类似的查询

select * where pk = b将返回第1行和第4行

select * where pk = b and sk = a将返回第1行

考虑到以上描述,在您的情况下,您应该使用pk作为CXSK和sk作为USERId创建GSI