我正在编写一些重用和改变测试数据的端到端测试,因此需要在外部的中心位置存储和修改文件。由于用例,并发访问将受到限制,我决定在s3上使用乐观并发解决方案而不是创建数据库,这对于少量测试数据来说似乎有些过分。
我的计划是在s3上创建一个小文件列表,每次测试需要数据时,获取一个文件,从服务器中删除它,然后在数据发生变化后写回新文件。
为了尽量减少两个用户访问同一个文件的可能性,我想原子地获取和删除该文件。这可能吗?或者s3对象删除的滞后时间是否足够大,无论如何都没有意义?
答案 0 :(得分:1)
删除操作在您需要的意义上并不完全是原子的。
Amazon S3提供了在所有地区覆盖PUTS和DELETES的最终一致性。
http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html#ConsistencyModel
删除对象时,无法保证对该对象的后续请求不会成功,尤其是在接下来的几秒钟内。这通常非常快,但它仍然是显而易见的。 S3的设计优先考虑新创建的对象立即可用,而表示删除和覆盖的存储桶索引更改可能最好描述(虽然有点天真,我认为)处理的优先级较低。
此外,您删除其他人正在下载的对象,删除操作成功,但正在进行的下载将永远不会中断,无论文件大小或下载时间长短。