Revista Do Linux
EDIÇÃO DO MÊS
 Programação
 CD do mês
 Corporativo
 Entrevista
 Capa
 Estudo de Caso
 Produto
 Distro
 Flagship
 Interbase
 Gerenciadores
 RPM
 Wine
 XML
 

FlagShip
acessando bancos de dados relacional

Muito tem se falado de banco de dados relacional. Não vou me estender nesse assunto, pois existem diversos artigos demonstrando as vantagens da utilização de uma base relacional. Mas fundamentalmente podemos citar os principais benefícios de um banco relacional: padrão dos comandos de acesso (linguagem SQL), propriedade de suportar alto volume de dados, infinita capacidade de acesso à base por quaisquer dados (tipos de informação), backup on-line, integridade da base de dados, implementação de triggers e procedures, conceito de transação (commit/roolback) e distribuição e replicação de dados.

Com base nessas vantagens, a Inso, distribuidora do FlagShip no Brasil (FlagShip é uma linguagem de programação e ferramenta de desenvolvimento compatível com o CA-Clipper), desenvolveu e agregou a esse produto o FS-Connection. O FS-Connection é um RDD que permite ao FlagShip acessar bancos de dados relacionais. É sobre esse módulo que irei falar. Com o FS-Connection, pode-se converter todo o seu aplicativo Clipper para o ambiente Linux, acessando também um RDBMS.

O FS-Connection é composto por três módulos bem definidos.

1. O RDD propriamente dito, escrito em FlagShip, converte todos os comandos e as funções de acesso à base DBF para comandos SQL, que são formatados e enviados para as funções da LibRDD. O resultado desse processamento é recebido e reformatado para ser devolvido à aplicação cliente, como se tivesse acessado arquivos DBF.

2. O Daemon é um programa escrito em C e ESQLC (Embbeded SQL/C) com a função de fazer os acessos ao banco de dados relacional (RDBMS) efetivamente. Este recebe as requisições da LibRDD, as envia para o banco, recebe os resultados e repassa-os para a LibRDD novamente.

3. A LibRDD é um conjunto de funções escritas em C, mas com interface FlagShip, que recebe as requisições do RDD, as envia para o Daemon, recebe os resultados e repassa-os para o RDD.

Utilitários do FS-Connection

São fornecidos também alguns utilitários para realizar a conversão automática de formatos dos arquivos .dbf para RDBMS, incluindo também os campos lógicos, memos e criptografados. Existe também um outro utilitário que faz uma análise dos nomes dos campos dos arquivos em dbf para verificar se são nomes reservados do banco de dados.

DBF e RDBMS no mesmo programa

Através do comando USE complementado pelas funções DBFIDX ou DBFSQL, é possível definir se o arquivo é DBF ou uma tabela do banco de dados relacional. Normalmente define-se o ambiente default e acrescenta-se pelas funções citadas os arquivos que sejam exceção. Um dos nossos utilitários, o programa de conversão de arquivos com campos memo, é um exemplo de programa que usa tanto arquivos .dbf quanto tabelas em banco de dados relacional.

Fácil manutenção dos fontes

Sobretudo para os desenvolvedores, o aspecto interessante é que um único fonte e executável serve tanto para acessar a base .dbf como a RDBMS, que não precisam usar outra linguagem. Com o #if ... #else ... #endif, pode-se manter rotinas exclusivas para cada um dos ambientes num mesmo programa, como nesse exemplo:


#ifdef FlagShip
    #include fspreset.fh
#endif

#ifdef RDD
extern IngresRDDNew
    rddsetdefault (oracleRDD)
#endif

Utilizando esses recursos pode-se manter o mesmo fonte e gerar o executável conforme o ambiente (Clipper, FlagShip, FlagShip com FS-Connection).

Melhoria de performance

Como os programas Clipper / FlagShip escritos para acessar a base de dados dbf foram desenvolvidos com uma lógica procedural, em casos de processamentos batch de alto volume pode haver perda de performance.

Escrevendo essa rotina com lógicas SQL (não procedurais), a performance é muito maior. Para isso o FS- Connection possui uma função ExecSql, que permite escrever diretamente no fonte todo o comando SQL. Veja código 1 na página anterior.

Precauções com alguns comandos em ambiente RDBMS

Normalmente em tabelas de grande volume, os comandos ou funções GoTop / DbGoTop(), GoToBottom / DbGoBottom(), Seek / DbSeek(), acompanhado do Set SoftSeek ON, podem trazer alguma perda de performance. Nesse caso analisar a lógica, usando comandos SQL, ou simplificar a rotina pode resultar numa melhoria muito grande de performance.

Esses mesmos comandos com o SoftSeek OFF não vão causar nenhuma perda de performance.

