Classes de armazenamento DICOM

Esta página descreve como gerenciar dados DICOM na API Cloud Healthcare usando diferentes classes de armazenamento. A escolha da classe de armazenamento certa pode ajudar a reduzir custos e atender aos requisitos regulamentares de retenção de dados.

Esta página é destinada a usuários técnicos que já conhecem o DICOM e a API Cloud Healthcare.

Visão geral

As classes de armazenamento DICOM funcionam de maneira semelhante às classes de armazenamento do Cloud Storage, oferecendo diferentes características de custo e desempenho com base na frequência com que você acessa os dados e no tempo que precisa armazená-los. Para mais informações sobre cada classe de armazenamento, consulte Descrições de classe.

Talvez seja necessário mudar a classe de armazenamento de objetos DICOM dependendo da frequência de acesso ou do tempo de retenção do objeto. Exemplo:

  • É possível mover imagens DICOM raramente acessadas do armazenamento padrão para o Nearline ou o Coldline e economizar nos custos de faturamento.
  • É possível mover os dados do paciente que precisam ser mantidos por motivos legais para o Archive Storage, que é a classe de armazenamento mais barata e durável.

Classes de armazenamento DICOM disponíveis

É possível usar as seguintes classes de armazenamento para seus objetos DICOM:

  • Padrão (padrão)
  • Nearline
  • Coldline
  • Archive

Preços da classe de armazenamento

Cada classe de armazenamento tem uma estrutura de preços própria. Mudar a classe de armazenamento dos objetos DICOM pode afetar seus custos de faturamento. Para saber mais, consulte:

Mudar a classe de armazenamento de objetos DICOM individuais

É possível mudar a classe de armazenamento de objetos DICOM no nível do estudo, da série ou da instância.

Os exemplos a seguir mostram como mudar a classe de armazenamento de uma instância DICOM.

REST

  1. Mude a classe de armazenamento da instância DICOM usando o método projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do seu projeto do Google Cloud;
    • LOCATION: o local do conjunto de dados;
    • DATASET_ID: o conjunto de dados pai do armazenamento DICOM
    • DICOM_STORE_ID: o ID do armazenamento DICOM
    • STUDY_INSTANCE_UID: o identificador exclusivo da instância de estudo
    • SERIES_INSTANCE_UID: o identificador exclusivo da instância da série
    • INSTANCE_UID: o identificador exclusivo da instância
    • STORAGE_CLASS: a classe de armazenamento da instância DICOM. Um de STANDARD, NEARLINE, COLDLINE ou ARCHIVE.

    Corpo JSON da solicitação:

    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      }
    }
    

    Para enviar a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

    cat > request.json << 'EOF'
    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      }
    }
    EOF

    Depois execute o comando a seguir para enviar a solicitação REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:setBlobStorageSettings"

    PowerShell

    Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

    @'
    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Depois execute o comando a seguir para enviar a solicitação REST:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:setBlobStorageSettings" | Select-Object -Expand Content

    APIs Explorer

    Copie o corpo da solicitação e abra a página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Cole o corpo da solicitação nessa ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.

    A saída é esta: A resposta contém um identificador para uma operação de longa duração (LRO). Operações de longa duração são retornadas quando as chamadas de método podem demorar mais para serem concluídas. Observe o valor de OPERATION_ID. Você vai precisar desse valor na próxima etapa.

  2. Confira o status da operação de longa duração usando o método projects.locations.datasets.operations.get.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do seu projeto do Google Cloud;
    • LOCATION: o local do conjunto de dados;
    • DATASET_ID: o conjunto de dados pai do armazenamento DICOM
    • OPERATION_ID: o ID retornado da operação de longa duração.

    Para enviar a solicitação, escolha uma destas opções:

    curl

    execute o seguinte comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Execute o seguinte comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
    A saída é esta: Quando a resposta contém "done": true, a LRO é concluída.

Mudar a classe de armazenamento de vários objetos usando um arquivo de filtro

As seções a seguir mostram como criar e usar um arquivo de filtro para mudar a classe de armazenamento de objetos DICOM com base em um critério de filtro.

Requisitos de filtro de arquivo

  • Cada linha no arquivo de filtro define o estudo, a série ou a instância e usa o formato /studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID.
  • É possível truncar uma linha para especificar o nível em que o filtro funciona. Por exemplo, é possível selecionar um estudo inteiro especificando /studies/STUDY_INSTANCE_UID. Você também pode selecionar uma série inteira especificando /studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID.

Considere o seguinte arquivo de filtro:

/studies/1.123.456.789
/studies/1.666.333.111/series/123.456
/studies/1.666.333.111/series/567.890
/studies/1.888.999.222/series/123.456/instances/111
/studies/1.888.999.222/series/123.456/instances/222
/studies/1.888.999.222/series/123.456/instances/333

Este arquivo de filtro de exemplo se aplica ao seguinte:

  • O estudo inteiro com o UID da instância do estudo como 1.123.456.789
  • Duas séries separadas com UIDs de instância de série como 123.456 e 567.890 no estudo 1.666.333.111
  • Três instâncias individuais com IDs de instância como 111, 222 e 333 no estudo 1.888.999.222 e na série 123.456

Criar um arquivo de filtro usando o BigQuery

Para criar um arquivo de filtro usando o BigQuery, primeiro exporte os metadados da sua loja DICOM para o BigQuery. Os metadados exportados mostram os UIDs de estudo, série e instância dos dados DICOM no armazenamento DICOM.

