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

DynamoDB-集合项上的全局辅助索引

束阳旭
2023-03-14

我有一个具有以下属性的dynamo表:

  • ID(数字-主键)
  • 标题(字符串)
  • created_at(数字长)
  • 标记(StringSet-包含一组标记,例如android、ios等,)

我想要能够通过标签查询-让我所有的项目标签Android。我怎么能在Dynamodb里做到这一点呢?似乎只能在ScalarDataTypes(即Number和String)上构建全局辅助索引,而不能在集合内的项上构建全局辅助索引。

如果我采用的方法是错误的,创建不同的表或更改属性也可以。

共有1个答案

宋伯寅
2023-03-14
  • Dynamodb的设计不是为了优化设定值的索引。下面是Amazon相关文档的副本(来自DynamoDB中使用二级索引改进数据访问)。

索引的键架构。索引键架构中的每个属性都必须是String、Number或Binary类型的顶级属性。不允许嵌套属性和多值集。键模式的其他要求取决于索引的类型:对于全局辅助索引,哈希属性可以是任何标量表属性。范围属性是可选的,它也可以是任何标量表属性。对于本地辅助索引,哈希属性必须与表的哈希属性相同,范围属性必须是非键表属性。

  • Amazon建议为这类问题创建一个单独的一对多表。此处提供更多信息:使用一对多表
 类似资料:
  • 我们可以仅用全局辅助索引更新dynamodb项吗? 在上面的代码中,我想要替换键节,并使用一个全局辅助索引更新项,即user_id。

  • 我有一个现有的表,它有两个字段-主键和全局辅助索引: 既然attributeA作为全局辅助索引,我可以通过为全局辅助索引指定一个值来删除所有项吗?例如,我想删除所有属性为id1的记录-这在Dynamo中是可能的吗? Dynamo提供了关于删除索引本身的文档,但没有特别说明是否可以使用GSI删除多个项

  • 我在DynamoDB中有一个表,它有列(1.id、2.item、3.entry time),其中id是主键。我需要在过去24小时内输入到表中的一种类型(有两种类型的项目,让它是A和B,我需要A的计数)的所有项目的计数。有什么办法可以使用二级索引做到这一点吗?我找不到太多与此相关的信息。

  • 我刚刚开始使用DynamoDB并设置了一个“accounts”表。 我已经设置了一个辅助索引,以便可以查询api用户和用户键。这两个值都不是主键,因为它们都是易变的,并且可以更改。 该表是用 索引为 我现在试图通过查询索引来获取uses帐户。 我在努力 但是我得到了一个错误,这使我认为我不能对索引执行“get”?或者我没有正确地引用索引。谁能帮我澄清一下吗? 名称和API键是唯一的,所以我想尽可能

  • 我仍然对本地二级索引的使用感到困惑。当需要LSI与GSI时,请给我具体的用例。 例如,“GenreAlbumTitle”索引应该是GSI还是LSI?https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.Prim

  • DynamoDB怎么可能创建一个包含分区键(和排序键)的全局辅助索引,而不是表中的所有项都共享该索引呢?我无法将一个项放入一个没有正确主键结构的表中,因此,使用一个属性作为分区键来创建一个GSI对我来说是没有意义的,而不是表中的所有项都有。 假设我有一张有10件物品的桌子。5项为用户。2项是我销售的产品。剩余的3个项目是已创建的订单。 我们还可以说,尝试接近这种NoSQL风格是全身心的和半理解的,