quarta-feira, 2 de maio de 2007

Até que ponto a flexibilidade é boa?

Atualmente estou com um projeto que "herdei" assim que entrei na empresa. O projeto tem algumas coisinhas bacaninhas, uma delas é um wizard onde o usuário monta as consultas no banco de dados, fazendo assim com que tenha uma grande flexibilidade a aplicação, porque seu uso basicamente consiste em consultar informações "coletadas".
Esta flexibilidade faz com que cada setor que comece a usar a aplicação, tenha a possibilidade de suprir suas necessidades criando as consultas que satisfazem suas necessidades diárias de informações. Porém, nem tudo são flores na vida de Joseph Klimber.... =)
Atualmente estamos com um sério problema que é a alta carga de processamento e alto "I/O Wait" no servidor. Isto é ocasionado pela fragmentação do banco de dados, mas principalmente por queries mal feitas. Porque? Porque estas queries são geradas por um wizard, e normalmente as queries não retornam menos de 10mil registros, então, juntando estas queries com a fragmentação da base, nos temos um alto I/O.
Como eu sou um cara eficaz (eficiente ou eficaz? essa é pro pessoal da wise), peguei as queries do sistema e tentei dar um trato, "tunnando" o que dava, porém cheguei na parte das queries pesadas do banco de dados, que eram aquelas consultas. Então me deparei com o problema que é o seguinte, como vou "tunnar" uma query que muda a toda hora? E mesmo que consiga estas principais, como ficarão as outras novas assim que o suporte acabar!?
Este foi um exemplo para que eu pudesse chegar ao ponto que queria, que é: Até onde flexibilidade realmente ajuda?
Deixar o usuário fazer o que quizer, ou deixar a aplicação "redondinha"? Por enquanto ainda acho que as duas coisas são inversamente proporcionais.
O que acha você?

6 comentários:

Erko Bridee disse...

realmente flexibilidade tem um custo para isso, mas quanto a flexibilidade acredito que dependa muito da caracteristica do sistema, caso não tenha como prever as possíveis utilizações ou necessidades... ai infelizmente o melhor caminho é uma aplicação mais flexivel, porem a flexibilidade demanda de mais recurso de hardware para aguentar ( vai lá saber o que passa pela mente de um usuário )

Clovis T. disse...

Você é um cara eficaz se consegue finalizar a sua tarefa como deveria.
Você é um cara eficiente se faz a sua tarefa no menor tempo com menos recursos. ;)

Mas sobre a sua questão, infelizmente acho que AS MAQUINAS (e os que programam as maquinas) trabalham para satisfazer o SER HUMANO! Hahhaha!!
Logo, a flexibilidade vai sempre ser a escolha de quem toma as decisões. Se não for, nós, programadores das maquinas, estaremos sempre fazendo as queries "flexíveis" num tempo bem maior, com um desgaste maior de ambas as partes.
Não parece haver ainda uma solução ideal para este embate!

Daniel Lima disse...

Texto para refletir.
Realmente deixar usuário tomar decisões em certas "aplicações" é como dar tiro no escuro... certamente vai dar pau.

Tetsuo disse...

Ora, a flexibilidade é boa se satisfaz uma necessidade do negócio.

No seu caso, as queries provavelmente são necessárias, e a agilidade na geração e alteração dos relatórios também.

O que pode ser feito é uma melhoria da infraestrutura, de modo a suportar o processamento. Rotinas periódicas de otimização do banco, hardware mais poderoso, talvez um snapshot da base, para consultas que não precisem ser on-line (podem ser em cima dos dados do dia anterior, por exemplo), etc.

Devo confessar que também sou meio paranóico com performance às vezes, mas esse negócio de 'se quer algo bem feito, faça você mesmo' pode te matar de stress algum dia :)

Unknown disse...

É tetsuo, nem sempre é possível ser ter o melhor dos dois mundos.
Realmente, muito é culpa da infra-estrutura, temos uma maquininha (fraquinha mesmo) que tem tudo rodando nela, desde o servidor de aplicação, até o banco de dados =) (Por favor não me atire na fogueira, sou inocente!)
Realmente o cliente, apesar de ser bem grandinho, já faz mais de 6 meses que está enrolando para trocar o servidor, desde quando lhe foi falado que devido ao uso, e a grande massa de dados, a máquina iria abrir as pernas... não deu outra.
Por isso que eu disse que estou enfrentando o dilema de Performance X Flexibilidade. E a conclusão que chego é que realmente são inversamente proporcionais, ou seja, mais flexibilidade mais hardware, ao menos para este caso esta regra se aplica.

Algumas das táticas que você sugeriu foram levantadas para o cliente, estão em negociação essas coisas burocráticas. Queria saber de você o que você quiz dizer com: "rotinas periodicas de otimização do banco", o qeu vem a ser isso pra vc?

Abraços!

ps: seu blog está nos meus feeds, vou adiocioná-lo aqui na minha lista tbm. ;)

Anônimo disse...

Se você precisa de ajuda você sabe onde encontrar.
Se voce precisa de conhecimento você também sabe.
Agora tem uma coisa que nasce com você e a solução deste pequeno problemas deixado por mim para aquele que fosse ser o senhor deste código é a imaginação.
Use o seu conhecimento e ajuda mas tudo sem usar a criatividade talvez te leve a ser um especialista JEE e não uma pessoa melhor.