27 Sep 2006

Experiências com banco de dados.

Arquivado em: Uncategorized

Compare Preços no JáCotei:

Cartão de Memória Olympus xD-Picture Card ...
Cartão de Memória Olympus xD-Picture Card ...



DVD Player / Recorder Philips DVDR3455H/78
DVD Player / Recorder Philips DVDR3455H/78




Meu amigo foi incumbido pelo professor de sua cadeira de Banco de Dados (ou algo que o valha) a entrevistar alguém que usasse MySQL profissionalmente, ou um DBA que usasse este banco. Ele me procurou, e acabei enviando um longo e-mail a ele, falando sobre o meu histórico com banco de dados e acerca da escolha pelo MySQL (e não outro produto concorrente).

Gostei do resultado, e por isso resolvi colocá-lo aqui no Blogue. Escrevi a altas horas da noite, o cérebro e os dedos já estavam no piloto automático, e não revisei o texto, enviei-o a meu amigo “as was” (acabo de inventar isso). E é assim mesmo que eu o publico aqui, apenas removendo as referências aos nomes de clientes por uma questão de sigilo profissional.


Fábio, falar sobre dia-a-dia é complicado, porque sou mais programador
que DBA, mas tu podes adaptar o texto como achares melhor.

Meu “background” com banco de dados começa no dBase II+ (versão do dBase II para CMP/80 que continha alguns melhoramentos com relação a cálculos de datas, e alguma outra coisinha que não lembro agora); depois fui para o dBase III, e em seguida conheci o Clipper. Já comecei a trabalhar com o Clipper 5, que incluía uma orientação a objetos meio rudimentar, mas com engenhosidade a gente fazia vetores e blocos de código (um tipo de dado muito interessante, que permitia armazenar numa variável um trecho de código compilado) virarem propriedades e métodos. Naquela época muito pouco se ouvia falar de bancos relacionais, tudo era arquivo DBF, que funcionava na base do SET FILTER e do INDEX ON para filtrar e classificar dados.

Quando a Internet começou a se popularizar no Brasil eu tinha muita cultura acumulada do MS-DOS e do Windows (acho que era o 3.11). Logo, meus primeiros CGIs foram escritos em Clipper, e serviam para exibir um relatório de alguma coisa para os clientes da empresa em que eu trabalhava.

Nessa época havia basicamente duas frentes de desenvolvedores: os renitentes que achavam que nunca deixaria de haver espaço para o Clipper, e os renovadores que reescreviam em VB ou Delphi os seus programas Clipper de antes. Aos poucos o Access começou a ganhar espaço, até porque era raro um PC que não tivesse uma cópia do MS-Office. A tendência natural, então, foi eu começar a usar mais Access para meus projetos, principalmente os menores, pois as hospedagens ofereciam suporte gratuito a ele (o MSDAC, o JET, e outras siglas da Microsoft sempre foram instaladas por padrão no IIS).

Então, nos projetos menores eu usava Access, e para os maiores precisava de um banco de dados que fosse robusto, tivesse bom desempenho, e funcionasse sob Windows. Já tinha ouvido falar muito de “um tal de” Interbase, que vinha junto com o Delphi, e resolvi experimentar. Era perfeito para as soluções da empresa, e por ODBC era fácil de utilizá-lo em páginas ASP. Porém, os hosts comerciais não instalavam Interbase (que depois virou nome comercial, sendo substituído pela iniciativa da comunidade do Open Source chamada Firebird), e era frustrante desenvolver numa plataforma e na hora de publicar ter de fazer adaptações para outra, com bem menos performance e confiabilidade.

Nessa altura dos fatos, não sei precisar bem o ano, MySQL e PostgreSQL já eram bancos de dados famosos, o primeiro por sua leveza e modesta necessidade de recursos de processamento, o segundo por seus recursos avançados comparáveis aos encontrados em produtos caríssimos como Sybase e Oracle. Claro, ambos Open Source, era só compilar e usar.

Analisando os recursos dos dois produtos, a impressão que se tinha era que o PostgreSQL era muito mais banco do que o MySQL: implementava recursos que só agora na versão 5 o MySQL oferece, como integridade referencial, atualizações em cascata, transações, triggers, etc. Porém, sofria de uma deficiência crônica (para o mercado em que eu estava inserido na época): só funcionava no Linux, não tinha port para Windows. Quer dizer, até tinha, para quem se aventurasse a fazer umas gambiarras usando Cygwin, e tivesse hardware de sobra. Isso fez com que aquelas mesmas empresas que ofereciam o Access como banco de dados em seus pacotes de hospedagem passassem a oferecer também MySQL, que por ODBC permitia que as páginas ASP contassem com muito mais performance e flexibilidade. Esse foi, aliás, o fator decisivo para que eu adotasse o MySQL como meu banco de dados favorito, em detrimento do PostgreSQL.

Outro fator que leva os usuários de MySQL a prererirem-no, a despeito de testes de benchmark, que considero piada (o que importa é a satisfação das necessidades “abaixo de pau”), é a facilidade de encontrar, principalmente para quem trabalha com web. Em qualquer lugar vêem-se ofertas de hosts, principalmente em Linux, oferecendo MySQL pré-configurado (a famosa plataforma LAMP). Ainda mais em tempos de MySQL 5, que implementa tudo aquilo que antes só o PostgreSQL e outros bancos caros tinham.

Cabe falar sobre o que é ter performance “abaixo de pau”.

