Question

Comment puis-je choisir CacheConcurrencyStrategy à utiliser?

  • NonstrictReadWriteCache,
  • ReadOnlyCache,
  • ReadWriteCache,
  • TransactionalCache.

Je lis https: //www.hibernate. org / hib_docs / v3 / api / org / mise en veille prolongée / cache / CacheConcurrencyStrategy.html , mais n'explique pas assez en détail.

Était-ce utile?

La solution

Le Hibernate documentation fait un très bon travail à les définir:

  

19.2.2. Stratégie: lecture seule

     

Si votre application a besoin de lire, mais   pas modifier, les instances d'une persistante   classe, peut être utilisé une seule cache de lecture.   Ceci est le plus simple et optimale   stratégie performante. Il est même sûr   pour une utilisation dans un cluster.

     

19.2.3. Stratégie: lecture / écriture

     

Si l'application doit mettre à jour   données, un cache de lecture-écriture peut être   approprié. Cette stratégie de cache   ne doit jamais être utilisé si sérialisable   niveau d'isolement de la transaction est   Champs obligatoires. Si le cache est utilisé dans un   environnement JTA, vous devez spécifier la   propriété   hibernate.transaction.manager_lookup_class   et nommer une stratégie pour obtenir   le TransactionManager JTA. En d'autre   environnements, vous devez vous assurer que   la transaction est terminée lorsque   Session.close() ou   Session.disconnect() est appelé. Si vous   utiliser cette stratégie dans un   cluster, vous devez vous assurer que la   la mise en œuvre du cache sous-jacente   supports de verrouillage. Le cache intégré   les fournisseurs ne supportent pas le verrouillage.

     

19.2.4. Stratégie: nonstrict lecture / écriture

     

Si l'application de temps en temps   besoins si elle est de mettre à jour des données (à savoir   extrêmement improbable que deux   transactions essaient de mettre à jour le   même article simultanément), et stricte   l'isolement de la transaction n'est pas nécessaire,   un cache lecture-écriture non stricte pourrait être   approprié. Si le cache est utilisé dans un   environnement JTA, vous devez spécifier   hibernate.transaction.manager_lookup_class.   Dans d'autres environnements, vous devriez   veiller à ce que la transaction est   complété lorsque Session.close() ou   Session.disconnect() est appelé.

     

19.2.5. Stratégie: transactionnelle

     

La stratégie de cache transactionnel   fournit un support pour pleinement   les fournisseurs de cache transactionnels tels que   JBoss TreeCache. Un tel cache ne peut   être utilisé dans un environnement JTA et vous   doit préciser   hibernate.transaction.manager_lookup_class.

En d'autres termes:

  • en lecture seule: Utile pour les données lire fréquemment, mais jamais mis à jour (par exemple données de référence comme pays). C'est simple. Il a les meilleures performances de tous (évidemment).

  • Lecture / écriture: Souhaitable si vos besoins de données mise à jour . Mais il ne fournit pas un href="http://en.wikipedia.org/wiki/Isolation_%28database_systems%29#SERIALIZABLE", fantôme lit peut se produire (vous pouvez voir à la fin d'une transaction de quelque chose qui était pas là au début). Il a plus que les frais généraux en lecture seule.

  • nonstrict lecture / écriture: Sinon, s'il est peu probable deux threads individuels de transaction pourraient mettre à jour le même objet, vous pouvez utiliser la stratégie nonstrict-read-écriture. Il a moins de frais généraux que lecture-écriture. Celui-ci est utile pour les données qui sont rarement mis à jour .

  • transactionnelles: Si vous avez besoin d'un entièrement transactionnel cache. Convient uniquement dans un environnement JTA.

Ainsi, le choix de la bonne stratégie dépend du fait que les données sont mises à jour ou non, la fréquence des mises à jour et le niveau d'isolation requis. Si vous ne savez pas comment répondre à ces questions pour les données que vous souhaitez mettre en cache, peut-être demander un soutien d'un DBA.

Autres conseils

READ_ONLY: Utilisé uniquement pour les entités qui ne changent jamais (exception est levée si une tentative de mettre à jour une telle entité est faite). Il est très simple et performant. Très approprié pour certaines données de référence statique qui ne change pas.

NONSTRICT_READ_WRITE: Cache est mis à jour après une transaction qui a changé les données affectées a été commise. Ainsi, une forte cohérence est pas garantie et il y a une petite fenêtre de temps dans lequel les données périmées peuvent être obtenues à partir du cache. Ce genre de stratégie convient pour les cas d'utilisation qui peuvent tolérer la cohérence éventuelle.

READ_WRITE: Cette stratégie garantit une forte cohérence dont il réalise en utilisant des verrous « soft »: Lorsqu'une entité en cache est mis à jour, un verrouillage logiciel est stocké dans le cache pour cette entité et, ce qui est libéré après la transaction est validée. Toutes les transactions simultanées qui ont accès à des entrées verrouillées souples récupéreront les données correspondantes directement la base de données.

TRANSACTION: modifications du cache sont effectuées dans les transactions XA distribués. Un changement dans une entité en cache est soit validée ou annulée dans les deux bases de données et le cache dans la même transaction XA.

API de lecture Docs est une bonne chose, mais vous devriez aussi lire la documentation (son impressionnante) aussi, cache de second niveau -. stratégies

  1. Transactionnel -. Utilisez cette stratégie pour principalement en lecture des données où il est essentiel d'éviter que des données périmées dans les transactions simultanées, dans les rares cas d'une mise à jour

  2. lecture-écriture -. Encore une fois utiliser cette stratégie pour principalement en lecture des données où il est essentiel d'éviter que des données périmées dans les transactions simultanées, dans les rares cas d'une mise à jour

  3. nonstrict-lecture-écriture - Cette stratégie ne garantit pas de cohérence entre le cache et la base de données. Utilisez cette stratégie si les données changent presque jamais et une faible probabilité de données périmées ne sont pas une préoccupation critique.

  4. Lecture seule - Une stratégie appropriée pour les données concurrency, qui ne change jamais. Utilisez-le pour les données de référence seulement.

Espérons que cela efface le doute!

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