2016-12-01 94 views
0

我来自RDMS背景,最近我开始使用DynamoDB。DynamoDB:查询中的全局二级索引利用率

我有三个全球辅助索引(GSI)

ID(主键),USER_ID(GSI),EVENT_TYPE(GSI),PRODUCT_ID以下DyamoDB表(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”

我的问题是,如果我创建三个GSIS为 'EVENT_TYPE', 'PRODUCT_ID' 和DyanomoDB 'USER_ID' 字段中,执行查询模式“ b“和”d“利用这三个独立的G SIs?

+0

基于indexedDB的DynamoDB? indexedDB是一个由浏览器支持并可通过Javascript访问的嵌入式数据库。如果您的问题与此无关,请删除标签。 – Josh

回答

1

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

您必须直接查询GSI以获取数据。你可以参考GSI查询页面来了解更多。

您可以创建两个GSIS: -

1)事件类型

2)产品编号

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

相关问题