Persistência de dados – ISAM

Introdução

Uma parte fundamental de qualquer sistema informatizado é a persistência dos dados. Hoje temos bancos de dados ISAM, relacionais ( SQL ), Bancos No-SQL — para dados não-tabulados, XML, entre outros. Cada um deles é fundamentado em um paradigma para o tipo, quantidade, formato e necessidade de armazenamento e recuperação de dados. Como a maioria dos recursos da tecnologia da informação, cada um destes bancos possui um diferencial ligado a casos de uso. Muitas aplicações comerciais podem utilizar mais de um tipo de banco de dados, de acordo com a necessidade de cada ponto da aplicação.

Neste tópico será abordado um pouco do conceito, características e utilização de mecanismos que usam a implementação ISAM para persistência e consulta de dados.

Conceito (um pouco de teoria é inevitável)

ISAM é um acrónimo de Indexed Sequential Access Method, ou método de acesso sequencial indexado. Trata-se de um método de indexação de dados para acesso rápido. Este mecanismo foi desenvolvido pela IBM para mainframes, antes da década de 70. O termo ISAM aplica-se atualmente a mecanismos e APIs de acesso a dados onde o desenvolvedor explicitamente faz a busca em um índice, para então recuperar a informação que o índice aponta (em contraste com um banco relacional, que possui um optimizador de queries que escolhe internamente o melhor índice a ser usado), ou ainda a um mecanismo de indexação que permita simultaneamente buscas sequenciais e por chave. Normalmente a API ISAM é composta por um grupo de funções, usadas para realizar operações individuais com tabelas, índices e registros.

Características e utilização

Os dados são organizados em registo de tamanho fixo, e salvos sequencialmente em um arquivo, onde a posição ordinal do dado no arquivo representa o seu número de registro. Um ou mais índices podem ser criados para este arquivo, com um ou mais campos nas chaves, e as operações básicas de recuperação de dados consiste basicamente em buscar uma informação diretamente em um índice a partir de uma chave de busca montada com os campos usados no índice, onde após o registro ser encontrado no índice, a informação na tabela de dados é posicionada (ponteiro de registro), e a partir deste instante você pode navegar para os próximos registros de dados ou aos registros anteriores, usando a ordem do índice atualmente aberto, ou usando a ordem natural de inserção (física) da tabela. Algumas APIs permitem campos de conteúdo variável, que normalmente são gravados em um arquivo auxiliar, onde um registro do arquivo ISAM de dados aponta para um offset do arquivo auxiliar para recuperar o(s) campo(s) de tamanho variável.

Na página dedicada ao ISAM pela Wikipedia (em inglês, vide referências no final do post), têm uma lista de aplicações que implementam a arquitetura ISAM. Entre elas, o Clipper, FoxPro, Microsoft Access, Faircom c-TreeACE, Dataflex, Paradox, entre outras. Existe uma relação mais próxima entre o dados fisicamente gravados e o desenho do algoritmo. Normalmente um sistema que utiliza uma engine ISAM para dados obtém grande desempenho desenhando bem a distribuição dos dados dentro de tabelas e os índices necessários para acessar rapidamente as informações.

Destas ferramentas, algumas também oferecem uma camada superior de abstração para implementar acesso relacional, com queries e tudo. A raiz dos dados no disco continua sendo ISAM, mas existem as tabelas de catálogo do banco (systables, sysindexes, syscolumns, etc.) e os algoritmos para realizar o parser de queries, recuperação de dados, transacionamento, etc.

Na prática, é muito mais fácil e prático desenvolver usando um banco relacional. Você cria as tabelas, índices para acelerar as buscas mais utilizadas ou que precisam efetivamente de performance, e utiliza recursos do SGDB para monitorar, configurar e administrar o Banco de Dados, como as estatísticas de índices, segmentação de dados, recursos avançados de pesquisa de textos, além de existir uma ampla gama de aplicações de mercado construídas para conectar-se com estes bancos e permitir de forma assistida a recuperação de dados para análises, estatísticas e relatórios.

Como eu mencionei anteriormente, cada um dos tipos de banco de dados possui um diferencial interessante, muito eficaz quando aplicado no seu cenário ideal. Por exemplo, em uma etapa intermediária de um processamento, ou para armazenamento de dados de baixa volatilidade ( pouca manutenção de estrutura e conteúdo), uma API ISAM pode oferecer um diferencial de performance, devido justamente ao fato de não termos presentes alguns overheads que são implícitos em um Banco de Dados relacional. Porém, a decisão de como distribuir os dados e como criar e usar os índices paa acessar as informações da forma mais eficiente possível ficam na mão do desenvolvedor. E se isto não for feito como manda o figurino, o ganho que poderia ser obtido em determinada parte do processo usando o ISAM é engolido pela forma de implementação do algoritmo.

Uso no ERP Microsiga

O ERP Microsiga utiliza um gateway de conexão com bancos de dados relacionais (DBAccess), homologado para uma lista de Bancos de Dados relacionais, como Microsoft SQL, Oracle, DB2, Informix, e inclusive versões Open Source, como o PostgreSQL e o MySQL — com algumas restrições e usos em produtos específicos. E, ao mesmo tempo, utiliza também o c-TreeACE, da Faircom, para acesso a tabelas de meta-dados do ERP (também conhecidos como “SXS”), bem como armazenamento de dados em módulos do ERP concebidos para serem executados em modo Stand-Alone, e para criar tabelas temporárias compartilhadas entre servidores (a partir do RootPath do ambiente, compartilhado pela rede com as demais máquinas servidoras em ambiente balanceado) e exclusivas (tabelas temporárias no HD local da máquina onde o serviço do TOTVS | Application Server está sendo executado).

Conclusão

Na programação contemporânea, quem não conhece mais profundamente a camada ISAM normalmente referem-se a ela como algo ultrapassado. Realmente, usar uma base principal ISAM em um sistema com larga previsão de crescimento de base de dados, dada a amarração intrínseca com o meio físico, fatalmente você iria esbarrar com questões de performance e dependência direta de devices/hardware. Inclusive, por causa disso, a IBM criou um superset do ISAM, chamado VSAM (Virtual Storage Access Method) na década de 70. Porém, a engine ISAM é muito eficiente para determinados casos de uso, muito comuns em etapas de processos intermediárias, como a criação de arquivos de uso temporário.

A criação de arquivos temporários é um tema que merece atenção especial, e será abordado em profundidade em um outro post, diretamente relacionado a performance e escalabilidade.

Até o próximo post, pessoal 😉

Referências

Wikipedia contributors. ISAM. Wikipedia, The Free Encyclopedia. October 20, 2014, 21:33 UTC. Available at: http://en.wikipedia.org/w/index.php?title=ISAM&oldid=630429759. Accessed December 19, 2014.

Anúncios

3 comentários sobre “Persistência de dados – ISAM

  1. Muito bom o Artigo!

    Pessoalmente prefiro trabalhar com bancos relacionais, mas creio que precisamos ficar com a mente aberta para outras soluções e não cair no ditado “Quando só se tem um martelo, tudo se parece com um prego.”

    Grato!

    Curtido por 1 pessoa

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s