Как найти количество объектов в контейнере BLOB-объектов Azure - Уровень архива - PullRequest
0 голосов
/ 29 января 2020

Мы пытаемся повторно гидрировать некоторые сжатые файлы резервных копий с Azure Уровень архивирования на уровень Прохладный. Нас не беспокоит цена самого размера данных (10 ТБ). Что нас беспокоит, так это потенциальная плата ввода-вывода за перемещение уровней отдельных файлов. Процесс резервного копирования сохраняет каждое задание в «чанках» (то есть в папках), которые содержат дерево файлов отдельных сжатых блоков, различающихся по размеру. Мы можем не знать, может ли быть 100 тысяч или 100 миллиардов этих отдельных блоков на целых 10 ТБ.

Существуют ли какие-либо сценарии / команды PowerShell, которые могли бы подсчитывать количество отдельных объектов во всем контейнере больших двоичных объектов объемом 10 ТБ? Если бы мы могли определить количество объектов, то могли бы рассчитать стоимость ввода-вывода. Мы имеем доступ к командной строке и знаем, что некоторые вызовы API возвращают результаты только в 5000 элементных блоках. Мы также знаем, что любой рекурсивный поиск может занять много времени.

1 Ответ

1 голос
/ 29 января 2020
$storageAccount = Get-AzStorageAccount `
  -ResourceGroupName $resourceGroup `
  -Name $storageAccountName

$blobCount = 0
$token = $null
$MaxReturn = 5000

do {
    $Blobs = Get-AzStorageBlob -Context $storageAccount.Context -Container $containerName `
        -MaxCount $MaxReturn -ContinuationToken $token
    if ( -not $Blobs ) { break } # not sure if this is needed
    $blobCount = $blobCount + $Blobs.Count
    $token = $Blobs[$Blobs.Count - 1].ContinuationToken;
} while ( $token )

это "сценарий", который я придумал. на основании это

...