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

在收到DynamoDB streams事件后立即查询GSI——可靠吗?

方浩旷
2023-03-14

从下面的引文中,我很难理解事务到全局二级索引(GSI)、流和备份的传播是并行的,还是顺序的。

事务完成后,在该事务中所做的更改将传播到全局辅助索引(GSI)、流和备份。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html

因此我的问题是:只有在重建(复制)所有GSI之后才会引发dynamodb流事件,还是这样的声明是错误的?换句话说,如果我用相应的键查询GSI,在收到其INSERTstream事件后,我能确保我能在某些GSI中找到项目的投影吗

为了提供一些背景信息,我正在研究一个可以跨越多个lambda的过程的概念,每个lambda只做一个事务。在开始这个过程之前,我确切地知道我应该期望多少事务,并且我在dynamo streams和原子计数器的帮助下对它们进行计数,这样我可以确定一个过程何时完成(编辑请不要重定向我使用step函数,我知道它们的巨大潜力,但我的堆栈将爆炸:)

然而,如果AWS的上述引用不能保证在发布dynamo stream事件之前进行GSI复制,我就有点搞砸了,因为我无法立即启动依赖插入数据的其他程序,而是希望通过GSI查询数据。。。

谢谢!

编辑:经过有益的讨论和进一步的挖掘,我发现这篇aws文章为我提供了进一步的理解,尤其是使用DynamoDB Streams的最佳实践部分


共有2个答案

荆钱明
2023-03-14

是的,有可能。GSI和流是并行写入的,但也是异步写入的。时间会有所不同,但两者通常都在几十到几百毫秒之间。作为设计目标,传播应在1s内发生,但存在异常值。

司空玮
2023-03-14

流事件和GSI复制同时发生。不能保证一个会在另一个之前发生。如果配置正确的GSI没有受到热分区的任何反压力,复制将在不到10毫秒内发生。流事件处理通常在不到1秒内发生。如果设计良好的数据模型,GSI复制很可能会在流事件处理之前完成,但不能保证情况会如此。

 类似资料:
  • 在我的DynamoDB表中,有HashKey=ID和GSI=Type。我需要获取特定类型(GSI)的所有hashKeys(ID)。 在这种情况下,获取给定类型的所有ID的有效方法是什么?我的DynamoDB表不会很大。

  • 查询事件 数据库的CURD操作支持事件,包括: 事件 描述 before_select select查询前回调 before_find find查询前回调 after_insert insert操作成功后回调 after_update update操作成功后回调 after_delete delete操作成功后回调 查询事件仅支持find、select、insert、update和delete方法

  • 我有以下问题: 我正在使用Spring MVC 4.0.5和Hibernate 4.3.5,我正在尝试创建一个Restfull Web应用程序。问题是,我想排除某些字段,使其无法序列化为 JSON,具体取决于使用方面在控制器中调用的方法。 我现在的问题是Hibrate不会在事务从方法返回后立即提交事务,而只是在序列化之前提交。 Controller.java Service.java 方面的建议执

  • 当我在GSI上查询时,我对Amazon DynamoDBv2的Amazon DynamoDBAsync.query异步请求的实现返回代码400“查询条件错过了关键模式元素......”。 我尝试使用DynamoDBAttribute名称(“myAttr”)和GSI的实际索引名称(“idx\u global\u myAttr”),并收到相同的错误代码。这与Docker的图片“amazon/dynam

  • 我有一个名为“弗兰克”的DynamoDB表,只有一个GSI。分区键称为PK,排序键称为SK,GSI分区键称为GSI1_PKGSI排序键称为GSI1_SK。我有一个存储实际数据的“数据”映射。 GSI分区键和排序键直接映射到表中具有相同名称的属性。 我可以运行partiql查询来获取图像中显示的结果。以下是PartIQ代码: 注意分区代码是如何多次引用“GSI1_SK”的。分区查询有效,并返回图像中

  • 我有一个带有哈希键(id)的表(配置文件),我有一个关于名称的GSI,一个关于国家的范围键。我想创建一个DAO方法,它将获取所有具有给定值的name和country的记录,如下所示:List getProfileWithNameAndCountry(name,country);