从Kinesis Stream / Firehose填充dynamodb表

时间:2019-07-05 10:31:16

标签: amazon-web-services amazon-dynamodb amazon-kinesis

问题

使用来自运动学数据源(流或流水线)的数据填充dynamodb表的推荐方法是什么?

当前工作流程

  • 数据被吸收到运动型软管中
  • lambda会在写入运动运动软管的每条记录上触发并将数据发送到dynamodb

为什么

我想就此寻求一些建议,因为

  • 我不确定这种方法是否会产生不必要的工作。即我需要为lambda编写和维护代码
  • 我看到可以将redshift或s3之类的东西配置为kinesis数据源的使用者。为什么我不能用dynamodb做同样的事情?是否有一个原因?其他人没有使用这种工作流程吗?

1 个答案:

答案 0 :(得分:0)

我的观点是,您的工作流程目前或多或少是正确的方式。我唯一要更改的是,我将使用Kinesis Streams代替Firehose。然后,您可以将流配置为Lambda事件源,并且可以配置批处理大小。这将大大降低您的Lambda成本,因为每个批次将有一个Lambda执行(例如,500条记录的大小),而不是每条记录执行一次Lambda。有关详细信息,请参见AWS文档(https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html

我不确定将DynamoDB作为目标不提供服务的真正原因。我的猜测是; Kinesis不知道您内容的结构。 Kinesis的当前目的地或者具有某种机制来构造需要的传入数据,或者根本不关心对象结构(S3)。另一方面,DynamoDB需要用户做出一些决定。这些架构决策对于每个表(性能,成本,分区,访问模式等)都非常重要。哪个字段将是您的分区键,您将使用排序键吗?您会格式化任何字段吗?您如何确保主键值是唯一的?每个字段的类型是什么(字符串,十进制等)?我认为,由于Lambda具有灵活性,因此是最适合这些决策的机制。

有一些自动机制可以从数据本身推断模式(例如AWS Glue使用的方法),但是在DynamoDB情况下,这并不简单。