问题标签 [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.

0 投票
0 回答
822 浏览

amazon-web-services - 如何从 DynamoDB 流中获取按时间顺序排列的记录列表?

我在这里有几个相关的问题。

  1. 关于流的 DynamoDB 文档说:

一个分片可能会因其父表上的高水平写入活动而分裂,以便应用程序可以并行处理来自多个分片的记录。

我的理解是,当一个分片分成两个子分片时,DynamoDB 停止写入父分片并开始以循环方式写入两个子分片。在这种情况下,我如何确定记录的时间顺序?我是否必须在应用层中读取两个子分片并按记录序列号对记录进行排序?如果第二个孩子在某个时候分裂成两个孙子碎片怎么办?在按顺序获取记录之前,我现在是否必须同时读取子分片和孙分片?

  1. 上述文件说:

由于分片具有沿袭(父分片和子分片),因此应用程序必须始终在处理子分片之前处理父分片。

如果您查看文档中提供的Low-Level DynamoDB Streams API 示例,在// Get the shards in the stream注释下,您会注意到代码只是获取给定流的所有分片,然后迭代列表分片而不用担心父子关系。

这是否意味着如果我想按时间顺序获取记录列表,我必须从给定流中读取所有记录,然后按应用层中的记录序列号对它们进行排序?

  1. 尝试从 DynamoDB 流中获取按时间顺序排列的记录顺序是不是一个坏主意?请不要问我要解决的具体问题。我在这里进行理论分析。

更新:

当我在考虑处理过去 24 小时的流记录时,上面的问题出现了。但是为什么要首先处理过去 24 小时的流数据呢?

我认为流首先是为实时表更改处理而构建的。通过触发 Lambda 函数实时处理流记录更有意义。

我想到的过去 24 小时流记录的唯一用例是某种流记录处理故障恢复(对于很快检测到的故障)。

奖金问题:

  1. 当您想要挖掘过去 24 小时的 DynamoDB 流时,您能想到用例吗?
0 投票
1 回答
122 浏览

amazon-dynamodb - 如何通知我 DynamoDB 上的索引正在更新?

我有一个表(key=username, value=male or female)和一个关于值的索引。

将项目添加到表后,我想更新男性和女性的计数。但是写入成功后,由于索引是全局二级索引,所以计数查询并不一致。

有没有办法(dynamo db Streams,Lambda,...)来监控索引何时是最新的?

请注意,我不是在寻找涉及其他内容的解决方案(保持 redis 中的增量计数或......),我在这里描述的是一个简化的问题,特别是问一个关于如何在 dynamo 中监视索引的问题。

谢谢!

0 投票
2 回答
731 浏览

amazon-dynamodb - 重新处理所有记录 - DynamoDB Stream

我正在使用带有 Aws lambda 函数 + firehose 的 DynamoDB 流来将我的数据与 redshift 同步。我想知道是否可以将所有 DynamoDB 记录添加到流中以进行再处理。如果没有,正确的方法是什么?

0 投票
1 回答
645 浏览

amazon-dynamodb - 电子商务订单表建模 - DynamoDB + SNS + SQS

我创建了一个 DynamoDB 表来存储来自电子商务前端的订单。当用户下订单时,订单将存储在 DynamoDB 表中。该表有一个主键(order_id)和两个全局二级索引:(email,SSN)。

我也想按订单状态查询。所以我想在特定日期检索特定状态的所有订单。模拟这种行为的最佳方法是什么?

使用排序键创建另一个全局二级索引?

0 投票
1 回答
3038 浏览

java - DynamoDB:条件检查失败异常

我正在处理 ConditionalCheckFailedException,但我不确定哪个条件未通过检查。当我打开调试器并检查异常变量时,我找不到任何有用的信息。

下面是我的 Java Dynamo 客户端代码。我正在尝试在以下情况下使用 DynamoDBSaveExpression 对 DynamoDB 进行有条件的写入:

表中的客户日期早于我尝试写入的当前客户日期(存储为 EPOCH 时间)表中不存在条目(我检查 FEEDBACK_KEY,因为它是我表中的主键)当我将第一个条目写入表中,它可以工作,但是当条目存在时更新,我得到 ConditionalCheckFailedException 异常。有任何想法吗?

0 投票
1 回答
139 浏览

amazon-web-services - 客户端应如何处理添加/删除/拆分的 DynamoDB 流分片?

来自亚马逊开发指南

分片是短暂的:它们会根据需要自动创建和删除。任何分片也可以拆分成多个新分片;这也会自动发生。(请注意,父分片也可能只有一个子分片。)一个分片可能会分裂以响应其父表上的高水平写入活动,以便应用程序可以并行处理来自多个分片的记录。

在我的应用程序中,我并不关心来自哪个分片数据,我只想处理所有更改。但是,当您设置流处理器时,您必须订阅一个或一组分片。如果可以随时删除/拆分/添加分片,您如何确保获得所有更改?

客户端是否应该轮询分片列表以进行更改?

0 投票
1 回答
1365 浏览

streaming - 如何测量 DynamoDB Streams 的传播延迟?

我正在使用 DynamoDB Streams + Kinesis 客户端库 (KCL)。如何测量在流中创建事件与在 KCL 端处理事件之间的延迟?

据我所知,KCL 的MillisBehindLatest指标特定于 Kinesis Streams(不是 DynamoDB 流)。 approximateCreationDateTime记录属性具有分钟级别的近似值,这对于在亚秒级延迟系统中进行监控是不可接受的。

您能否提供一些有用的指标来监控DynamoDB Streams 延迟?

0 投票
2 回答
4351 浏览

amazon-dynamodb - DynamoDB 到 Kinesis Stream

我有一个写入 DynamoDB 表的应用程序,我试图让 Kinesis 进行聚合,然后将聚合数据写入另一个 DynamoDB 表。

在我的 DynamoDB 表上启用了流,并且我在流上有一个 lamdba 触发器,如下所示:

当我在 Lambda 测试事件中有三个或四个元素时,这会成功写入我的 Kinesis Stream。

当我启用触发器时,它根本不会写入我的 Kinesis Stream。一次似乎有大约 100 个元素进入。在 Cloudwatch 中,我看到“尝试放入 Kinesis Stream”消息,但我什至看不到成功/失败消息。

我是在做完全错误的事情还是有更好的方法来解决这个问题?

如果 DynamoDB 的流可以直接输入 Kinesis Analytics,那将是我的一等奖 :)

