当前位置: 首页 > 知识库问答 >
问题:

Dynamodb GSI查询:排序键扮演什么角色

戚泰
2023-03-14

我一直在阅读关于使用GSI的最佳方式的问题,这一个DynamoDB:在查询中使用全球二级索引接近我所需要的,但我仍然有几个问题。

product_id (partitions_key), product_name, launch_year, manufacturer

我需要进行以下三类查询:

1. product_name=?
2. product_name=? AND launch_year=?
3. product_name=? AND manufacturer=?

根据我的理解,创建一个基于product_name的GSI将服务于所有三个目的。我想了解的是,在排序键中再添加2个带有launch_year和manufacture的GSI会加快查询2和3的速度吗?sort key的唯一目的是返回已排序的数据,还是Dynamodb查询会以某种方式利用感兴趣的字段已排序的事实?

共有1个答案

宋斌
2023-03-14

不需要再创建两个索引。原因是:-

  1. 会增加额外的成本。拥有多个GSIs将花费您的读写容量单元
  2. 同样,对于上面的两个用例,它不是必需的。您可以使用FilterExpressionsLaunch_YearManufactor
  3. 筛选数据
  4. 另一种选择是只有一个GSI,它具有product_namelaunch_year。因此,您有两个用例。对于第三个用例,您可以使用FilterExpression
  5. 在所有这些选项中,您仍然可以使用查询API,因为您具有分区键product_name
 类似资料:
  • 本文向大家介绍副本和ISR扮演什么角色?相关面试题,主要包含被问及副本和ISR扮演什么角色?时的应答技巧和注意事项,需要的朋友参考一下 答:基本上,复制日志的节点列表就是副本。特别是对于特定的分区。但是,无论他们是否扮演领导者的角色,他们都是如此。 此外,ISR指的是同步副本。在定义ISR时,它是一组与领导者同步的消息副本。

  • 我使用Redis作为内存中的数据存储,用于spring boot应用程序中的缓存目的。目前,我已经为我需要缓存的实体实现了基本CRUD功能的Redis支持[Scenario 1]。但突然间,我发现有很多资源使用额外的Spring Boot缓存注释,比如来实现Redis的缓存[Scenario 2]。我监控到,当我们开始在find(params)这样的操作中使用这些注释时,只有第一个方法调用会被调用

  • 我有一个DynamoDB表,其中包含主键:userID、排序键:sesionID和另一列,该列名为示例ID。 我想返回一个列表,该列表返回所有包含我发送的userID和examID的记录。这是我的代码: 这就是我得到的错误:{“statusCode”:500,“body”:“{”error“:“查询条件缺少关键架构元素:sessionId”}”, ... 我想也许我应该包括一个过滤器表达式,或者不

  • 数学成绩从高到低排序 const { field = '' } = ctx.query const fields = ctx.helper.filterFields(field) // 数学成绩从高到低排序 const ret = await Student.findAll({ attributes: fields, order: [ ['math', 'DESC

  • 每次我在Android10上通过“Codename One Build”应用程序安装apk版本时,Play Protect都会让我恼火。 有没有办法确保代号为One的应用程序不会干扰Play Protect?每次有人问我是否想把我正在开发的应用程序发送到谷歌:这很烦人,也不合适。可能在开发应用程序的过程中,我不得不将其删除并重新安装数百次或数千次。。。

  • 我们大量使用cassandra wide rows来存储每个用户的时间序列,因为它们非常适合那个用例。假设我们有一个表: 如果时间戳上的冲突可能发生(相同的用户可以用相同的时间戳发出两个不同的事件)。假设我们对所有事件都有一个顺序(每个事件都有一个序列int),那么调整这个模式来解决这个问题的最佳方法是什么。 我将无法执行-cassandra不允许这样做。