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相同的问题

  • 两个GSI。GSI1具有
    PK=FROM
    ,GSI2具有
    PK=TO
    。我可以用
    PK=FIELD#A
    查询GSI1,并进行一些后处理(
    groupby,count
    )以获得部分结果。然后,我可以使用
    PK=FIELD#A
    查询GSI2并进行后期处理,得到结果的其余部分。这看起来可以工作,但需要两个GSI和两个查询。我不能重载一个GSI,因为正在使用的两列都来自同一项

  • 扫描整个表和过滤结果的一些组合,我宁愿避免,因为整个表中可能有50000多个项目


  • 我知道如何使用两个GSI,但最有效的方法是什么?

    我可以想象一个稍微不同的表结构(
    ANIMALID
    是分区键,
    FIELDID
    是排序键):

    以及具有以下结构的GSI:

    FIELDID | ANIMALID | ...
    
    然后,您可以只通过
    FIELDID
    查询GSI并聚合结果

    FIELDID | ANIMALID | ...