Indexing dynamodbgsi查询:排序键扮演什么角色

Indexing dynamodbgsi查询:排序键扮演什么角色,indexing,amazon-dynamodb,Indexing,Amazon Dynamodb,我一直在阅读有关使用GSI的最佳方式的问题,这一个接近我需要的,但我仍然有一些问题 我有一个场景,其中我有一个带有字段的产品表: product_id (partitions_key), product_name, launch_year, manufacturer 我需要进行以下三种类型的查询: 1. product_name=? 2. product_name=? AND launch_year=? 3. product_name=? AND manufacturer=? 据我所知,基于

我一直在阅读有关使用GSI的最佳方式的问题,这一个接近我需要的,但我仍然有一些问题

我有一个场景,其中我有一个带有字段的产品表:

product_id (partitions_key), product_name, launch_year, manufacturer
我需要进行以下三种类型的查询:

1. product_name=?
2. product_name=? AND launch_year=?
3. product_name=? AND manufacturer=?
据我所知,基于产品名称创建一个GSI将满足所有3个目的。
我想了解的是,添加2个GSI(具有发布年份和制造商)作为排序键会加快查询2和查询3的速度吗?sort key的唯一用途是返回已排序的数据,还是Dynamodb查询会以某种方式利用感兴趣的字段已排序的事实?

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

  • 这将增加额外的费用。拥有多个GSI将花费您的读写容量单位
  • 此外,对于上述两个用例,它不是必需的。您可以使用
    filtereexpressions
    launch\u year
    manufacturer
    筛选数据
  • 另一种选择是只有一个GSI具有
    产品名称
    发布年份
    。因此,我们将介绍两个用例。对于第三个用例,您可以使用
    filtereexpression
  • 在所有这些选项中,您仍然可以使用查询API,因为您有分区键
    product\u name

  • 可能您想了解二进制搜索,所以我假设dynamodb查询在这种情况下使用二进制搜索而不是线性搜索?是的,这是索引的唯一目的:创建排序重复以避免完全扫描我了解,对于散列键,我专门询问GSITH中的排序键,它们都有相同的用途,但不同的是,散列(分区)键主要用于跨节点分配工作,对键进行排序以加快查找/扫描。从成本的角度来看是有道理的#“3是一个聪明的主意,我会考虑的。”@ConceptQuest for#3,即在产品名称和发布年份(组合)上有GSI,如果我的记录很少有空的发布年份和非空的产品名称。我认为,在仅使用product_name查询此GSI表时,无法获取具有null launch_year的记录。因为dynamo不会将此记录填充到GSI表中。请纠正我。