Melhoramento de performance utilizando cache

17 respostas
M

Boa noite.
Quando eu falo em cache, pensem em paginas em cache, ao estilo cache do google e muitos outros sites.
Estou começei esse semestre o tcc e tenho que definir o assunto, minha dupla cogitou a ídeia de falar sobre cache, eu gostei, pesquisei e achei muito interessante porém tem pouco material de apoio e livros em portugues eu acho que nao existem.
Como foi da minha dupla a ídeia pra ele está mais madura, mas para mim ainda surgem algumas duvidas.
A ídeia é basicamente falar sobre performance em cache e seus beneficios e criar uma aplicação em banco de dados e uma em cache(?),
Estou precisando de ajuda sobre esse tema, alguem tem experiência nesse assunto?
podem começar respondendo a simples pergunta:
O que diferencia um armazenamento em cache e sem cache( nao quero beneficios e sim a diferença estrutural).

17 Respostas

rogelgarcia

O que vc chama de em cahe? e sem cache?

M

A ídeia é a seguinte … em vez de acessar banco de dados(mysql por ex) seria criado arquivos cache em html dos conteudo sem a necessidade de fazer requisiçlões em um banco, seria usado outra ferramenta para acessar esses arquivos( tipo um codigo otimizado que acessa o hd).

rogelgarcia

Acho que voce pode se beneficiar do Hibernate Search e Apache lucene

Esses são engines pra fazer pesquisa de dados indexados… sem acessar o banco…

Voce pede por exemplo a string… “padarias” e ele retorna tudo que tem padaria

No seu caso acho que vai mais além… pois voce quer fazer cache das páginas renderizadas com os dados juntos…

É bastante interessante, inclusive, estava pensando em uma solução desse tipo para melhorar a performance do framework que desenvolvo…

Na minha ideia … eu iria salvar a página renderizada em HTML mesmo e quando houvesse nova requisição eu entregaria o HTML ao invés de reprocessar a página… O segredo disso é… quando a página em cache é válida para ser entregue… e quando nao é…
E outro problema, voce teria várias páginas em cache para vários dados… e se o dado não fosse acessado novamente, e se ele fosse modificado?

Não sei se é por esse caminho a sua monografia…

M

rogelgarcia:
Acho que voce pode se beneficiar do Hibernate Search e Apache lucene

Esses são engines pra fazer pesquisa de dados indexados… sem acessar o banco…

Voce pede por exemplo a string… “padarias” e ele retorna tudo que tem padaria

No seu caso acho que vai mais além… pois voce quer fazer cache das páginas renderizadas com os dados juntos…

É bastante interessante, inclusive, estava pensando em uma solução desse tipo para melhorar a performance do framework que desenvolvo…

Na minha ideia … eu iria salvar a página renderizada em HTML mesmo e quando houvesse nova requisição eu entregaria o HTML ao invés de reprocessar a página… O segredo disso é… quando a página em cache é válida para ser entregue… e quando nao é…
E outro problema, voce teria várias páginas em cache para vários dados… e se o dado não fosse acessado novamente, e se ele fosse modificado?

Não sei se é por esse caminho a sua monografia…

Este é sim o assunto quanto ao uso do cache que estamos pensando para o tcc, essa sua ídeia é um exemplo do uso. Porém acho que na nossa aplicação usaremos php para desenvolver alguma ferramenta para mostrar como exemplo o uso de cache no tcc e não java, e nao pensamos em usar um framework pq é outra opção e existem varios

rogelgarcia

Sim sim. nao faz sentido utilizarem framework nao…

Só citei o meu porque é uma feature que gostaria de acrescentar nele…

Mas esse cache de HTML renderizado… nao conheço frameworks que façam dessa forma nao, de qualquer maneira…

sergiotaborda

A ídeia é a seguinte … em vez de acessar banco de dados(mysql por ex) seria criado arquivos cache em html dos conteudo sem a necessidade de fazer requisiçlões em um banco, seria usado outra ferramenta para acessar esses arquivos( tipo um codigo otimizado que acessa o hd).

O cache de páginas não faz sentido. O único lugar onde vc poderia usar isso é na home page de um site de e-comerce.
Cache = pouca atualização. Para páginas dinamicas ele não faz sentido.

O que sim faz sentido é ter os dados em cache. ou seja, ter os dados já montados em memoria de forma a não precisar ir no banco.
Aqui existem vários tipos … cache do ORM que evita a conversão de/para objeto a todo o momento. o cache de serviços que mantém em memoria os itens mais procurados ou mais recentemente procurados ( por exemplo um serviço de pesquisa de produtos)

rogelgarcia

Tem uma chance de fazer sentido… que foi o que pensei…

Que os dados seriam misturados de uma forma mais eficiente na página… sem ter que renderizar tudo…

Não fica 100% cache… mas já alivia o processamento da renderizacao da página…

Os dados podem ser carregados por AJAX também… e com isso… o servidor poderia retornar o mesmo HTML sempre por exemplo…

Mas num é tão simples assim tb nao… :smiley:

sergiotaborda

rogelgarcia:
Tem uma chance de fazer sentido… que foi o que pensei…

Que os dados seriam misturados de uma forma mais eficiente na página… sem ter que renderizar tudo…

Isso não é cache da página “à la google”. Isso é cache de dados.
A renderização nunca pode ser cacheda porque é um processo.

Em Swing e imagem em geral onde o espaço de renderização é homogeneo vc pode fazer isso. Apenas certos locais da UI são redesenhados.
Mas em html isso não se aplica, a menos é claro que use AJAX e preencha cada pedaço da ui de forma assincrona, contudo isso não é cache, é apenas um forma inteligente de equilibrar os recursos (nada fica realmente memorizado)

