amazon-dynamodb - 在收到 DynamoDB 流事件后立即查询 GSI - 它可靠吗?
问题描述
从下面的引用中,我很难理解事务到全局二级索引 (GSI)、流和备份的传播是并行发生的,还是顺序发生的。
事务完成后,该事务中所做的更改将传播到全局二级索引 (GSI)、流和备份。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html
因此我的问题是:只有在所有 GSI 都被重建(复制)之后才会引发 dynamodb 流事件,还是这样的陈述是错误的?换句话说,如果我使用相应的键查询 GSI,我可以确定我可以在某个 GSI 中找到项目的投影,在我收到它的流事件之后立即INSERT
给出一些上下文 - 我正在研究一个可以跨越多个 lambda的过程的概念,每个 lambda 只做一个事务。在开始程序之前,我确切地知道我应该期待多少事务,并且我在发电机流和原子计数器的帮助下计算它们,这样我可以确定程序何时完成(编辑请不要将我重定向到使用步骤函数,我知道它们的巨大潜力,但我的堆栈会爆炸 :))
但是,如果 AWS 的上述引用在发出 dynamo 流事件之前不能保证 GSI 复制,我有点搞砸了,因为我不能立即启动其他依赖于插入的数据但想通过 GSI 查询它的程序...
谢谢!
编辑:经过有益的讨论和更多的挖掘,我发现这篇aws文章让我有了进一步的理解,特别是该Best practices for working with DynamoDB Streams
部分
解决方案
流事件和 GSI 复制同时发生。不能保证一个会在另一个之前发生。正确配置的 GSI 不会受到来自热分区的任何背压,复制将在 10 毫秒内发生。流事件处理通常在不到 1 秒的时间内发生。使用设计良好的数据模型,GSI 复制很可能会在处理 Stream 事件之前完成,但不能保证会出现这种情况。
推荐阅读
- c# - 如何将 DDL 的选定值从 Action 传递到另一个 Action MVC/Ajax
- javascript - 如何通过 jQuery 选择使用 javascript 动态生成的 innerHTML 元素
- javascript - Javascript中输入的逗号分隔数字
- logstash - grok 过滤器从两个特定单词中提取一些消息
- sql - 为什么 <> 运算符失败并返回所有记录?
- javascript - 为什么设置 optionsValue 会中断 Knockout 更新?
- postman - 更改 Postman 数据目录的位置
- javascript - 如何解决承诺并捕获错误
- vuetify.js - 在文本字段中用 v-tooltip 包装 v-icon?
- python - 将视口更改为全分辨率