Amazon dynamodb DynamoDB更改范围键列

Amazon dynamodb DynamoDB更改范围键列,amazon-dynamodb,Amazon Dynamodb,是否可以在创建表后修改Rangekey列。例如,添加新列/属性,并将其指定为表的RangeKey。已尝试搜索,但无法找到任何有关更改范围或哈希键的文章。否,不幸的是,在DynamoDB中创建表后,无法更改哈希键、范围键或索引。DynamoDB很清楚,索引是不能修改的。我在文档中找不到任何地方明确指出不能修改表键的引用,但目前它们不能更改 请注意,除了哈希键和范围键之外,DynamoDB的模式较少,您可以向新项添加其他属性,而不会出现任何问题。不幸的是,如果需要修改哈希键或范围键,则必须创建一个新

是否可以在创建表后修改Rangekey列。例如,添加新列/属性,并将其指定为表的RangeKey。已尝试搜索,但无法找到任何有关更改范围或哈希键的文章。

否,不幸的是,在DynamoDB中创建表后,无法更改哈希键、范围键或索引。DynamoDB很清楚,索引是不能修改的。我在文档中找不到任何地方明确指出不能修改表键的引用,但目前它们不能更改

请注意,除了哈希键和范围键之外,DynamoDB的模式较少,您可以向新项添加其他属性,而不会出现任何问题。不幸的是,如果需要修改哈希键或范围键,则必须创建一个新表并迁移数据


编辑(2014年1月):DynamoDB现在支持更改或创建额外的排序键,您需要创建一个新表并迁移到该表,因为这两个操作都无法在现有表上执行

DynamoDB流使我们能够迁移表,而无需任何停机时间。我这样做非常有效,我遵循的步骤是:

  • 创建一个新表(我们称之为NewTable),该表具有所需的键结构LSIs和GSIs
  • 在原始表上启用DynamoDB流
  • 将Lambda与流关联,从而将记录推送到新表中。(此Lambda应在步骤5中删除迁移标志)
  • [可选]在原始表上创建GSI以加快扫描项目。确保此GSI只有属性:主键和已迁移(请参阅步骤5)
  • 扫描在上一步中创建的GSI(或整个表),并使用以下过滤器:

    FilterExpression=“属性不存在(已迁移)”

  • 使用migrate标志(即:“Migrated”:{“S”:“0”})更新表中的每个项,该标志将其发送到DynamoDB流(使用UpdateItem API,以确保不会发生数据丢失)

    注意:您可能希望在更新期间增加表上的写入容量单位

  • Lambda将拾取所有项,修剪迁移的标志并将其推入新表
  • 迁移完所有项后,将代码重新指向新表
  • 去掉原来的表,和Lambda函数一次高兴都好
  • 遵循这些步骤可以确保您没有数据丢失和停机

    我已经在我的博客上记录了这一点,并提供了代码帮助:

    因此,分区键(主)和,也不能修改排序键?@Vadorequest是的-如果需要修改,则需要创建一个新表并迁移数据。然后,我想最安全的方法是默认情况下不使用哈希键,并在需要时添加其他索引。创建表本身并强制执行所有请求时,哈希应该是什么并不总是很明显如果选择错误,则必须提供哈希值来检索项目可能是一个相当大的问题。Abhay,您提供的链接不再有效。