Amazon web services 有没有比使用两个全局二级索引(GSI)更好的方法来建模这种访问模式?
我试图找出一个应用程序的数据模型和访问模式,该应用程序跟踪动物在不同领域(牧场)之间的移动。有些移动记录如下所示:Amazon web services 有没有比使用两个全局二级索引(GSI)更好的方法来建模这种访问模式?,amazon-web-services,amazon-dynamodb,dynamodb-queries,amazon-dynamodb-index,amazon-dynamodb-data-modeling,Amazon Web Services,Amazon Dynamodb,Dynamodb Queries,Amazon Dynamodb Index,Amazon Dynamodb Data Modeling,我试图找出一个应用程序的数据模型和访问模式,该应用程序跟踪动物在不同领域(牧场)之间的移动。有些移动记录如下所示: PK FROM TO DATE ------------------------------------------------------ ANIMAL#001 FIELD#A FIELD#B January 3 ANIMAL#001 FIELD#Q
PK FROM TO DATE
------------------------------------------------------
ANIMAL#001 FIELD#A FIELD#B January 3
ANIMAL#001 FIELD#Q FIELD#R September 19
ANIMAL#002 FIELD#A FIELD#B January 3
ANIMAL#003 FIELD#C FIELD#D March 15
ANIMAL#005 FIELD#F FIELD#A April 22
对于一个特定的领域,例如领域#a
,我想知道进出该领域的所有活动、活动日期以及动物数量。结果应该如下所示:
DATE FROM TO NUMBER_ANIMALS
--------------------------------------------------
January 3 FIELD#A FIELD#B 2
April 22 FIELD#F FIELD#A 1
可能的解决方案和尝试:
PK=FROM,SK=TO
的GSI。如果我用PK=FIELD#A
查询GSI,这只会给出图片的一半,即从FIELD#A
的移动。我无法获取到字段A
的移动
FIELD#A#FIELD#B
,用作GSI中的PK
。遇到与尝试1相同的问题
PK=FROM
,GSI2具有PK=TO
。我可以用PK=FIELD#A
查询GSI1,并进行一些后处理(groupby,count
)以获得部分结果。然后,我可以使用PK=FIELD#A
查询GSI2并进行后期处理,得到结果的其余部分。这看起来可以工作,但需要两个GSI和两个查询。我不能重载一个GSI,因为正在使用的两列都来自同一项
我知道如何使用两个GSI,但最有效的方法是什么?我可以想象一个稍微不同的表结构(
ANIMALID
是分区键,FIELDID
是排序键):
以及具有以下结构的GSI:
FIELDID | ANIMALID | ...
然后,您可以只通过FIELDID
查询GSI并聚合结果
FIELDID | ANIMALID | ...