Я пытаюсь преобразовать уровень доступа наших больших двоичных объектов в хранилище Azure из Cool в Archive.
Я использую скрипт Powershell для этого, но как только я доберусь до некоторых наших контейнеров с файлами = 200k, он высосет всю мою оперативную память.
Я надеялся, что создание Foreach-obejct{}
после Get-AzStorageBlob
заставит его пройти через объект сразу после него, чтобы он не сохранил его.
#Account information
$StorageAcc = "StorageAccount-info"
$StorageAccKey = "StorageAccKey-info"
$containername = "container1"
#Create a storage context
$context = New-AzStorageContext -StorageAccountName $StorageAcc -StorageAccountKey $StorageAccKey
Get-AzStorageBlob -Container $containerName -Context $context | ForEach-Object {$_.ICloudBlob.SetStandardBlobTier("Archive")}
Я ожидаю, что это будет проходить через контейнер с x количеством файлов без сбоя ПК из-за проблем с памятью, время не является проблемой.
Сейчас я могу запустить thorgh 132k за 90 минут, что занимает около 400 МБ моей памяти / ОЗУ.
Спасибо!
EDIT:
Для всех, кому может понадобиться что-то подобное.
Он проверит все BLOB-объекты и проверит, был ли он уже заархивирован, это сэкономит много времени. Он также сохранит ContinuationToken в текстовом файле, так что если что-то случится, вам не придется начинать сначала. Не забудьте отредактировать путь к файлу
$StorageAcc = "StorageAccount-info"
$StorageAccKey = "StorageAccKey-info"
$containername = "container1"
$token = $null
$total = 0
$start = 0
#Create a storage context
$context = New-AzStorageContext -StorageAccountName $StorageAcc -StorageAccountKey $StorageAccKey
do{
$blobs = Get-AzStorageBlob -Container $containerName -Context $context -MaxCount 10000 -ContinuationToken $token
$Total += $Blobs.Count
foreach ($blob in $blobs)
{
If($blob.ICloudBlob.Properties.StandardBlobTier -eq "cool"){
$blob.ICloudBlob.SetStandardBlobTier("Archive")
}
}
if($Blobs.Length -le 0) { Break;}
$Token = $Blobs[$blobs.Count -1].ContinuationToken;
Echo "Total $Total blobs in container $ContainerName"
add-content C:\Users\Admin\Desktop\Token.txt $Token.NextMarker
if($start -eq 0)
{
$start += 1
$token.NextMarker = "Token"
}
}
While ($Token -ne $Null)
Echo "Total $Total blobs in container $ContainerName the end"