java - 从 s3 存储桶中原子获取和删除对象

标签 java amazon-s3

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

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

为了最大限度地减少两个用户访问同一文件的机会,我想以原子方式获取和删除该文件。这可能吗?或者 s3 对象删除的延迟时间是否足够大以至于没有意义?

最佳答案

删除操作并不完全是您所需要的原子操作。

Amazon S3 offers eventual consistency for overwrite PUTS and DELETES in all regions.

http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel

删除对象后,无法保证对该对象的后续请求不会成功,特别是在接下来的几秒钟内。这通常非常快,但显然仍然是可能的。 S3 的设计优先考虑新创建的对象立即可用,而代表删除和覆盖的存储桶索引更改可能最好描述为以较低优先级处理(尽管我认为有些天真)。

此外,您删除了其他人正在下载的对象,删除操作成功,但下载过程永远不会中断,无论文件大小或下载需要多长时间。

关于java - 从 s3 存储桶中原子获取和删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43644277/

相关文章:

java - 打印 aLine 并删除第一个 'c' 'C' 'd' 或 'D'

java - 除了继承,在实时 Web 开发中其他 OO 特性有什么主要作用吗?

java - 使用 Jackson 将 xml 映射到 java 时出错 : com. fastxml.jackson.databind.exc.MismatchedInputException

python - boto3 S3 : get_object error handling

python - Django-s3direct上传图片

reactjs - 尝试上传到 s3 时出现 "params.Body is required"错误

java - 在没有 ODBC 的情况下从 Java 操作 Access 数据库

java - 在spring mvc中重定向后从 Controller 传递参数的方法是什么?

amazon-web-services - 无服务器(或精简服务器)注入(inject)来自 Axis IP 网络摄像头的定期图像上传

python - 尝试使用/Lambda 在 S3 上拆分大型 TSV 文件