M

sergiotaborda:
rogelgarcia:
Tem uma chance de fazer sentido… que foi o que pensei…

Que os dados seriam misturados de uma forma mais eficiente na página… sem ter que renderizar tudo…

Isso não é cache da página “à la google”. Isso é cache de dados.
A renderização nunca pode ser cacheda porque é um processo.

Em Swing e imagem em geral onde o espaço de renderização é homogeneo vc pode fazer isso. Apenas certos locais da UI são redesenhados.
Mas em html isso não se aplica, a menos é claro que use AJAX e preencha cada pedaço da ui de forma assincrona, contudo isso não é cache, é apenas um forma inteligente de equilibrar os recursos (nada fica realmente memorizado)

Você ta fazendo meu tcc ir pro espaço…
kkkk

rogelgarcia

Em Swing e imagem em geral onde o espaço de renderização é homogeneo vc pode fazer isso. Apenas certos locais da UI são redesenhados.
Mas em html isso não se aplica, a menos é claro que use AJAX e preencha cada pedaço da ui de forma assincrona, contudo isso não é cache, é apenas um forma inteligente de equilibrar os recursos (nada fica realmente memorizado)

Mas se em swing… vc pode renderizar partes da UI

Pq vc nao pode renderizar partes do HTML? … É o mesmo raciocinio… o complicado é saber o que deve ser redesenhado…

Mas de qualquer jeito… nao é a la google mesmo nao…

Acho que a la google nao faz sentido pra um sistema… a nao ser em telas que tenham dados que raramente sao modificados e sao extremamente acessadas… aí pode até ser válido…

M

A ídeia do tcc basicamente o que está explicado nesse post:
http://blog.feliperibeiro.com/2008/12/caching-em-php-com-uma-tecnica-obscura-mas-muito-eficiente.html

Preciso de opiniões, estou no caminho correto? vou achar conteúdo para alimentar meu tcc?
E qual seria o titulo adequado ?

Alexandre_Saudate

É possível, sim, fazer cache de páginas dinâmicas. A chave é tornar apenas os trechos estáticos da página “cacheáveis” , ao invés da página inteira. É possível fazer isso usando o Oracle WebCache e um conjunto de tags chamado JESI (Java Edge Side Includes) (ambos dos quais, aliás, eu já fui instrutor =P ).

[]´s

rogelgarcia

Pra fazer isso que tem no post é de boa (coincidentemente, eu até já tinha lido aquele artigo)

Mas em PHP acaba que tem essas gabiarras… em Java daria pra fazer algo mais elegante…

Não é uma discussao Java X PHP… mas java tem mais recursos… entao dá pra fazer solucoes melhores…

Mas se vc sabe só PHP… vai no PHP…

Esse artigo cai no caso… muito acessado… pouco modificado…

Alexandre_Saudate

A ídeia do tcc basicamente o que está explicado nesse post:
http://blog.feliperibeiro.com/2008/12/caching-em-php-com-uma-tecnica-obscura-mas-muito-eficiente.html

Preciso de opiniões, estou no caminho correto? vou achar conteúdo para alimentar meu tcc?
E qual seria o titulo adequado ?

Huumn… eu não entendí o conteúdo do seu post como um gerador de cache (mesmo porque um cache deve expirar de tempos em tempos), mas sim, como um gerador de conteúdo, o que é um pouco diferente. Mas acho que está no caminho certo, sim.

[]´s

M

rogelgarcia:
Pra fazer isso que tem no post é de boa (coincidentemente, eu até já tinha lido aquele artigo)

Mas em PHP acaba que tem essas gabiarras… em Java daria pra fazer algo mais elegante…

Não é uma discussao Java X PHP… mas java tem mais recursos… entao dá pra fazer solucoes melhores…

Mas se vc sabe só PHP… vai no PHP…

Esse artigo cai no caso… muito acessado… pouco modificado…

Então, faço tcc em dupla na minha faculdade, eu trabalho com java e ele com php, achamos conveniente usar php pois ele ja tem ídeia de como “começar”.
Achei um livro, web caching do o’realy, parece interessante.

F

É só pensar que cache é alguma coisa rápida… e sem cache não é rápido. Exemplo: parte cache = ferrari… parte que não é cache = fusca

Se você tem algo que fica 90% na parte não rápida do sistema, então é hora de pensar em deixar essa parte no cache… um exemplo clássico são as funções in-line da linguagem C/C++ que quando a função é chamada muitas vezes é melhor deixar a mesma in-line…

Ou mesmo alocar um ponteiro void* grande na memória ram e trabalhar em cima dela… pois a memória ram seria a parte ferrari do sistema… e o hard-disk a parte fusca…

O grande lanche é que em C/C++ é possível utilizar a parte velocidade da luz… que seriam os registradores… mas isso quase ninguém usa(pelo menos em sistemas comerciais e não micro-controladores)… eu mesmo só usei 1 vez para fazer um programa de plotagem gráfica e hoje em dia a palavra chave register niguém usa.

De qualquer forma geralmente o conceito de cache é muito amplo… por ordem de velocidade o gargalo seria em: rede, hd, memória ram, memória cache… sendo que muitas vezes entrariam a parte Banco de dados e gargalos de algoritmo(exemplo, gente usando bubleSort implemetado na mão, já vi muitas vezes isso)…

F

Um exemplo legal é a página principal do UOL que é feita em linguagem C … pois se fosse feito em JSP seria inviável para o tamanho de page-views que ela recebe…

Criado 9 de março de 2010
Ultima resposta 10 de mar. de 2010
Respostas 17
Participantes 5