Amazon web services 读取整个表格的推荐方式(Lambda、DynamoDB/S3)
我是AWS新手,正在开发一个无服务器应用程序,其中一个函数需要读取大量数据。永远不会从表中读取单个项目,但所有项目都将通过计划功能例行更新 对于处理这种情况的最有效方法,您的建议是什么?我当前的实现在DynamoDB表上使用了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
扫描
操作,但由于经验有限,我不确定这是否会在生产中执行。将数据作为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。所以,你还是应该检查你的物品的大小和请求的数量。谢谢你的澄清,我会继续做一些研究。干杯