Depois de exportar os metadados, siga estas etapas:

  1. Execute uma consulta para retornar os UIDs do estudo, da série e das instâncias que você quer adicionar ao arquivo de filtro.

    Por exemplo, a consulta a seguir mostra como concatenar os UIDs de estudo, série e instância para corresponder aos requisitos do formato do arquivo de filtro:

    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
  2. Opcional: se a consulta retornar um conjunto de resultados grande que exceda o tamanho máximo de resposta, salve os resultados da consulta em uma nova tabela de destino no BigQuery.

  3. Salve os resultados da consulta em um arquivo e exporte-os para o Cloud Storage. Se você salvou os resultados da consulta em uma nova tabela de destino na etapa 2, consulte Exportar dados de tabela para exportar o conteúdo da tabela para o Cloud Storage.

  4. Edite o arquivo exportado conforme necessário e inclua-o na sua solicitação para mudar a classe de armazenamento de vários objetos DICOM.

Criar um arquivo de filtro manualmente

Para criar um arquivo de filtro manualmente, faça o seguinte:

  1. Crie um arquivo de filtro com os objetos DICOM que você está filtrando.
  2. Faça upload do arquivo de filtro para o Cloud Storage. Para instruções, consulte Fazer upload de objetos de um sistema de arquivos.

Usar um arquivo de filtro

Os exemplos a seguir mostram como aplicar um arquivo de filtro ao mudar a classe de armazenamento de objetos DICOM.

REST

  1. Mude a classe de armazenamento das instâncias DICOM no arquivo de filtro usando o método projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do seu projeto do Google Cloud;
    • LOCATION: o local do conjunto de dados;
    • DATASET_ID: o conjunto de dados pai do armazenamento DICOM
    • DICOM_STORE_ID: o ID do armazenamento DICOM
    • STORAGE_CLASS: a classe de armazenamento para os objetos DICOM. Um de STANDARD, NEARLINE, COLDLINE ou ARCHIVE.
    • CLOUD_STORAGE_BUCKET: o nome do bucket do Cloud Storage que contém o arquivo de filtro
    • FILTER_FILE_PATH: o URI totalmente qualificado para o arquivo de filtro no bucket do Cloud Storage

    Corpo JSON da solicitação:

    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      },
      "filterConfig": {
        "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH"
      }
    }
    

    Para enviar a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

    cat > request.json << 'EOF'
    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      },
      "filterConfig": {
        "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH"
      }
    }
    EOF

    Depois execute o comando a seguir para enviar a solicitação REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings"

    PowerShell

    Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

    @'
    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      },
      "filterConfig": {
        "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Depois execute o comando a seguir para enviar a solicitação REST:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings" | Select-Object -Expand Content
    A saída é esta: A resposta contém um identificador para uma operação de longa duração (LRO). Operações de longa duração são retornadas quando as chamadas de método podem demorar mais para serem concluídas. Observe o valor de OPERATION_ID. Você vai precisar desse valor na próxima etapa.

  2. Confira o status da operação de longa duração usando o método projects.locations.datasets.operations.get.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do seu projeto do Google Cloud;
    • LOCATION: o local do conjunto de dados;
    • DATASET_ID: o conjunto de dados pai do armazenamento DICOM
    • OPERATION_ID: o ID retornado da operação de longa duração.

    Para enviar a solicitação, escolha uma destas opções:

    curl

    execute o seguinte comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Execute o seguinte comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
    A saída é esta: Quando a resposta contém "done": true, a LRO é concluída.

Conferir a classe de armazenamento de um objeto DICOM

É possível conferir a classe de armazenamento de objetos DICOM no nível do estudo, da série ou da instância.

As seções a seguir descrevem como visualizar a classe de armazenamento de uma instância DICOM.

Conferir informações da classe de armazenamento de um objeto DICOM

Os exemplos a seguir mostram como usar o método instances.getStorageInfo para conferir a classe de armazenamento de objetos DICOM.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do seu projeto do Google Cloud;
  • LOCATION: o local do conjunto de dados;
  • DATASET_ID: o conjunto de dados pai do armazenamento DICOM
  • DICOM_STORE_ID: o ID do armazenamento DICOM
  • STUDY_INSTANCE_UID: o identificador exclusivo da instância de estudo
  • SERIES_INSTANCE_UID: o identificador exclusivo da instância da série
  • INSTANCE_UID: o identificador exclusivo da instância

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:getStorageInfo"

PowerShell

Execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:getStorageInfo" | Select-Object -Expand Content

APIs Explorer

Abra a página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Preencha todos os campos obrigatórios e clique em Executar.

Você receberá uma resposta JSON semelhante a esta:

Consultar metadados DICOM exportados no BigQuery

É possível exportar metadados DICOM para o BigQuery e executar consultas para conferir as classes de armazenamento dos objetos DICOM exportados.

A consulta a seguir mostra como recuperar o UID da instância do estudo, o UID da instância da série, o UID da instância, o tamanho de armazenamento e a classe de armazenamento de até 1.000 instâncias DICOM de um conjunto de dados do BigQuery:

SELECT StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID, BlobStorageSize, StorageClass
FROM PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE
LIMIT 1000

Substitua:

  • PROJECT_ID: o ID do seu projeto do Google Cloud;
  • BIGQUERY_DATASET: o conjunto de dados pai do BigQuery da tabela que contém os metadados DICOM exportados
  • BIGQUERY_TABLE: a tabela do BigQuery que contém os metadados do DICOM exportados