推荐阅读整个表的方法(Lambda,DynamoDB / S3)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐阅读整个表的方法(Lambda,DynamoDB / S3)相关的知识,希望对你有一定的参考价值。
我是AWS的新手,正在开发一个无服务器应用程序,其中一个函数需要读取大量数据。从不会从表中读取单个项目,但所有项目将通过计划功能定期更新。
您对最有效处理此方案的方法有何建议?我当前的实现在DynamoDB表上使用scan
操作,但由于我的经验有限,我不确定这是否会在生产中具有高性能。将数据作为JSON文件存储在S3上会更好吗?如果是这样,用计划功能更新值会如此容易?
谢谢你的时间。
PS:为了了解数据库的大小,将会有~1500项,每个项目包含一个最多约100个字符串的数组
这取决于每个项目的大小,但如何?
首先使用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中的索引支付的成本是您需要使用它们时要考虑的另一个因素。
我将这样做:
安排更新:
Lambda(用于处理计划更改) - > DynamoDB - > DynamoDBStream - > Lambda(如果存在则读取,将更改应用于所有对象并保存到S3中的单个对象)
阅读时间表:
使用Lambda从S3读取单个对象,并根据请求提供所有计划或单个计划。您可以在下次读取之前检查对象是否被修改,因此您不需要每次都从S3读取并仅从内存中进行读取。
可扩展性:
如果要缩放,则需要将对象拆分为特定大小,以便不加载超过3GB内存大小的所有对象(Lambda进程内存大小)
希望这可以帮助。
EDIT1
当您冷启动服务lambda时,首先从s3加载对象,之后,您可以使用since modified date
属性检查s3以获取更新的对象(在特定时间间隔或一定数量的请求之后)。
您还可以将这些数据传输到Lambda内存并从内存中提供,直到更新对象为止。
以上是关于推荐阅读整个表的方法(Lambda,DynamoDB / S3)的主要内容,如果未能解决你的问题,请参考以下文章