【发布时间】:2020-04-27 19:40:59
【问题描述】:
我有一个疑问,在编写解决方案之前,我想知道它是否正确。
我们使用持久实体,我们想删除保存在“历史”表存储中的记录(我不想通过 Storage Explorer 删除表,这是更核心的选择)。所以,我怕是因为再过一段时间我会有很多空记录,也许性能不会更好。
我们尝试了几种解决方案,但都一样:删除实体的调度信号
Entity.Current.DeleteState();
甚至是删除所有实体的powershell。
function DeleteEntities
{
param (
[string[]]$keys
)
foreach ($key in $keys) {
$signalEntityUri = "$baseUrl/runtime/webhooks/durabletask/entities/VoiceCallEntity/$key`?op=Delete&code=$code"
Write-Output $signalEntityUri
Invoke-WebRequest -Uri $signalEntityUri -Method POST
}
}
function GetEntities
{
param (
[string]$continuationToken
)
$baseUrl = "your_base_url_goes_here"
$code = "your_code_goes_here"
$listEntitiesUri = "$baseUrl/runtime/webhooks/durabletask/entities/VoiceCallEntity?code=$code"
$response = Invoke-WebRequest -Uri $listEntitiesUri -Method GET -Headers @{'x-ms-continuation-token' = $continuationToken}
$body = $response | ConvertFrom-Json
$continuationToken = $response.Headers['x-ms-continuation-token']
$keys = $body | select -ExpandProperty entityId | select -ExpandProperty key | where { $_ -ne '' }
return @{ 'continuationToken' = $continuationToken; 'keys' = $keys }
}
$result = GetEntities('')
DeleteEntities($result.keys)
while($result.continuationToken -ne '')
{
$result = GetEntities($result.continuationToken)
DeleteEntities($result.keys)
}
我还没有找到通过 API 删除整个记录的方法,所以我的最后一个意图是创建一个带有计时器触发器的 azure 函数,并在 API 表存储的帮助下,用 null 确定删除该表中的记录状态。
我是否缺少更简单的方法来实现此结果?
非常感谢。
【问题讨论】:
标签: azure-functions azure-durable-functions