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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/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_Amazon Web Services_Amazon S3_Aws Lambda_Amazon Dynamodb - Fatal编程技术网

Amazon web services 基于多个文件触发Lambda

Amazon web services 基于多个文件触发Lambda,amazon-web-services,amazon-s3,aws-lambda,amazon-dynamodb,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Dynamodb,我有点困惑,因为当s3中有多个特定文件可用时,我需要运行AWS粘合作业。在s3中的每个文件put事件上,我都会触发一个lambda,它将该文件元数据写入dynamodb。在dynamodb中,我还维护了一个计数器,用于计算所需文件的数量 但是当一次上传多个文件时,会触发多个lambda,它们在dynamodb中几乎同时写入,这会影响计数器;因此计数器无法准确计数 我需要一个更好的方式来开始一项工作,当特定的(多个)文件在s3中可用时 请建议一个更好的方法。默认情况下,Dynamo最终是一致的。您

我有点困惑,因为当s3中有多个特定文件可用时,我需要运行AWS粘合作业。在s3中的每个文件put事件上,我都会触发一个lambda,它将该文件元数据写入dynamodb。在dynamodb中,我还维护了一个计数器,用于计算所需文件的数量

但是当一次上传多个文件时,会触发多个lambda,它们在dynamodb中几乎同时写入,这会影响计数器;因此计数器无法准确计数

我需要一个更好的方式来开始一项工作,当特定的(多个)文件在s3中可用时

请建议一个更好的方法。

默认情况下,Dynamo最终是一致的。您需要请求一个强一致的读取,以保证您读取的数据与写入的数据相同

有关更多信息,请参阅,或有关更具体的示例,请参阅中的ConsistentRead标志

值得注意的是,这些只会将您的问题最小化。在读/写之间也会有一个很小的窗口,网络延迟会导致一个函数读/写,而另一个函数也在读/写。您应该考虑一次只允许运行一个函数,或者使用其他逻辑来保证对DB的互斥访问。

默认情况下,Dynamo最终是一致的。您需要请求一个强一致的读取,以保证您读取的数据与写入的数据相同

有关更多信息,请参阅,或有关更具体的示例,请参阅中的ConsistentRead标志


值得注意的是,这些只会将您的问题最小化。在读/写之间也会有一个很小的窗口,网络延迟会导致一个函数读/写,而另一个函数也在读/写。您应该考虑一次只允许运行一个函数,或者使用其他逻辑来保证对数据库的互斥访问。

听起来您正在获取当前计数,在Lambda函数中增加它,然后用新值更新DynamoDB。相反,您需要使用,这将确保多个并发更新不会导致您描述的问题


通过使用原子计数器,您只需向DynamoDB发送一个请求,将计数器增加1。如果Lambda需要检查这是否是在执行其他工作之前等待的最后一个文件,那么可以使用update调用的返回值来检查新计数

听起来好像您正在获取当前计数,在Lambda函数中增加它,然后用新值更新DynamoDB。相反,您需要使用,这将确保多个并发更新不会导致您描述的问题

通过使用原子计数器,您只需向DynamoDB发送一个请求,将计数器增加1。如果Lambda需要检查这是否是在执行其他工作之前等待的最后一个文件,那么可以使用update调用的返回值来检查新计数

不确定“特定”(多个)文件是什么意思

如果您需要特定的文件名(或“模式”),那么您可以在lambda函数的第一条指令中检查所有需要的文件。也就是说,您需要文件:A.txt、B.txt、C.txt,然后测试您的s3存储桶是否包含这3个特定文件(或3*.txt文件或任何适合您的要求的文件)。如果是这种情况,则继续处理,如果不是,则从函数返回
。在并发调用的情况下,这在技术上是可行的。

不确定“特定”(多个)文件是什么意思


如果您需要特定的文件名(或“模式”),那么您可以在lambda函数的第一条指令中检查所有需要的文件。也就是说,您需要文件:A.txt、B.txt、C.txt,然后测试您的s3存储桶是否包含这3个特定文件(或3*.txt文件或任何适合您的要求的文件)。如果是这种情况,则继续处理,如果不是,则从函数返回
。在并发调用的情况下,这在技术上是可行的。

对于一些文件,我需要增加计数器。此外,我不喜欢安排lambda,而是需要在文件出现在s3中时立即识别。对于一些文件,我需要增加计数器。我也不喜欢安排lambda,相反,我们需要在文件出现在s3中时立即进行识别。