DynamoDB:查询中的全局二级索引利用率
Posted
技术标签:
【中文标题】DynamoDB:查询中的全局二级索引利用率【英文标题】:DynamoDB : Global Secondary Index utilisation in queries 【发布时间】:2016-12-01 01:04:15 【问题描述】:我来自 RDMS 背景,最近开始使用 DynamoDB。
我有以下带有三个全局二级索引 (GSI) 的 DynamoDB 表
Id(主键)、user_id(GSI)、event_type(GSI)、product_id(GSI) ) , 率, 创建日期
我有以下三种查询模式:
a) 在哪里 event_type=? b) 在哪里 event_type=? AND product_id=? c) 在哪里 product_id=? d) 在哪里 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?
【问题讨论】:
DynamoDB 是基于 indexedDB 的吗? indexedDB 是浏览器支持的嵌入式数据库,可通过 javascript 访问。如果您的问题与此无关,请删除标签。 【参考方案1】:首先,与 RDBMS 不同,Dynamodb 不会根据过滤器表达式中使用的字段来选择 GSI(我的意思是没有 SQL 优化器可以根据 SQL 中使用的字段来选择适当的索引)。
您必须直接查询 GSI 才能获取数据。您可以参考 GSI 查询页面以了解更多信息。
您可以创建两个 GSI:-
1) 事件类型
2) 产品编号
您确保在 GSI 中包含其他必填字段,尤其是产品 ID、用户 ID 和任何其他必填字段。这样,当您查询 GSI 时,您将获得满足用例所需的所有字段。只要您有一个来自 GSI 的字段,您就可以在 Filter 表达式中包含其他字段来过滤数据。这可确保您不会创建需要额外空间和成本的不必要的 GSI。
【讨论】:
以上是关于DynamoDB:查询中的全局二级索引利用率的主要内容,如果未能解决你的问题,请参考以下文章
如何通过从 CloudFormation 中删除来从 DynamoDb 中删除全局二级索引?
并行执行DynamoDB查询(全局二级索引的BatchGetItems)