DynamoDB:查询中的全局二级索引利用率

时间:2016-12-01 01:04:16

标签: amazon-web-services indexing amazon-dynamodb

我来自RDMS背景,最近我开始使用DynamoDB。

我跟随DyamoDB表有三个全球二级索引(GSI)

  

ID(主键),user_id( GSI ),event_type( GSI ),product_id( GSI )   ,rate,create_date

我有以下三种查询模式:

  • a)WHERE event_type =?
  • b)WHERE event_type =? AND product_id =?
  • c)WHERE product_id =?
  • d)WHERE product_id =? AND user_id =?

我知道在MySQL中我需要创建以下索引来优化上述查询:

  • 复合索引(event_type,product_id):用于查询“a”和“b”
  • 复合索引(product_id,user_id):用于查询“c”和“d”

我的问题是,如果我为DyanomoDB中的'event_type','product_id'和'user_id'字段创建三个GSI,那么查询模式“b”和“d”是否会使用这三个独立的GSI?

1 个答案:

答案 0 :(得分:1)

首先,与RDBMS不同,Dynamodb不会根据过滤器表达式中使用的字段选择GSI(我的意思是没有SQL优化器可以根据SQL中使用的字段选择合适的索引)。 / p>

您必须直接查询GSI才能获取数据。您可以参考GSI查询页面以了解更多信息。

您可以创建两个GSI: -

1)事件类型

2)产品ID

您确保在GSI中包含其他必填字段,尤其是产品ID,用户ID和任何其他必填字段。这样,当您查询GSI时,您将获得完成用例所需的所有字段。只要您有一个来自GSI的字段,就可以在Filter表达式中包含其他字段来过滤数据。这可以确保您不会创建不必要的GSI,这需要额外的空间和成本。