Question

N'a jamais utilisé un cache comme celui-ci auparavant. Le problème est que je veux charger plus de 500 000 enregistrements dans une base de données et en sélectionner / filtrer rapidement.

Je songe à utiliser un cache et découvre au préalable EHCache et OSCache , des opinions?

Était-ce utile?

La solution

Ce sont deux projets plutôt solides. Si vous avez des besoins de base en cache, l’un ou l’autre fonctionnera probablement aussi bien que l’autre.

Si vous le souhaitez, vous pouvez également envisager de filtrer une requête dans une base de données. Souvent, l'utilisation d'une requête optimisée qui renvoie un ensemble de résultats plus petit vous donnera de meilleures performances que de charger 500 000 lignes en mémoire puis de les filtrer.

Autres conseils

À en juger par leur page des versions , OSCache n’a pas été mis à jour de manière active depuis 2007. Cette n'est pas une bonne chose. EhCache, en revanche, est en développement constant. Pour cette seule raison, je choisirais EhCache.

Edit Nov 2013: OSCache, comme le reste d’OpenSymphony, est mort.

J'ai utilisé JCS ( http://jakarta.apache.org/jcs/ ) et cela semble solide et facile à utiliser par programmation.

Cela dépend en quelque sorte de vos besoins. Si vous travaillez en mémoire sur une seule machine, ehcache fonctionnera parfaitement, si vous disposez de suffisamment de RAM ou d’un disque dur assez rapide pour que le débordement ne provoque pas de pagination / disque du disque. si vous vous rendez compte que vous avez besoin d'évolutivité, même si cette opération particulière se passe souvent, vous voudrez probablement faire du clustering. JGroups / TreeCache de JBoss le supporte, tout comme EHcache (je pense), et je sais que cela fonctionne définitivement si vous utilisez Ehcache avec de la terre cuite, une intégration très simple. Cette réponse ne concerne pas directement les mérites d'EHcache et d'OSCache. La réponse est donc la suivante: EHcache semble avoir la plus grande inertie (auparavant le développement actif bien connu par défaut, y compris un nouveau serveur de cache), et OSCache semblait (au moins à un moment donné) pour avoir un peu plus de fonctionnalités, mais je pense qu'avec les options mentionnées ci-dessus, ces avantages sont discutables / remplacés. Ah, l’autre chose que j’ai oublié de mentionner est que le caractère transactionnel des données est important et que vos exigences permettront d’affiner la liste des choix valables.

Choisissez un cache conforme à JSR 107 qui facilitera votre tâche lorsque vous souhaitez migrer d’une mise en œuvre à l’autre. Ehcache est la solution de cache Java la plus populaire et la plus utilisée. Nous utilisons beaucoup Ehcache et cela fonctionne pour nous.

Les autres réponses traitent des avantages / inconvénients des caches; mais je me demande si vous bénéficiez réellement de la cache. Vous ne savez pas exactement ce que vous envisagez de faire ici et pourquoi un cache serait bénéfique: si vous avez les données à votre disposition, accédez-y simplement. Le cache permet uniquement de réutiliser des éléments entre des tâches par ailleurs indépendantes. Si c'est ce que vous faites, oui, la mise en cache peut aider. Mais s’il s’agit d’une grosse tâche pouvant emporter son ensemble de données, la mise en cache n’ajouterait aucune valeur.

Quoi qu'il en soit, je vous recommande de les utiliser avec les modules Spring. Le cache peut être transparent pour l'application et les implémentations de cache sont très faciles à permuter. En plus d’OSCache et d’EHCache, les modules Spring prennent également en charge Gigaspaces et le cache JBoss.

Quant aux comparaisons .... OSCache est plus facile à configurer EHCache a plus d'options de configuration

Ils sont solides, ils prennent tous deux en charge la mise en cache, les deux fonctionnent avec Terracotta, prennent en charge la mise en cache en mémoire et la mise en cache sur le disque.

J'ai utilisé oscache sur plusieurs projets de ressort avec des modules de ressort, en utilisant la configuration aop.

Récemment, j'ai cherché à utiliser les modules oscache + spring sur un projet Spring 3.x, mais la mise en cache Spring-modules basée sur des annotations n'est pas prise en charge (même par le paramètre fork).

J'ai récemment découvert ce projet -

http://code.google.com/p/ehcache-spring- annotations /

Qui prend en charge Spring 3.x avec la mise en cache déclarative basée sur des annotations utilisant ehcache.

J'utilise principalement EhCache, car il était auparavant le fournisseur de cache par défaut pour Hibernate. Une liste de solutions de mise en cache est disponible sur Java-Source.net .

J'avais un lien qui comparait les solutions de mise en cache principales. Si je le trouve, je mettrai à jour cette réponse.

OSCache est à peu près mort car il a été abandonné il y a quelques années. Vous pouvez jeter un coup d'oeil à Cacheonix, il a été activement développé et nous venons de publier la v.2.2.2 avec la prise en charge de la mise en cache dans la couche Web. Je suis un committer afin que vous puissiez contacter si vous avez des questions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top