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



我是AWS的新手,并且正在使用一个函数读取大量数据的无服务器应用程序。永远不会从表中读取单个项目,但是所有项目都会通过时间表函数进行常规更新。

您建议最有效地处理这种情况的方法?我当前的实现使用了DynamoDB表上的scan操作,但是由于我的经验有限,我不确定这是否会在生产中表现出来。也许将数据存储为S3上的JSON文件会更好吗?如果是这样,可以很容易地使用时间表函数更新值?

感谢您的时间。

ps:为了了解数据库的大小,将有〜1500个项目,每个项目都包含一个高达〜100个字符串

的数组

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

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

1-每月请求

2-每月存储

如果您有小物品,则拳头表壳将最多可便宜577倍,如果您从DynamoDB而不是S3

中读取项目

HOW:S3的每1,000美元要求0.01美元,而DynamoDB的读数为520万美元(每月最多4 kb)。另外,您应该为S3中的数据检索支付每GB $ 0.01,应加起来该价格。但是,您的写入S3将是免费的,而您应为每次写入DynamoDB付款(这比阅读贵4倍)。

但是,如果您的物品需要每个读取的RCU,则S3在这种情况下会更便宜。

关于存储成本,S3更便宜,但是您应该再次看到数据的大小,因为您为S3支付最高每GB $ 0.023,而您每月支付$ 0.25 $ 0.25 $贵昂贵的10倍。

结论:如果您的请求太多并且您的项目较小,则使用DynamoDB更容易,更直接,因为您没有放弃使用DynamoDB所拥有的任何查询功能,如果您使用S3,则显然不会有。否则,您可以考虑将指针保留在DynamoDB中的S3中存储的对象的位置。

(*)您在S3或DynamoDB中为标签支付的成本是您需要使用它们的另一个因素。

这是我的方式:

计划更新:

lambda(处理时间表更改) -> dynamodb-> dynamodbstream-> lambda(如果存在,请将更改应用于所有对象,并保存到S3中的单个对象)

阅读时间表:

使用Lambda读取S3的单个对象,并根据请求提供所有时间表或单个时间表。您可以在阅读下一次阅读之前检查对象是否已修改,因此您无需每次从S3阅读而仅从内存中使用。

可伸缩性:

如果要缩放,则需要将对象拆分到某些大小,以免将所有对象加载超过3GB内存大小(lambda process memory大小)

希望这会有所帮助。

edit1:

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

您也可以将这些数据传到lambda内存,并从内存进行服务,直到对象更新为止。

最新更新