Esse artigo faz parte da revista Clube Delphi edição 2. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML. 

 

Access X Paradox

Qual é o melhor e mais confiável arquivo de dados?

 

Quem trabalha com banco de dados,sabe que as primeiras e principais, preocupações no desenvolvimento de um projeto são segurança e velocidade. Em determinados sistemas, este assunto é levado tão a sério que boa parte do tempo total de análise e de desenvolvimento é gasto pensando neste aspecto. Sempre que possível, estarei aqui dando dicas e tentando economizar seu tempo na hora de levantar dados para implementação de seu sistema. Como você já ter percebido no título, o assunto em questão é uma comparação feita entre talvez os dois banco de dados não cliente-servidores mais utilizados com o Delphi: o PARADOX e o MS ACCESS. Foram testes de complexidade simples, na qual medimos o desempenho e segurança de ambos ao serem utilizados através do Delphi (com BDE). Em breve testaremos o acesso a banco de dados sem BDE (via ADO) e publicaremos uma matéria sobre o assunto.

O primeiro passo realizado foi definir a estrutura das tabelas e preenchê-las com registros. A estrutura criada foi um campo numérico, para servir de chave primária, quatro campos string, de tamanho 50, e quatro campos numéricos. Após criarmos as tabelas no Paradox e no Access, o objetivo passou a ser o preenchimento das tabelas com uma quantidade razoável de registros. A segurança começou a ser analisado a partir daí. A quantidade de registros que chegamos foi 470.000, concluídos a partir de uma rotina geradora de valores aleatórios. Durante a inclusão, demos boot no computador algumas vezes, para ver como elas se comportariam. Com paradox, o resultado foi previsível: apresentou vários problemas de corrupção de índices. Já com o ACCESS, a história não foi a mesma: ao voltar do boot, simplesmente o arquivo não era mais reconhecido como um arquivo ACESS. Refizemos todo o processo e o problema repetiu, até que decidimos realizar a inclusão na tabela dentro do próprio ACCESS. Só então ele funcionou.

Outra questão foi sobre compôs auto-incrementáveis: no Paradox, o campo chave foi criado como autoincrement e várias vezes durante os testes, o campo se perdia, oferecendo o mesmo valor, e gerando o erro “key violation”. Só conseguimos trabalhar corretamente depois de mudar a chave primária para long interger, e incrementar via código.

Com as tabelas preenchidas, vieram os problemas: no paradox, foram inúmeros. Várias corrupções de índice, inclusive um caso curiosos, e de muito perigo: em certo momento, a tabela perdeu a sua ordenação pelo campo código, apesar de este ser o campo chave. Ao tentarmos reindexá-lo, o database desktop simplesmente exibia a mensagem: “table is full.”Então,deletemos o arquivo de índice e o contruímos novamente.Desta vez, ganhamos a mensagem:’’Index File or Header is Corrupt’’. Após isto a tabela ficou inutilizada, obrigando-nos a perder todos os dados e executar toda a operação novamente.O ACCESS não apresentou problemas.

A conclusão dos testea foi razoável: na média, o arquivo PARADOX mostrou maior robustez.

Estes testes foram meramente ilustrativos, e com eles, não quero desestimular o uso do Pradox, mas dar apenas uma idéia para quem está definindo qual tipo de tabela iráusar em seus sistemas,já que as lendas e boatos são enormes em torno deste assunto.Gostaria de enfatizar que se você tiver a possibilidade de usar um banco de dados cliente-servidos, está será, sem dúvida a melhor escolha.

Os testes foram realizados em um Pentium em 133, 32mb RAM, HD 2.5 gb(1.6 gb livres), com Delphi 4, Access 97 e paradox 7. Abaixo segue uma tabela resumida da média alcançada em alguns dos testes. Críticas e susgestões sobre está matéria podem ser enviadas para admin@clubedelphi.com.br

 

Teste

Paradox

Access

Tamanho do arquivo (470.000 registros)

103 mb

108 mb

Abrir objeto Table (Table1.open)

2 segs

5 segs

Pesquisa na chave (Table1.Findkey)

(-)1 seg

(-1) Seg

Filtro na chave primária, selecionando 100.000 registros

9 segs

1:18 min

Ir para o último registro do filtro acima

2:46 min

5:51 min

Abrir Query, selecionando todos os registros

3 segs

1 Seg

Filtrar 100.000 registros usando Query(chave primária)

13 segs

2 segs

Ir para o último registro com a Query acima

9 segs

29 segs

Selecionar o registro chave 250.000

3 segs

7 segs

Filtrar por string (operador Like com '%' no final)

1:17 min

35 segs

Filtrar por string (operador Like com '%' no início e fim)

1:25

52 segs