DynamoDB 分层、排序查询

0

【以下的问题经过翻译处理】 我想要能够逐层查询数据并按另一个属性排序返回结果。存储和查询已排序的层次数据的最有效方法是什么?

例如,如果我有一个包含四个属性的表:customer_idcountrylocationlast_updated_date,其中location包含像state:county:city这样的层次信息,所以几条记录可能是这样的:

------------|--------|-------------------|-------------|
customer_id |country |location           |last_updated |
------------|--------|-------------------|-------------|
123456      |USA     |WA:King:Seattle    |2022-03-18   |
789012      |USA     |WA:King:Kent       |2022-03-15   |
098765      |USA     |NY:Bronx:NYC       |2022-02-28   |
432109      |USA     |WA:Spokane:Spokane |2022-03-20   |

表的PKcustomer_id,因为大多数查询都会通过customer_id提取信息,但是还有其他用例希望(a)找到给定位置(例如statecounty)中的所有客户,并(b)将结果按last_updated排序(降序)。为了完成(a),我有一个具有country作为PKlocation作为SKGSI,使用location.begins_with查询GSI

但我无法弄清楚如何完成(b)。我的理解是排序操作通常使用scanIndexForward执行,但我已经在使用GSI进行层次查询了。是否有一种方法可以同时完成(a)和(b)?

谢谢!

profile picture
EXPERTE
gefragt vor 8 Monaten18 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 创建一个GSI,其中PK是Country+Location连接起来的,而SK是last_updated。然后,对于任何给定的Country+Location值,您都可以找到该位置的最新更新值(以及投影中对应的客户ID)。请注意,您可以设置20个GSIs。

或者您是否希望针对位置(例如WA:King的更广泛价值)进行begins_with操作,同时仅获取最新的X个值?在这种情况下,您做不到。但是,您可以在每个分层级别(例如WA:King等)插入新项目,以便该值可以用作PK。基本上在每个级别上预材料化。每个表/索引只能获取一个排序键,并且不能两次使用排序键功能。

当然,如果您打算获取所有匹配的项(而不仅仅是最新的X个),并且只想对它们进行排序,您可以在客户端上进行排序。

profile picture
EXPERTE
beantwortet vor 8 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen