为什么DynamoDB不支持索引/表重命名?

时间:2019-02-16 08:03:30

标签: amazon-dynamodb

据我所知,在DynamoDB上无法重命名现有表或索引。有什么原因吗?我不明白为什么这不是一个简单的任务。

(或者,如果可以重命名,请告诉我!)

4 个答案:

答案 0 :(得分:1)

一周前我遇到了这个问题,只有一种方法可以实现。当前,您必须使用新名称创建一个新表,并删除/删除旧表。

我过去一周来第一次在DynamoDB中工作,意识到DynamoDB中缺少许多功能,例如AWS控制台也不支持从csv文件导入数据。

答案 1 :(得分:1)

最好和最简单的方法是创建一个新表并删除现有表。 同样,在创建备份时,它可以使用新名称,而在还原时,它将使用新名称。 dynamodb背后的主要问题是成本,这就是为什么缺少一些通常的RDMS系统所没有的功能的原因。

答案 2 :(得分:0)

您可以在创建备份时更改名称。还原备份时,该表将具有您填写的名称。

答案 3 :(得分:0)

由于没有AWS的官方解释,因此无法给出客观的答案,原因是不可能的。原因是因为这就是他们的设计方式,而且没有人能说出任何权威。

但是,基于在分布式系统中很少有任务“简单”的事实,我们可以得出一些合理的结论。

更改表或索引的名称是一项操作,该操作要么需要即时执行,要么需要在操作发生时冻结并锁定整个表。重命名发生时,无法进行任何操作,因为它们可能无效-太早引用新名称,或太晚引用旧名称。并且整个应用程序需要同时更新。

关系数据库具有更轻松的时间来允许重命名,因为它们在单个位置中只是一件事-索引位于主服务器上的表上,并且服务器可以锁定表元数据(在查询完成时等待锁定) ,然后在进行更改时阻止进一步的查询,然后释放锁)。

您的DynamoDB表没有主服务器。您的表跨多个服务器的多个分区透明地分片,并且每个分区在该区域的其他可用区域中都有多个副本/同级。这是一个高度分布式的系统。在所有这些层上协调操作是一个复杂的任务-并非不可能,甚至可能不切实际,但是需要额外的复杂层来完成一些几乎不需要的事情……成本高,回报低。

在许多情况下,如果表或索引具有某种状态(类似于初始索引创建期间的Backfilling状态)会阻止它们的使用,而必要的后台任务执行重命名,则这将被认为是不可接受的。可能的例外是小型表和未在生产中使用的表...这些情况是此类功能的最低价值方案。