[英]Why is ListBlobsSegmentedAsync only returning results on second page?
我试图抓住一页最多5000个blob,没有前缀。 有问题的容器中大约有26,000个斑点。 我在第一页上一直没有得到任何结果,但我注意到返回的BlobContinuationToken
不是null,所以我可以再次翻页并在第二页上获得结果。 为什么第一页上没有任何结果,但第二页有什么结果?
我希望能够做到这一点,并只抓一页:
var response = await container.ListBlobsSegmentedAsync(null).ConfigureAwait(false);
但是这没有返回结果,所以相反,我必须再次调用它,传递continuationToken,此时我得到结果。
true
for useFlatBlobListing
并且它没有改变任何东西,但我真的不明白这个选项(据我所知,我的容器的内容是扁平的) ListBlobsSegmentedAsync
,从未注意到这个问题(但容器更大) new BlobContinuationToken()
。 我不确定一个人是否更可取 在较大的容器上,经过一段时间后,它开始采取两次以上的页面提取以获得结果。 每个页面提取(包括空页面)大约需要5秒钟,直到它最终返回结果。 我看到它在峰值时最多需要12页提取,总计超过60秒才能在一个容量超过300,000的容器上返回结果。 这是在对容器进行大量删除之后不久。
您可以偶尔获得空页或具有小于最大结果的页面以及延续令牌,这一点都不出意外。 如果返回的延续令牌将您带到下一页,为什么会出现问题? 如果您不想处理延续令牌,ListBlobs(不是分段版本)将提供一个迭代器,它将懒洋洋地获得更多blob并为您遵循延续令牌。
至于根本原因,可能会发生很多原因。 我的猜测实际上是你的情况经常删除,但这是一个猜测。 返回少于最大结果的数量并且由于多种原因而继续发生,但我怀疑这里有一对:1。我们达到服务器端超时,所以我们返回到目前为止的内容2.命中分区的边缘当blob列表很大并且可能跨越多台机器时,会更频繁地发生。 如果你经常删除blob并且有很多东西可能需要一些时间来实际垃圾收集,所以我们将花费所有时间来扫描我们不返回的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.