推荐阅读整个表的方法(Lambda,DynamoDB / S3)

时间:2017-12-17 22:18:34

标签: amazon-web-services amazon-s3 lambda amazon-dynamodb

我是AWS新手,正在开发一个无服务器应用程序,其中一个函数需要读取大量数据。永远不会从表中读取单个项目,但所有项目将通过计划功能定期更新。

对于处理此方案的最有效方法,您有何建议?我当前的实现在DynamoDB表上使用scan操作,但由于我的经验有限,我不确定这是否会在生产中具有高效性。将数据作为JSON文件存储在S3上会更好吗?如果是这样,用计划功能更新值会如此容易吗?

感谢您的时间。

PS:要想知道数据库的大小,会有~1500个项目,每个项目包含一个最多约100个字符串的数组

2 个答案:

答案 0 :(得分:3)

这取决于每个项目的大小,但是如何?

首先使用DynamoDB或S3,您需要为两项服务付费(在您的情况下为*):

1-每月请求

2-每月存储

如果您有小件物品,如果您从DynamoDB而不是S3读取物品,那么第一种情况将便宜多达577倍

如何:每1,000个S3请求0.01美元,而DynamoDB每月500万次读取(每个最多4 KB)。此外,对于S3中的数据检索,您应该为每GB支付0.01美元,这应该加到该价格。但是,您对S3的写入将是免费的,而您应该为每次写入DynamoDB付费(这几乎是阅读费用的4倍)。

但是,如果你的物品每次读取需要这么多的RCU,那么在这种情况下S3会更便宜。

关于存储成本,S3更便宜,但你应该再看看你的数据大小有多大,因为你为S3支付每GB最高0.023美元,而你每月每GB支付0.25美元,这几乎要贵10倍。

<强>结论: 如果您有这么多请求并且您的项目更小,则使用DynamoDB更容易,更直接,因为您没有放弃使用DynamoDB的任何查询功能,如果您使用S3,您将无法获得这些功能。否则,您可以考虑在DynamoDB中保存指向存储在S3中的对象位置的指针。

(*)您为S3中的标签或DynamoDB中的索引支付的成本是需要考虑的另一个因素。

答案 1 :(得分:2)

我将如何做:

安排更新:

Lambda(处理日程变更) - &gt; DynamoDB - &gt; DynamoDBStream - &gt; Lambda(如果存在则读取,将更改应用于所有对象并保存到S3中的单个对象)

阅读时间表:

使用Lambda从S3读取单个对象并根据请求提供所有计划或单个计划。您可以在下次阅读之前检查对象是否被修改,因此您不需要每次都从S3读取并仅从内存中进行阅读。

<强>可扩展性:

如果要缩放,则需要将对象拆分为特定大小,这样就不会加载超过3GB内存大小的所有对象(Lambda进程内存大小)

希望这有帮助。

<强> EDIT1:

当您冷启动服务lambda时,首先从s3加载对象,之后,您可以检查s3以查找具有since modified date属性的更新对象(在特定时间间隔或一定数量的请求之后)。 / p>

您还可以将这些数据发送到Lambda内存并从内存中提供,直到更新对象为止。