[英]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.