0 投票
0 回答
103 浏览

cassandra - 对于流式数据,我应该使用哪一个?在 AWS 中使用 DynamoDB 或 Cassandra 进行 Spark 流式传输

我们正在努力将用户点击数据存储为流数据。我一直在研究在 AWS 中执行此操作的可能方法。一种方法是使用 DynamoDB 来存储数据以及来自 AWS 的所有本机工具。另一种方法是使用 Cassandra 安装 spark 流。Datastax 提供集成包以将它们安装在 AWS 上。根据我在网上找到的参考资料。似乎使用 AWS 的本机 DynamoDB 可能会更昂贵。但这将节省维护系统的时间。有没有人以前有过这方面的经验,可以就两者的优缺点提供一些见解和建议?此外,我们希望创建一个数据库可以处理批处理数据和流式传输的系统,例如 lambda 架构。因此,流数据和批处理数据最终都将使用相同的数据库。据我所知,Cassandra 很适合这种情况。DynamoDB 也支持吗?太感谢了!

0 投票
1 回答
416 浏览

database-design - DynamoDB 流以更新喜欢和评论

我在后端使用 DynamoDB,我需要像在 SQL 中一样在单独的表中维护喜欢和评论,并在另一个表中维护每个帖子的评论和喜欢计数

共 3 张桌子

TableName - HashKey、RangeKey、属性

喜欢 - PostId、用户名、-

评论 - PostId、用户名、{text: "Jo jo"}

计数 - PostId,-,{评论:15,喜欢:15}

在喜欢表/评论表中插入行后,我需要更新计数表中的喜欢计数

现在我在我的应用程序代码中执行此操作(Java AWS SDK)

我听说过 Streams and Triggers (Lambda Functions) - 如何使用 Streams 更新计数表

我阅读了有关 Streams 的几篇文章,据我了解,当我们使用无法执行该操作的环境时,这些文章很有用

有人可以澄清一下吗?

提前致谢...