问题标签 [amazon-dynamodb-streams]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
amazon-web-services - DynamoDB 流如何将记录分发到分片?
我的目标是确保以“正确”顺序处理 DynamoDB 流发布的记录。我的表包含客户活动。哈希键是事件 ID,范围键是时间戳。“正确”顺序意味着按顺序处理相同客户 ID 的事件。可以并行处理不同的客户 ID。
我正在通过 Lambda 函数使用流。每个分片都会自动生成消费者。因此,如果运行时决定对流进行分片,则消耗会并行发生(如果我做对了),并且我冒着在 CustomerCreated 之前处理 CustomerAddressChanged 事件的风险(例如)。
文档暗示没有办法影响分片。但他们并没有这么明确地说。有没有办法,例如,通过使用客户 ID 和时间戳的组合作为范围键?
amazon-web-services - 如何拥有两个以上触发 lambda 的 DynamoDB 流
我们有一个 dynamoDB 表,它有两个从中读取的进程(两个 lambda,作为 Lambda 触发器)。我们现在需要添加第三个,但要知道 AWS 强烈建议同时阅读器不超过两个(我假设添加第三个 lambda 触发器会使我们的阅读器数量增加到 3 个?)。我们如何添加能够利用 DynamoDB 流而不影响性能的第三个服务?
我很早的想法是用一个将流记录放在 SQS 上的 lambda 替换这两个 lambda,SNS 会提醒订阅该主题的任何 lambda,然后他们可以对流记录执行操作。
multithreading - 如何在 DynamoDB 表上执行并发写入?
我想流式传输来自不同来源的数据 - 特别是 Twitter 和 reddit,并将其存储到 DynamoDB 表中。我对此很陌生,所以我不确定它是否可行。我正在考虑使用 2 个不同的线程,一个用于 Twitter,一个用于 Reddit。两个线程都将从相应的流中获取数据并插入到 DynamoDB 表中。
这看起来可行吗?是否可以在 DynamoDB 中进行并发写入?如果不是,那么在单个 DynamoDB 表上同时存储来自不同来源的数据的替代方法是什么?
amazon-web-services - 如何在 dynamodb 流 KCL 适配器中为每 N 分钟触发一次的 lambda 设置检查点
我想通过调度 CloudWatch 事件每 N 分钟触发一次 lambda,从而使用 DynamoDB Streams Kinesis Adapter 在最后 N 分钟内访问 DynamoDB Streams。下次触发 lambda 时如何跟踪最后处理的记录,以便我可以从最后处理的记录继续。
我从https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.KCLAdapter.Walkthrough.CompleteProgram.html 看到我可以使用检查点来跟踪最后处理的记录,但我怀疑这是哪里存储?如何在 N 分钟后将此检查点用于下一个 lambda 触发器?
amazon-dynamodb - 如何实现幂等lambda函数?
我有这样的管道 -
表 1(发电机 db) - > aws lambda - > 表 2(发电机 db)
因此,只要表 1 中有任何更新 hapeens,就会触发 lambda。所以 lambda 基本上是从表 1 中批量读取(1000 条记录),然后执行批量计算以得出表 2 中需要更新的记录列表。表 2 基本上维护了表 1 中发生的某些事件的计数。
所以问题是如果我们两次发送同一批记录,那么它会将表 2 中的计数增加两次。
为什么我认为这是在一个 lambda 函数中断期间(运行的 lambda 数量与 dynamo db 中的分区数量成 1:1 关系),而它已经执行了一些写入操作,它将重新发送最后一批读。
为了避免这种情况,一种方法可以是存储我们已经计算过的记录的序列号并将其存储在表 2 中。所以当我们更新时,我们可以检查它是否已经计算过。但是我们需要保持该列表的大小,否则我们将遇到性能问题。但它应该是多大的尺寸是个问题。
处理此类问题的写入方法应该是什么?
performance - 如何在 Dynamo db 中以 DynamoDBAutoGeneratedKey 作为 Hash Key 对我的表进行性能调整,因为 PutRequest 每次插入都会变慢
我正在使用 dynamo db 表来保存我的 API 请求的事务数据。我正在维护两个表 1. 计划 - 将 SId 作为哈希键 2. 摘要 - 将 DynamoDBAutoGeneratedKey (UUID) 作为哈希键,将 SId 作为属性。
调度表为每个请求填充一行,而汇总表为每个 SId 和唯一 UUID 填充 10 个项目
我们正在对这两个表进行负载测试,观察到调度表运行良好,但汇总表在 PutRequests 中为每次调用的 10 个项目消耗了大量时间。
有人可以对我的摘要 dynamodb 表的性能调整提出建议吗?可以将 UUID 保留为 hashkey,减慢 PutItemRequest 的速度吗?
非常感谢任何帮助指针。
此外,我们已经激活了这些表上的流,这些流被 lambda 用于交叉复制。
amazon-dynamodb - DynamoDB 流上的“KinesisClientLibIOException:分片未关闭”
我有一个 DynamoDB 表,我在其中添加了一个 Stream。我创建了一个 Lambda 来处理此流并测试吞吐量、延迟等。完成测试后,我删除了 lambda 的触发器。
然后我继续使用PythonMultiLangDaemon
客户端测试同一张表,进行比较并查看它是否可以拾取 lambda 离开的位置。
守护进程开始处理分片并崩溃,但以下情况除外。搜索它,我只找到了这个答案,它不适用。我尝试删除用于跟踪工作人员的 DynamoDB 表并让 MultiLangDaemon 重新创建它。同样的事情发生了。
为什么会发生这种情况,如何在不丢失流中数据的情况下恢复?
amazon-web-services - AWS DynamoDB UnknownOperationException
我已经尝试设置一个非常简单的表格,就像在这个例子中一样,但它不起作用。当我在 API Gateway 的 AWS 控制台中对其进行测试时,我总是得到以下响应:
转换前的端点响应正文:{"__type":"com.amazon.coral.service#UnknownOperationException"}
我的映射表如下所示:
我的 Requestbody 看起来像这样。
我究竟做错了什么?
感谢您的帮助。周末愉快。
娜塔莉
lambda - 如何使用 DynamoDB Stream 和 lambda 函数同步多个表
我有一个非常常见的用例,需要同步 2 个 dynamoDB 表。逻辑流程如下。
- 在 Job Table 中创建一个 Job
- 在请求表中创建了多个请求。所有的请求都是从一个 Job 创建的,就像多对一的关系一样。
- 请求由其他一些工作人员处理。
- 每个请求将在请求表中标记为独立完成。
- 当某个作业的所有请求都完成后,在作业表中标记一个作业已完成。
现在,我的想法是在 Requests 表上启用流。当一个请求完成时,它会触发一个 lambda 函数来检查是否所有的请求都完成了。
我已经阅读了很多文件。并发现这种方法的许多局限性:
- 似乎 stream+lambda 将保证每个流分片将至少触发一次 lambda 函数,但不仅仅是一次。因此 lambda 函数必须是幂等的。(让 lambda 函数增加完成请求的数量在这里不起作用)。
所以,我认为每次触发 lambda 函数时我都必须扫描请求表。这种方法会有很多开销吗?
- DynamoDB 流倾向于将每个事件分派到不同的分片中。每个分片被填满时都会触发一个 lambda 函数。我不确定如果一个分片很长一段时间都被填满了一半(表中没有事件)怎么办。它还会以某种方式触发 lambda 函数吗?
我也对所有其他可以解决这个问题的解决方案持开放态度。我不确定我是否遵循这里的最佳实践。
amazon-dynamodb - 为 AWS DynamoDB 表设置验证规则
实际上,我想对 AWS DynamoDB 表项目实施验证,如果项目字段的规则中断,这应该会阻止记录插入/更新。
可能吗?
或者我们可以为 dynamoDB 表创建一个触发器 lambda,该触发器在插入/更新之前触发。这样我们就可以检查验证规则并进行处理。