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

DynamoDB:是否将updatedate作为GSI上的排序键?

穆智刚
2023-03-14

正如这个问题中所述,我假设您不能把更新日期之类的东西作为表的排序键,因为如果您更新,您将创建一个重复的记录。

此外,我总是假设同样的事情也适用于使用更新日期的GSI。但在我的场景中,我将更新日期作为GSI上的排序键,并且在更新原始项时不会创建新记录。

综上所述,属性和关键模式包括:

属性:

  • Id
  • MySortKey
  • MyComputerdField
  • 更新日期

表格:

  • 分区键:Id
  • 排序键:MySortKey

GSI:

  • 分区键:MyComputerdField
  • 排序键:更新日期

我的问题是,我这样做是否会间接影响指数的表现?或者有没有其他我不知道的由这种模式引起的问题?

共有1个答案

储峻
2023-03-14

全局辅助索引是单独的表,主表中更改的项目会复制到其中。

正如您正确观察到的,您可以在GSI中使用更改属性作为排序键,而不会在写入基表后导致重复。请注意,GSI中不能保证唯一性,即您可以拥有多个具有相同键属性的项目。除此之外,您只能从GSI中进行最终一致的读取。

GSI也有自己的读写容量单元,您需要对其进行配置,如果更改基表中需要复制的项,则操作将消耗GSI上的写容量单元。读数与此不同。GSI上的RCU不受表写入的影响。但如果您经常更改项目,您可能会在很短的时间内看到一些不一致的情况(这就是为什么只有最终一致的读取才可能)。

这意味着如果你能忍受我提到的副作用,你可以使用这些模式。

 类似资料:
  • 假设我在DynamoDB中有一个表,如果我的GSI的键基于一个属性,但是我删除或更改了该属性,那么GSI表的行为是什么?它会删除并更改GSI表中的键吗? TableName:哺乳动物表格分区键:哺乳动物名称属性1:哺乳动物数量腿属性1:哺乳动物大小 GSI名称哺乳类动物数legssi分区键:哺乳类动物数legs排序键:哺乳类大小 现在假设我有类似于哺乳动物表的数据: 哺乳动物名称:人,哺乳动物腿数

  • 我一直在阅读关于使用GSI的最佳方式的问题,这一个DynamoDB:在查询中使用全球二级索引接近我所需要的,但我仍然有几个问题。 我需要进行以下三类查询: 根据我的理解,创建一个基于product_name的GSI将服务于所有三个目的。我想了解的是,在排序键中再添加2个带有launch_year和manufacture的GSI会加快查询2和3的速度吗?sort key的唯一目的是返回已排序的数据,

  • > 如果对dynamodb表执行“get_item”操作,则必须提供分区(主)键。

  • 我有一个包含几千条记录的DynamoDB表。根据我的业务需要,我想在其中一个字段上创建一个GSI(全局辅助索引)。我不确定我现有的记录是否会被索引。它是索引存量数据还是只索引新传入的数据。

  • 我有一个大的(2B+记录)DynamoDB表。我希望通过在创建或更新项时添加一个新字段'index_due_at'来实现分布式锁定过程。在create/update之后,我将对该项做一些进一步的处理,然后删除'index_due_at'字段。 我想创建一个清扫作业,它将周期性地提取具有未完成的'index_due_at'字段的任何记录(假设上面的过程失败了),以便对这些记录进行进一步的处理。我预计

  • 我从AWS文档中引用以下内容 具有相同分区键值的项按排序键排序的顺序存储。如果排序键数据类型为Number,则结果按数字顺序存储。对于String类型,结果按ASCII字符代码值的顺序存储。对于Binary类型,DynamoDB将二进制数据的每个字节视为无符号。 假设一个表有一个全局二级索引(没有相关的范围键),相同GSI值的数据将以什么顺序存储? 我这样问是因为我在GSI上使用lastEvalu