azure blob 在被新版本覆盖时是否可供下载?
从我使用 Cloud Storage Studio 的测试来看,在覆盖完成之前下载会被阻止,但是我的测试来自同一台机器,所以我不能确定这是正确的。
如果在覆盖期间它不可用,那么我认为解决方案(以保持可用性)是使用不同的 blob 名称上传,然后在完成后重命名。有没有人有比这更好的解决方案?
azure blob 在被新版本覆盖时是否可供下载?
从我使用 Cloud Storage Studio 的测试来看,在覆盖完成之前下载会被阻止,但是我的测试来自同一台机器,所以我不能确定这是正确的。
如果在覆盖期间它不可用,那么我认为解决方案(以保持可用性)是使用不同的 blob 名称上传,然后在完成后重命名。有没有人有比这更好的解决方案?
该 blob 在覆盖期间可用。但是,您看到的内容取决于您使用的是块 blob 还是页 blob。对于块 blob,您将下载旧版本,直到最终块提交。最后的 PutBlockList 操作将以原子方式将 blob 更新到新版本。但是,对于非常大的 blob,我实际上不确定您正在下载 PutBlockList 以原子方式更新 blob 时会发生什么。选择是:a.) 请求继续使用旧 blob,b.) 连接断开,或 c:) 您开始下载新 blob 的字节。测试多么有趣!
如果您使用的是页面 blob(无租约),您将读取不一致的数据,因为页面范围在您下方更新。每个页面范围更新都是原子的,但它看起来很奇怪,除非您租用 blob 并将其他读者拒之门外(读者可以对租用的 blob 进行快照并读取状态)。
我可能会尝试在读取场景中间测试块 blob 更新,看看会发生什么。但是,应该回答您的核心问题:blob 可用。