Pergunta

Nunca usei um cache como esse antes. O problema é que eu quero carregar 500.000 + registros de um banco de dados e fazer alguns wicked de seleção/filtragem rapidamente.

Estou pensando em usar um cache e preliminarmente encontrado Ehcache e Oscache, alguma opinião?

Foi útil?

Solução

Ambos são projetos bastante sólidos. Se você tiver necessidades básicas de armazenamento básico, qualquer um deles provavelmente funcionará tão bem quanto o outro.

Você também pode considerar fazer a filtragem em uma consulta de banco de dados, se for possível. Freqüentemente, o uso de uma consulta sintonizada que retorna um conjunto de resultados menores oferece melhor desempenho do que carregar 500.000 linhas na memória e depois filtrá -las.

Outras dicas

A julgar por eles Página de lançamentos, Oscache não é mantido ativamente desde 2007. Isso não é uma coisa boa. Ehcache, por outro lado, está sob constante desenvolvimento. Por esse motivo, eu escolheria o Ehcache.

Editar novembro de 2013: Oscache, como o resto do OpenSymphony, está morto.

Eu usei JCS (http://jakarta.apache.org/jcs/) e parece sólido e fácil de usar programaticamente.

Depende de suas necessidades. Se você estiver fazendo o trabalho na memória em uma máquina, o ehcache funcionará perfeitamente, supondo que você tenha RAM suficiente ou um disco rígido suficiente o suficiente para que o estouro não cause paginação/quebra de disco. Se você achar que precisa alcançar a escalabilidade, mesmo apesar dessa operação em particular acontecer muito, provavelmente desejará fazer o cluster. O JGroups /Treecache da JBoss suporta isso, o mesmo acontece com o ehcache (eu acho), e eu sei que definitivamente funciona se você usa o ehcache com a Terracotta, que é uma integração muito lisa. Esta resposta não fala diretamente com os méritos de Ehcache e Oscache, então aqui está essa resposta: o ehcache parece ter mais inércia (costumava ser o desenvolvimento ativo padrão, bem conhecido, incluindo um novo servidor de cache), e o Oscache parecia (Pelo menos em um ponto) ter um pouco mais de recursos, mas acho que com as opções mencionadas acima essas vantagens são discutíveis/substituídas. Ah, a outra coisa que esqueci de mencionar é que a transacionalidade dos dados é importante e seus requisitos refinarão a lista de opções válidas.

Escolha um cache que esteja em conformidade com o JSR 107, que facilitará seu trabalho quando você deseja migrar de uma implementação para a outra. Para ser específico na questão, vá para o Ehcache, que é mais popular e amplamente utilizado em solução de cache de java. Estamos usando o Ehcache extensivamente e funciona para nós.

Outras respostas discutem prós/contras para caches; Mas estou me perguntando se você realmente se beneficia do cache. Não está bem claro exatamente o que você planeja fazer aqui e por que um cache seria benéfico: se você tiver os dados definidos no seu uso, basta acessar isso. O cache ajuda apenas a reutilizar as coisas entre tarefas independentes. Se é isso que você está fazendo, sim, o cache pode ajudar. Mas se for uma grande tarefa que pode transportar seu conjunto de dados, o cache não agregaria valor.

De qualquer maneira, recomendo usá -los com módulos de primavera. O cache pode ser transparente para o aplicativo, e as implementações de cache são trivialmente fáceis de trocar. Além de Oscache e Ehcache, os módulos de primavera também suportam gigaspaces e cache jboss.

Quanto às comparações .... o Oscache é mais fácil de configurar o ehcache tem mais opções de configuração

Ambos são sólidos, ambos apoiam o cache espelhado, ambos trabalham com a Terracotta, apoiam o cache na memória e no discos.

Eu usei o OSCACHE em vários projetos de primavera com módulos de primavera, usando a configuração baseada em AOP.

Recentemente, procurei usar módulos OSCACHE + Spring em um projeto Spring 3.x, mas encontrei que o cache baseado em anotações da mídia de primavera não é suportada (mesmo pelo garfo).

Eu descobri recentemente sobre este projeto -

http://code.google.com/p/ehcache-spring-annotações/

Que suporta a primavera 3.x com cache baseado em anotação declarativa usando o ehcache.

Eu uso principalmente o Ehcache porque costumava ser o provedor de cache padrão do Hibernate. Há uma lista de soluções de cache em Java-source.net.

Eu costumava ter um link que comparava as principais soluções de cache. Se eu encontrar, vou atualizar esta resposta.

Oscache está praticamente morto, pois foi abandonado há alguns anos. Você pode dar uma olhada no Cacheonix, ele foi desenvolvido ativamente e acabamos de lançar v.2.2.2 com suporte para cache na camada da web. Eu sou um ator para que você possa entrar em contato se tiver alguma dúvida.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top