我正在尝试找出应用程序的数据模型和访问模式,以跟踪不同领域(牧场)之间的动物运动。有如下运动记录:
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
对于一个特定的领域,例如 FIELD#A
,我想知道进出该领域的所有运动、运动的日期和动物的数量。结果应如下所示:
DATE FROM TO NUMBER_ANIMALS
--------------------------------------------------
January 3 FIELD#A FIELD#B 2
April 22 FIELD#F FIELD#A 1
可能的解决方案和尝试:
带有
PK=FROM, SK=TO
. 如果我用 查询 GSIPK=FIELD#A
,这只会给出图片的一半,即来自FIELD#A
的运动。我无法获取到 的FIELD#A
动作。一种复合属性,例如在 GSI 中
FIELD#A#FIELD#B
用作。PK
遇到与尝试 1 相同的问题。两个 GSI。GSI1 有
PK=FROM
,GSI2 有PK=TO
。我可以查询 GSI1PK=FIELD#A
并进行一些后处理 (groupby, count
) 以获得部分结果。然后我可以查询 GSI2PK=FIELD#A
并进行后处理,得到其余的结果。这看起来可行,但需要两个 GSI 和两个查询。我不能重载一个 GSI,因为正在使用的两列都来自同一个项目。我宁愿避免扫描整个表格并过滤结果的某种组合,因为整个表格中可能有 50,000 多个项目。
我可以看到如何使用两个 GSI 来做到这一点,但最有效的方法是什么?