Java 从s3 bucket自动获取和删除对象

Java 从s3 bucket自动获取和删除对象,java,amazon-s3,Java,Amazon S3,我正在编写一些端到端测试,这些测试重用和修改测试数据,因此需要在外部中心位置存储和修改文件。由于这个用例,并发访问将受到限制,我决定在s3上使用乐观的并发解决方案,而不是创建一个数据库,这对于少量的测试数据来说似乎有些过分 我的计划是在s3上创建一个小文件列表,每次测试需要数据时,获取一个文件,从服务器上删除它,然后在数据发生变化后写回一个新文件 为了尽量减少两个用户访问同一个文件的机会,我希望以原子方式获取并删除该文件。这可能吗?或者s3对象删除的延迟时间是否足够大,以至于它没有任何意义?删除

我正在编写一些端到端测试,这些测试重用和修改测试数据,因此需要在外部中心位置存储和修改文件。由于这个用例,并发访问将受到限制,我决定在s3上使用乐观的并发解决方案,而不是创建一个数据库,这对于少量的测试数据来说似乎有些过分

我的计划是在s3上创建一个小文件列表,每次测试需要数据时,获取一个文件,从服务器上删除它,然后在数据发生变化后写回一个新文件


为了尽量减少两个用户访问同一个文件的机会,我希望以原子方式获取并删除该文件。这可能吗?或者s3对象删除的延迟时间是否足够大,以至于它没有任何意义?

删除操作在您需要的意义上并不完全是原子操作

AmazonS3为所有区域的覆盖放置和删除提供了最终的一致性

删除对象时,不能保证后续对该对象的请求不会成功,特别是在接下来的几秒钟内。这通常是非常快的,但它仍然明显是可能的。S3的设计将优先级放在新创建的立即可用的对象上,而表示删除和覆盖的bucket索引更改可能最好描述为以较低优先级处理(尽管我认为这有点幼稚)


另外,删除一个其他人在下载过程中的对象,删除操作成功,但是无论文件大小或下载时间多长,都不会中断正在进行中的下载。如果你加上这个作为回答,我可以接受。你完全控制客户吗?如果是这样,您可以将文件移动到临时前缀(“文件夹”),读取并对其进行操作,创建新文件,然后从临时文件夹中删除上一个文件,而不是读取、删除和创建新文件。它不是原子文件,但您可以获得一个额外的好处,即仅在创建新文件后删除原始文件。请注意,S3在最终一致性模型上运行,并且可能与您选择的任何模型有一致性问题。您会考虑使用Amazon SQL Sqs而不是Amazon S3对象吗?它更符合您的用例。