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

问题描述 投票:1回答:2

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

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

谢谢你的时间。

PS:为了了解数据库的大小,将会有~1500项,每个项目包含一个最多约100个字符串的数组

amazon-web-services amazon-s3 lambda amazon-dynamodb
2个回答
3
投票

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

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

1-每月请求

2-每月存储

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

方法:每1,000个S3请求0.01美元,而DynamoDB每个月读取520万个(每个最多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中的索引支付的成本是您需要使用它们时要考虑的另一个因素。


2
投票

我将这样做:

安排更新:

Lambda(用于处理计划更改) - > DynamoDB - > DynamoDBStream - > Lambda(如果存在则读取,将更改应用于所有对象并保存到S3中的单个对象)

阅读时间表:

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

可扩展性:

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

希望这可以帮助。

EDIT1

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

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

© www.soinside.com 2019 - 2024. All rights reserved.