Um dos usos de bancos de dados que fiz recentemente foi no (nome suprimido). A necessidade era de permitir acesso facilitado a determinadas informações das operações realizadas no (nome do produto suprimido), via e-pack (um produto de comunicação de dados da Embratel). Diariamente o e-pack envia um arquivo com cerca dois milhões de linhas (exceto em finais de semana e vésperas de datas assinaladas, esse valor pode ser cinco vezes maior), contendo numa o início de uma operação, e na outra o seu final. Um pequeno script faz a análise destes dados, e combina as duas linhas num único registro, e insere-o no banco de dados.

Qualquer um com um pouco de experiência saberia que o Access não teria como segurar essa barra (talvez o MSDE, mas segundo sei ele tem limitações quanto ao número de registros que pode suportar). As alternativas seriam o Oracle, que tem um custo de operação caríssimo para uma operação que não é “nobre”, ou MySQL, ou PostgreSQL. Como a batalha para a instalação do PostgreSQL fora muito dura da outra vez, e não dispúnhamos de muito hardware (um PIII com 512MB de RAM, HD de 80GB 7200RPM), acabamos instalando o MySQL.

Na primeira tentativa a performance foi meio lenta, porque os índices não estavam corretamente definidos. Limpamos as tabelas, redifinimos os índices com mais cuidado, e agora temos um banco que cresce à razão de um milhão de linhas por dia, plenamente gerenciável no MySQL em hardware modesto. Só tive, na condição de DBA mesmo, que dar um jeitinho numa consulta que totalizava os valores diários, que demorava um tempo inaceitável (do ponto de vista do usuário) para rodar. Então criei uma tabela auxiliar para fazer cache destes resultados (já que os dados só entram, mas não são alterados), e o banco só parou de funcionar uma vez, para instalação de uma nova unidade de disco.

Hoje meu principal foco é otimizar um aplicativo que já teve muitos “padrastos”, lotado de tabelas redundantes. Parece que os analistas anteriores não entenderam o significado de “relacional”. O ciclo básico é: levantar necessidade do usuário; descrever o modelo; criar tabelas; implementar o protótipo e popular o banco; analisar resultados, com vistas a tornar o banco eficiente quanto à otimização de índices e refinamento de queries. Algumas medidas simples, como utilização de INNER JOIN sempre que possível, utilização de campos ENUM quando o conjunto de valores é previamente conhecido, e o extermínio total de SELECT * fazem muita diferença, mas na maior parte dos casos a otimização implica mexer em aspectos não tão óbvios assim.

Bom, brother, não sei mais o que escrever. Desculpa não ter te mandado antes, mas meu dia foi um pé no saco, e também demorei horas pra encerrar esse texto.

Me manda a versão final que quero publicar no blog, acho que vai dar um artigo interessante. :-) Mas vou esperar a versão final, para caso o professor veja meu texto não compare as diferenças.

Abração!

Como meu amigo disse que ia entregar o texto sem alterações para o professor, ei-lo publicado aqui na íntegra.

Textos possivelmente relacionados a este





7 Respostas para “Experiências com banco de dados.”

  1. Flávio Theruo Kaminisse on 27 Sep 2006 at 4:02 pm

    Parabéns Janio,
    Artigo show de bola.
    Já trabalhei com Acces (se é que podemos chamar de banco de dados), Interbase, SQL Server, PostgreSQL e MySQL, e deve ter algum que esqueci :)
    Dentre eles o MySQL é o mais leve, simples e fácil de trabalhar, apesar de ainda estar engatinhando em alguns pontos, em outros ele é super eficiente e segura o tranco.

    Abraços…

    [Reply]

  2. Fabio Centenaro on 27 Sep 2006 at 5:11 pm

    Sempre tem um amigo mala pra inventar moda, né? Mas valeu mesmo, amigão. Ficou muito bom.
    Um grande abraço!

    [Reply]

  3. israel cefrin on 27 Sep 2006 at 9:25 pm

    Grande Janio
    Realmente, na hora de escolher o BD tem que ver o que rola abaixo de pau.
    O MySQL é um banco modesto por um lado, mas ele segura legal o tranco, além do mais sua API é muito fácil de aprender (principalmente com PHP) :D.

    [Reply]

  4. Janio Sarmento on 27 Sep 2006 at 10:40 pm

    Isso é nada perto do que tu já fez por mim, bro. Irmão é pra essas coisas.

    [Reply]

  5. Adriano on 28 Sep 2006 at 8:31 am

    Muito bom…

    Eu já fui um usuário frustado do mysql, contudo, tenho plena certeza de que por minha própria culpa.
    Aprendi sobre banco de dados relacionais no mysql e tive logo no início o privilégio de desenvolver uma grande aplicação que usava esse banco. (Devia ter umas 50 tabelas)
    Pra mim foi muito grande afinal nunca tinha feito nada, resumindo o sistema foi mal planejado e comecei a perder dados (o mysql não trabalhava com transações)

    Mudei para o postgreSQL e com isso fui me aperfeiçoando. Resultado nunca mais tive problema.

    Já ouvi falar que o mysql está muito melhor agora e lendo o que você escreveu da uma enorme vontade de fazer alguns testes só pra conferir.

    Parabéns pelo artigo/relato muito bom…

    [Reply]

  6. Cris Zimermann on 29 Sep 2006 at 1:55 pm

    Ja, esse teu layout tá show! Muito eficaz, parabéns!

    bjsss

    [Reply]

  7. [...] Aqui está um artigo sobre as vantagens do MySQL - coisas que eu falo em todas as aulas, sim, sim. Recomendo a leitura. Como eu também falo (toda-santa-semana) isso não quer dizer que outros bancos não podem ser usados com PHP. [...]

Trackback URI | Comments RSS

Deixe uma resposta