Limitações do FS-CONNECTION

  • Set Filter e Set Relation deverão ser substituídos.
  • Chaves de índices, com funções como o SUBSTR(...), LEFT(...), etc. não são aceitos.
  • Número máximo de colunas (campos) por tabela (arquivo) — 200 colunas (campos).
  • Número máximo de campos MEMO por tabela (arquivo) — 4 campos (passível de alteração).
  • Tamanho máximo de linha (registro) — 3.988 bytes.
  • Não pode utilizar nome de tabelas e colunas com nomes reservados pelo BDR.

Conversão de aplicações Flagship para acesso a RDBMS

Fazer todos os testes necessários com o sistema em FlagShip acessando a base de dados dbf. Este teste é importante para eliminar o problema de lógica e também para a comparação de performance.

Instalar o FS-Connection no seu ambiente de trabalho

  • Fazer as conversões de todos os arquivos para o banco de dados relacional, utilizando os utilitários que acompanham o FS-Connection.
  • Executar as rotinas de parametrização e otimização de performance do próprio banco.
  • Fazer as alterações básicas nos fontes, efetuando os testes de acesso e performance.
  • Analisar eventuais problemas de performance, verificando a necessidade ou não de incluir ou alterar as funções críticas.

Principais vantagens de um RDBMS em relação ao DBF

  • Fazer o backup dinâmico, ou seja, mesmo com os usuários conectados.
  • Efetuar o restore da base sem perda dos dados, utilizando o próprio log do banco.
  • Possibilidade de incluir controles de begin / end transactions.
  • Eliminação total do problema de corrupção de índices.
  • Garantia total de integridade da base de dados.
  • Permitir compartilhamento com vários front-ends.
  • Possibilitar o armazenamento e acesso de grande volume de dados com ótima performance.
  • Possibilidade de criar store procedures no próprio banco, para garantir a integridade, performance e otimização do código fonte

Características Gerais da Solução

  • Evolução para o ambiente cliente / servidor.
  • Possibilidade de dados distribuídos e multiplataforma. Recurso de réplica e distribuição de dados.
  • Servidor de alta performance e escalável, sem limites aparentes de expansão.
  • Implementação de procedimentos de gerenciamento e segurança, como backup on-line, restore, log de transações, etc.
  • O acesso via FS-Connection é nativo (não utiliza ODBC).
  • Conversão automática dos arquivos DBF para a base de dados relacional, inclusive campos memos e conteúdos criptografados.
  • O nível de customização é mínimo (quando existente).
  • Possibilidade de escrever comandos SQL diretamente no fonte FlagShip.
  • Acesso a diversos bancos relacionais (CA-Ingres II, Oracle, Interbase, etc).
  • A documentação do FS-Connection é toda em HTML com descrição de todos os comandos de acesso

FlagShip, com exemplos bastante variados e esclarecimento das principais dúvidas dos usuários.

FS-Connection demo

Você pode entrar no nosso site (www.inso.com.br) e solicitar um demo do FS-Connection para a realização dos seus testes. Para isso basta preencher o formulário de solicitação indicando que banco de dados relacional você irá utilizar. Além disso dispomos de workshop e seminários gratuitos (mensais), nos quais você pode se increver acessando o nosso site.

Conclusão

Aproveitando a base de conhecimento adquirida na cultura xBase, os desenvolvedores podem migrar suas aplicações para uma arquitetura mais robusta, e substituir suas bases de dados por servidores mais poderosos. Esses, por sua vez, ampliam o poder de distribuição de dados e incrementam a segurança das bases de dados em redes de qualquer porte.

No próximo artigo, detalharemos a instalação de um servidor Interbase, que além de estar aderindo à causa do código aberto, consome poucos recursos de hardware, comparando-se aos outros concorrentes na categoria, e que é reconhecido como um servidor de banco completo e sofisticado.

Código 1


#ifdef RDD
    logicaSQL()
#else
    logicaDBF()
#endif

ou

#ifdef RDD
    cSql :=
    update movto set movto.valor = movto.quant * produto.unitario from               produto where movto.codigo = produto.codigo and movto.grupo = 10
    ExecSql (cSql) ALIAS
    SQL
#else
    SELE Movto
    SET ORDER TO 1
    DbGoTop()
    WHILE .NOT. EOF()
        IF Movto->Grupo = 10
            SELE Produto
        SET ORDER TO 1
        DbSeek(STR(Produto->Codigo))
        IF FOUND()
            SELE Movto
            RLOCK()
            Movto->Valor := Produto->Unitario * Movto->Quant
            DbCommit()
            UNLOCK
        ELSE
            Movto-Valor  := 0
            ENDIF
        ENDIF
        DbSkip()
ENDDO
 #endif

Obs.: O comando SQL pode ter alguma diferença de sintaxe conforme o RDBMS.

 

A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade
Anuncie na Revista do Linux