Artigo
· 1 hr atrás 3min de leitura

Dicas para lidar com grande volume de dados

Olá comunidade,

Quero compartilhar minha experiência trabalhando em projetos que lidam com um volume masivo de dados. Ao longo dos anos, tive a oportunidade de lidar com enormes volumes de dados de pacientes, dados de pagadores e logs transacionais enquanto trabalhava na indústria hospitalar. Tive a chance de criar relatórios enormes, que precisavam ser escritos usando lógicas avançadas para buscar dados em múltiplas tabelas, cujos índices não ajudavam a escrever código eficiente.

Aqui está o que aprendi sobre como gerenciar grandes volumes de dados de forma eficiente.

 

Escolhendo o melhor método de acesso aos dados

Como todos nós da comunidade sabemos, o IRIS oferece múltiplas maneiras de acessar dados. A escolha do método correto depende do requisito.

  • Acesso direto a global: o mais rápido para operações de leitura/gravação em massa. Por exemplo, se eu precisar percorrer índices e buscar dados de pacientes, posso percorrer as globais para processar milhões de registros. Isso economiza muito tempo.
Set ToDate=+H
Set FromDate=+$H-1 For  Set FromDate=$O(^PatientD("Date",FromDate)) Quit:FromDate>ToDate  Do
. Set PatId="" For  Set PatId=$Order(^PatientD("Date",FromDate,PatID)) Quit:PatId=""  Do
. . Write $Get(^PatientD("Date",FromDate,PatID)),!
  • Usando SQL: Útil para relatórios ou necessidades analíticas, embora seja mais lento para conjuntos de dados muito grandes.

Otimização de Operações em Lote

Processar milhões de registros um por um é lento e pesado. Para otimizar, descobri que salvar em lotes, usar globais temporárias para etapas intermediárias e dividir grandes tarefas em partes menores faz uma grande diferença. Desativar índices não essenciais durante inserções em massa também acelera o processo.

Usando Streams

Para textos grandes, XML ou payloads JSON, objetos Stream evitam sobrecarga de memória. Lidar com arquivos enormes pode consumir muita memória se carregarmos tudo de uma vez. Prefiro usar objetos Stream para ler ou escrever os dados em partes. Isso mantém o processo rápido e eficiente.

Set stream = ##class(%Stream.GlobalCharacter).%New()
Do stream.CopyFromFile("C:\Desktop\HUGEDATA.json")
w "Size: "_stream.Size(),!

Esta é uma forma simples de manipular os dados com segurança, sem deixar o sistema mais lento.

Então é isso. Lidar com grandes volumes de dados não é apenas sobre fazer as coisas rapidamente, mas sim sobre escolher a forma certa de acessar, armazenar e manter o sistema equilibrado de maneira inteligente.

Desde migrar milhões de registros de pacientes até construir APIs que lidam com conjuntos de dados bastante grandes, essas abordagens fizeram uma diferença real em termos de desempenho e manutenibilidade.

Se você está trabalhando com conceitos semelhantes e quer trocar ideias, sinta-se à vontade para entrar em contato. Estou sempre feliz em compartilhar o que funcionou para mim. Também estou aberto a feedbacks e às suas opiniões...

 

Obrigado!!! :-)

Discussão (0)1
Entre ou crie uma conta para continuar