#Caché

3 Seguidores · 223 Postagens

  

InterSystems Caché é um sistema de gerenciamento de banco de dados (DBMS) multimodelo e servidor de aplicações. Veja mais detalhes aqui.

Documentação.

Novo
Artigo Evandro Wendt · Fev. 17 6m read

O APM normalmente se concentra na atividade da aplicação, mas coletar informações sobre o uso do sistema fornece dados de contexto importantes que ajudam a entender e gerenciar o desempenho da sua aplicação, portanto estou incluindo o Monitor de Histórico do IRIS nesta série.

Neste artigo, descreverei brevemente como iniciar o Monitor de Histórico do IRIS ou Caché para criar um registro da atividade em nível de sistema, complementando as informações de atividade e desempenho da aplicação que você coleta. Também apresentarei exemplos de SQL para acessar as informações.

0
0 5
Artigo Evandro Wendt · jan 19 1m read

Aqui está um exemplo prático de como importar dados de um arquivo CSV para o Intersystems CACHÉ usando ObjectScript. Supondo que seu arquivo CSV seja simples (por exemplo, separado por vírgulas e com cabeçalhos), você pode usar %Stream.FileCharacter para lê-lo linha por linha e analisar os dados.


 

ClassMethod ImportCSV(filePath As %String) As %Status {
    Set stream = ##class(%Stream.FileCharacter).%New()
    Set sc = stream.LinkToFile(filePath)
    If 'sc Quit sc

0
0 20
Artigo Evandro Wendt · jan 16 3m read

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=+HSet FromDate=+$H-1ForSet FromDate=$O(^PatientD("Date",FromDate)) Quit:FromDate>ToDate  Do
. Set PatId=""ForSet 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.
0
0 18
Artigo Heloisa Paiva · jan 12 5m read

Motivação

Eu não conhecia ObjectScript até começar meu novo emprego. Objectscript não é exatamente uma linguagem de programação jovem. Comparada a C++, Java e Python, a comunidade não é tão ativa, mas estamos empenhados em tornar este lugar mais vibrante, não estamos?

Notei que alguns dos meus colegas acham complicado entender as relações de classes nesses projetos enormes. Não existe nenhuma ferramenta moderna de diagrama de classes fácil de usar para ObjectScript.

Trabalhos Relacionados

Eu testei trabalhos relevantes:

0
0 22
Artigo Evandro Wendt · jan 6 2m read

A utilidade retorna os valores desejados do texto e exibe múltiplos valores, se existirem, com base na string de início e na string de término.

Class Test.Utility.FunctionSet Extends %RegisteredObject
{

/// W !,##class(Test.Utility.FunctionSet).ExtractValues("Some random text VALUE=12345; some other VALUE=2345; more text VALUE=345678;","VALUE=",";")
 

0
0 31
Artigo Evandro Wendt · jan 6 2m read

Rubrica de FAQ da InterSystems

Se você tentar eliminar uma global que está mapeada no nível de subscrito a partir do nó raiz, você receberá um erro e ela não será excluída. Isso ocorre porque o comando kill para globais mapeadas no nível de subscrito não pode ser usado atravessando mapeamentos.

// Suppose subscript-mapped globals exist in different databases, as shown below:^TEST(A*~K*) -> database A
^TEST(L*~Z*) -> database B

// Trying to kill from the top level will result in a <SLMSPAN> error.
NAMESPACE>Kill^TEST
<SLMSPAN> <- This error is output.
0
0 29
Artigo Evandro Wendt · jan 5 1m read

Olá a todos,

Como parte do desenvolvimento de uma API para saber a qual instância do IRIS está conectada, encontrei alguns métodos para obter informações sobre o servidor que podem ser úteis.

Obter o nome do servidor: $SYSTEM.INetInfo.LocalHostName()

Obter o IP do servidor: $SYSTEM.INetInfo.HostNameToAddr($SYSTEM.INetInfo.LocalHostName())

Obter o nome da instância: $PIECE($SYSTEM,":",2)

Assim, criei o seguinte código como uma classe BS:

0
0 25
Artigo Evandro Wendt · jan 4 2m read

Rubrica de FAQ do InterSystems

O utilitário ^%GCMP pode ser usado para comparar o conteúdo de dois globals.

Por exemplo, para comparar ^test e ^test nos namespaces USER e SAMPLES, ficaria assim:

No exemplo abaixo, 700 globais idênticas são criadas nos dois namespaces, e o conteúdo de uma delas é alterado para torná-lo o alvo de detecção.
 

0
0 27
Artigo Evandro Wendt · jan 4 1m read

gj :: configExplorer é uma nova extensão do VS Code que se integra ao Server Manager e utiliza o Structurizr para gerar diagramas de configuração dos seus servidores.

Aqui está um curto vídeo introdutório.

Ao usar a API Nativa do Intersystems IRIS para Node.js, não é necessário instalar nenhum código de suporte nos servidores. Essa escolha de tecnologia também permite que ele participe do atual concurso da Developer Community.

O lançamento inicial foca em dois aspectos da configuração do servidor:

  • Namespaces e bancos de dados
  • Conectividade ECP
0
0 30
Artigo Evandro Wendt · jan 2 3m read

Você provavelmente conhece essa situação:

Algum tempo atrás, você encontrou uma função $ZU muito especial para um tipo de problema bem específico. Uma espécie de fórmula mística. Ela se tornou popular e foi usada por muitos desenvolvedores em todo o seu código e em todas as suas instalações.

Depois de várias versões e atualizações, você é informado pela ISC de que seu $ZU místico está obsoleto (deprecated) e não é mais suportado. Você é aconselhado a substituí-lo por um novo $something().

0
0 28
Artigo Evandro Wendt · Dez. 31, 2025 1m read

SET atribui um valor à variável em tempo de execução.

#DIM declara a variável e o seu tipo de dado em tempo de compilação.

SET #DIM
Torna a variável dinâmica. Melhora a legibilidade.
Sem tipagem. Habilita IDE auto-completion.
Tempo de execução Util para referência a objetos.
#DIM name As%StringSet name = "Micheal Scott"#DIM age As%NumericSet age = 36#DIM employer As App.Employer               ; compile timeSet employer = ##class(App.Employer).%New() ; runtime 

 

SETou #DIM? Seu design, suas regras.

0
0 32
Artigo Heloisa Paiva · Dez. 27, 2025 2m read

Você envia uma requisição HTTP e recebe de volta um erro HTTP, mas com uma página de erro HTML que você não esperava... o que está acontecendo? 🤔

Especificamente, por exemplo: talvez você tenha tentado ler um recurso FHIR (ex: /Patient/123) e recebeu uma página de erro 404, embora com outros IDs de pacientes você receba o payload do recurso normalmente — então "a página" definitivamente existe... por que você estaria recebendo uma página de erro 404? 🙄

1
0 37
Artigo Heloisa Paiva · Dez. 22, 2025 2m read

O Poder da Indexação em Tabelas de Banco de Dados

Ao trabalhar com bancos de dados, a maioria dos desenvolvedores entende o conceito de um índice e por que ele é usado: para acelerar a recuperação de dados. Mas o real impacto da indexação muitas vezes só fica claro quando comparamos cenários com e sem ela.

Você sabe o que acontece sem um índice?
Imagine uma tabela com três colunas: Name, Age, e MobileNumber.


Considere esta consulta:

Se a coluna Idade (Age) não tiver um índice, o motor do banco de dados irá:

0
0 36
Artigo Heloisa Paiva · Nov. 24, 2025 4m read

Olá!

A migração de dados costuma parecer uma simples "tarefa de mover dados de A para B" até você realmente fazê-lo. Na realidade, é um processo complexo que combina planejamento, validação, testes e precisão técnica.

Em vários projetos nos quais lidei com a migração de dados para um HIS (Sistema de Informação Hospitalar) que roda em IRIS (TrakCare), percebi que o sucesso é resultado de uma combinação de disciplina e automação.

Aqui estão alguns pontos que desejo destacar:

1. Comece com um Formato de Dados Definido.

Antes mesmo de abrir seu primeiro arquivo, certifique-se de que todos, especialmente os fornecedores de dados, entendam claramente o formato de dados exato que você espera. Definir modelos (templates) logo no início evita idas e vindas desnecessárias e retrabalho mais tarde.

Embora os formatos Excel ou CSV sejam comuns, eu pessoalmente sinto que usar um arquivo de texto delimitado por tabulação (.txt) para upload de dados é a melhor opção. É leve, consistente e evita problemas com vírgulas dentro de campos de texto.

PatID   DOB Gender  AdmDate
10001   2000-01-02  M   2025-10-01
10002   1998-01-05  F   2025-10-05
10005   1980-08-23  M   2025-10-15

Certifique-se de que os formatos de data fornecidos no arquivo estejam corretos e constantes em todo o arquivo, pois todos esses arquivos geralmente são convertidos de um arquivo Excel e um usuário básico de Excel pode cometer erros ao fornecer formatos de data incorretos. Formatos de data errados podem ser irritantes ao tentar converter para o formato $Horolog.

0
0 51
Artigo Heloisa Paiva · Nov. 13, 2025 2m read

Rubrica de FAQ da InterSystems

Ao exportar usando o método Export() da classe %Library.Global, se o formato de exportação (quarto argumento: OutputFormat) for definido como 7, "Block format/Caché block format (%GOF)", os globais mapeados não podem ser exportados (apenas os globais no banco de dados global padrão do namespace são exportados). Para exportar globais mapeados no formato "Block format/Caché block format (%GOF)", especifique o diretório do banco de dados para o qual você deseja mapeá-los no primeiro parâmetro de %Library.Global.Export().

Um exemplo de execução é mostrado abaixo:

0
0 43
Artigo Heloisa Paiva · Nov. 10, 2025 4m read

Como um desenvolvedor que usa Cache como DB (Banco de Dados) em alguns projetos, estou usando REST APIs o tempo todo. Por isso, saber como consumir um recurso de uma REST API é, na minha opinião, crucial. É essencial saber como consumir APIs REST externas usando %Net.HttpRequest porque isso permite a integração com aplicações e serviços web modernos e é uma habilidade crucial para um desenvolvedor backend que gosta e usa Cache como DB.

O que é e quem é %Net.HttpRequest?

0
0 39
Artigo Heloisa Paiva · Out. 30, 2025 4m read

Ao usar SQL padrão ou a camada de objetos no InterSystems IRIS, a consistência dos metadados é geralmente mantida por meio de validação integrada e imposição de tipo. No entanto, sistemas legados que ignoram essas camadas—acessando globals diretamente—podem introduzir inconsistências sutis e graves.

1
0 37
Artigo Heloisa Paiva · Out. 19, 2025 14m read

Visão Geral

Esta interface web foi projetada para facilitar o gerenciamento de Tabelas de Pesquisa de Dados (Data Lookup Tables) por meio de uma página web amigável. É particularmente útil quando os valores da sua tabela de pesquisa são grandes, dinâmicos e mudam frequentemente. Ao conceder aos usuários finais acesso controlado a esta interface web (permissões de leitura, escrita e exclusão limitadas a esta página), eles podem gerenciar os dados da tabela de pesquisa de forma eficiente, de acordo com suas necessidades.

Os dados gerenciados por meio desta interface podem ser utilizados perfeitamente em regras ou transformações de dados do HealthConnect, eliminando a necessidade de constante monitoramento e gerenciamento manual das tabelas de pesquisa, economizando tempo significativo.

Nota: 

Se a Tabela de Pesquisa de Dados padrão não atender aos seus requisitos de mapeamento, você pode criar uma tabela personalizada e adaptar esta interface web, juntamente com sua classe de suporte, com modificações mínimas. O código de exemplo da classe está disponível mediante solicitação.

0
0 42
Artigo Heloisa Paiva · Out. 9, 2025 3m read

Quando precisamos integrar o Caché/IRIS com outros bancos de dados relacionais, uma pergunta comum surge: “Como configuro a conexão JDBC?”. A documentação oficial nem sempre fornece um guia passo a passo direto, o que pode ser frustrante, especialmente para iniciantes.

Neste artigo, vou guiá-lo por todo o processo de configuração de uma conexão JDBC com MySQL, desde o download do conector até o espelhamento de tabelas no Caché/IRIS.

0
0 44
Artigo Heloisa Paiva · Set. 16, 2025 3m read

Começar a usar ObjectScript é realmente empolgante, mas também pode parecer um pouco estranho se você está acostumado com outras linguagens. Muitos iniciantes tropeçam nos mesmos obstáculos, então aqui estão alguns "pegadinhas" que você vai querer evitar. (Além de algumas dicas amigáveis para contorná-las.)

Nomear Coisas Aleatoriamente

Todos nós já fomos culpados de nomear algo como Test1 ou MyClass apenas para seguir em frente rapidamente. Mas quando seu projeto cresce, esses nomes se tornam um pesadelo.

0
0 53
Artigo Heloisa Paiva · Set. 9, 2025 3m read

Rubrica InterSystems FAQ

Você pode verificar o espaço em disco a qualquer momento usando a classe utilitária do sistema: SYS.Database e a consulta: FreeSpace.

Aqui está como testar no terminal IRIS (vá para o namespace %SYS e então execute):

zn"%SYS"set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
set rset=stmt.%Execute()
do rset.%Display()

O exemplo de resultado de saída é o seguinte:

0
0 40
Artigo Heloisa Paiva · Set. 6, 2025 1m read

Rubrica InterSystems FAQ

O mirror sincroniza apenas arquivos de banco de dados.

Para sincronizar outros arquivos necessários para sua aplicação (arquivos CSP, imagens, documentos, etc.) entre os dois servidores que compõem o conjunto de espelhamento, siga uma das seguintes abordagens:

  1. Coloque esses arquivos em um disco compartilhado, usando um NAS ou dispositivo similar.
  2. Ou use um software de sincronização de arquivos para sincronizá-los entre os dois servidores.
0
0 27
Artigo Larissa Prussak · Ago. 29, 2025 1m read

InterSystems FAQ rubric

Por padrão, a ordem das colunas em uma tabela é determinada automaticamente pelo sistema.
Para alterar a ordem, defina explicitamente a ordem de cada propriedade utilizando a palavra-chave SqlColumnNumber ao definir a classe.

Exemplo:

Property Name As %String [SqlColumnNumber = 2];

Consulte a documentação abaixo.

SqlColumnNumber

Se você deseja alterar o nome da tabela SQL, especifiqueSqlTableName. Se você deseja alterar o nome da coluna (nome do campo), especifiqueSqlFieldName.

Ambos se aplicam apenas a classes persistentes.

0
0 21
Artigo Heloisa Paiva · Ago. 25, 2025 3m read

Ao começar a usar o InterSystems IRIS ou Cache, os desenvolvedores frequentemente se deparam com três conceitos principais: Objetos Dinâmicos, Globals e Tabela Relacional. Cada um tem seu papel na construção de soluções escaláveis e fáceis de manter. Neste artigo, vamos percorrer exemplos de código práticos, destacar as melhores práticas e mostrar como esses conceitos se conectam.

1. Trabalhando com Objetos Dinâmicos

0
0 57
Artigo Heloisa Paiva · Ago. 11, 2025 4m read

O Guia do Mochileiro do Object Script

O Object Script é nossa linguagem de programação principal no ambiente InterSystems IRIS. Ele também oferece recursos modernos que o tornam poderoso para desenvolvedores.

Para iniciantes, adotar boas práticas de programação desde o início é fundamental para escrever um código de fácil manutenção, eficiente, escalável e claro, seguindo as melhores práticas

Este guia apresenta dicas essenciais para ajudar desenvolvedores “novatos” em ObjectScript a escreverem um código melhor e compreenderem alguns recursos da linguagem.

Antes de tudo: use Nomes Significativos

0
0 57
Artigo Heloisa Paiva · Ago. 9, 2025 3m read

A ObjectScript pode parecer apenas mais uma linguagem de programação, mas aqui está a reviravolta:

Seu código pode viver para sempre (sim, mesmo depois que você tiver passado para outro projeto). É por isso que é importante mantê-lo organizado, fácil de ler e seguro contra bugs misteriosos.

(Um guia para iniciantes para manter seu código limpo, amigável e à prova de futuro)

Bem-vindo à selva do ObjectScript, onde seu código pode ter escopo global e natureza persistente. Vamos manter as coisas limpas, legíveis e resistentes a bugs.

 1️⃣Nomeie como se fosse sério

0
0 43
Artigo Larissa Prussak · Jul. 24, 2025 2m read

Se você está investigando Globals estruturadas complexas, isso pode facilmente se tornar um exercício cansativo de digitação.
Diferente do Global Explorer no System Management Portal, o Global-Inspector permite um tipo de navegação aprofundada (drill-down), permitindo explorar nível por nível dos subscritos. Você também tem a opção de visualizar o conteúdo armazenado ou mostrar apenas a estrutura de subscritos. Globals que armazenam tabelas SQL podem não ser tão interessantes, mas no espaço SYSTEM, você encontrará verdadeiras árvores com ramos e ramificações completamente diferentes.

2
0 43