【发布时间】:2018-06-20 14:38:36
【问题描述】:
我正在尝试使用适用于 Java 的 AWS 开发工具包的 UpdateTable API 将几个全局二级索引添加到现有表中。我已经浏览了文档,因此我将每个 CreateGlobalSecondaryIndexAction 包装到 GlobalSecondaryIndexUpdate 中,然后将其放入 UpdateTableRequest。
我遇到的问题是这些表更新需要一段时间来处理。一旦其中一个启动,表就会进入 UPDATING 状态,并且表不能再次更新,直到其状态为 ACTIVE。文档说它们是异步请求,并且有一个 AmazonDynamoDBAsyncClient 可用于进行更新,甚至为您提供了带有 AsyncHandlers 的方法,您可以传入以响应事件。但问题是,当 UpdateTableResult 准备好时,这些 asyncHandler 会收到通知。但是,这并不意味着该表处于活动状态并准备好进行另一次更新。因此,您必须对表进行轮询以检查其状态何时恢复为 ACTIVE。
除此之外,如果您要更新二级索引,它们也会进入更新状态。因此该表可以处于 ACTIVE 状态,但如果它有一个状态为 UPDATING 的二级索引,则您也无法更新该表上的任何其他索引。因此,您最终必须轮询表状态和表上索引的状态,以确保它们都处于活动状态,然后再进行另一次更新。
是否有任何事件机制可以通知表和/或索引的状态更新以避免这种轮询?
【问题讨论】:
-
据我所知,没有推送模型来获取表的更新以进行索引更新。支持使用DynamoDB Streams 收听项目更新,但不支持表更新。
标签: amazon-dynamodb