Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 读取整个表格的推荐方式(Lambda、DynamoDB/S3)_Amazon Web Services_Amazon S3_Lambda_Amazon Dynamodb - Fatal编程技术网

Amazon web services 读取整个表格的推荐方式(Lambda、DynamoDB/S3)

Amazon web services 读取整个表格的推荐方式(Lambda、DynamoDB/S3),amazon-web-services,amazon-s3,lambda,amazon-dynamodb,Amazon Web Services,Amazon S3,Lambda,Amazon Dynamodb,我是AWS新手,正在开发一个无服务器应用程序,其中一个函数需要读取大量数据。永远不会从表中读取单个项目,但所有项目都将通过计划功能例行更新 对于处理这种情况的最有效方法,您的建议是什么?我当前的实现在DynamoDB表上使用了扫描操作,但由于经验有限,我不确定这是否会在生产中执行。将数据作为JSON文件存储在S3上是否更好?如果是这样的话,用调度函数更新这些值会这么容易吗 谢谢你抽出时间 PS:为了了解数据库的大小,将有约1500个项目,每个项目包含多达100个字符串的数组 时间表更新: Lam

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

对于处理这种情况的最有效方法,您的建议是什么?我当前的实现在DynamoDB表上使用了
扫描
操作,但由于经验有限,我不确定这是否会在生产中执行。将数据作为JSON文件存储在S3上是否更好?如果是这样的话,用调度函数更新这些值会这么容易吗

谢谢你抽出时间


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

时间表更新:

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

阅读时间表:

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

可扩展性:

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

希望这有帮助

EDIT1:

当您冷启动服务lambda时,首先从s3加载对象,然后,您可以使用
自修改日期
属性检查s3是否有更新的对象(在特定时间间隔或特定数量的请求之后)


您还可以将这些数据存储到Lambda内存中,并从内存中提供服务,直到对象更新。

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

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

1-每月申请

2-每月存储量

如果您有小项目的第一个案例将是高达577倍便宜,如果你从DynamoDB而不是S3阅读项目

如何:S3的请求数为每1000次0.01美元,而DynamoDB的每月读取数为520万次(每次最多4KB)。另外,在S3中进行数据检索时,每GB应支付0.01美元,这一价格应加在一起。然而,您对S3的写入将是免费的,而您应该为每次写入DynamoDB付费(这几乎是读取的4倍)

但是,如果您的项目每次读取需要如此多的RCU,那么在这种情况下S3可能会更便宜

关于存储成本,S3更便宜,但您应该再次看到您的数据大小有多大,因为您为S3支付的最高费用为每GB 0.023美元,而您每月支付的费用为每GB 0.25美元,几乎是成本的10倍

结论: 如果您有这么多的请求,并且您的项目更小,那么使用DynamoDB就更容易,甚至更直接,因为您不会放弃使用DynamoDB时所拥有的任何查询功能,如果您使用S3,显然您不会放弃这些功能。否则,您可以考虑在SoDoDB中保持指向S3中存储的对象位置。


(*)如果您需要使用S3中的标签或DynamoDB中的索引,您为它们支付的费用是另一个需要考虑的因素。

啊,以这种方式维护两者是一个好主意!谢谢关于记忆服务,有没有一种特殊的方法来确保这一点?我想我每次都必须从S3中获取
,lambda有一种缓存系统吗?谢谢你的澄清!从内存提供服务将是理想的,因为源数据将可靠地每天只需要更新一次。但是,我找不到任何说明Lambda内存工作原理的文档。如果我使用S3.getObject(),它会自动将数据存储在内存中吗?如果没有,我们将非常感谢您在理解Lambda内存工作原理方面的帮助。您需要阅读S3文档和Lambda文档,了解如何推进这项工作。任何时候遇到障碍,都可以在stackoverflow中自由提问。一定要先尝试一下。公平地说,我会这么做的——再次感谢你们的支持!嗨@mok,谢谢你的回复!数据总量不会很大。。最多几MB。将有很多对数据库的请求-您知道
扫描
(获取整个表)在成本方面是否等于
获取
单个项目吗?因为
扫描
是单个请求?如果是这样的话,我可能会坚持使用DynamoDB,以便像您提到的那样易于使用。再次感谢。我做了更多的研究,发现一次
扫描
最多可以对每MB数据执行128次读取操作。考虑到这一点,考虑到如果流量突然激增,每个用户查询1-2mb数据,我认为这可能代价高昂。因此,我倾向于将数据存储为json。如果你认为我误解了定价方案,请告诉我。thanks@sherlock每个扫描分别处理每个项目,因此一次扫描可能(也可能会)消耗多个RCU。所以,你还是应该检查你的物品的大小和请求的数量。谢谢你的澄清,我会继续做一些研究。干杯