La Mise En Cache Du Jeu De Résultats
Son plus comme subjective de la question, Le principal objectif de la question est de mettre en Cache java.sql.Jeu de résultats. Mais je sais que c'est pas de mécanisme préféré car il est étroitement associé à la Connexion, et les données peuvent être vidé lorsque la connexion est fermée. Pour résoudre ce problème, je suis en utilisant CachedRowSet. L'instance de CachedRowSet sera mis en cache à l'aide de tiers outil de cache, ce qui m'aidera à réduire db appels.
Extrait de Code de mon application est donnée ci-dessous. La méthode executeQuery(String)
est mis en œuvre dans une classe abstraite dont toutes les sous-classes à utiliser pour exécuter la requête. Il pourrait y avoir à la clientèle sous-classes ainsi l'utilisation de cette méthode pour récupérer des données de notre système.
public final ResultSet executeQuery(String query){
try {
//return data if it is available in cache, else execute and store in cache
CachedRowSet cachedRowSet=getDataFromCache(query);
if(cachedRowSet!=null) {
return cachedRowSet;
}
PreparedStatement statement=getStatment();
ResultSet rs= statement.executeQuery(query);
CachedRowSet cachedRowSet=new CachedRowSetImpl();
cachedRowSet.populate(rs);
cachedData(cachedRowSet);
return cachedRowSet;
} catch (Exception e) {
return null;
}
}
Maintenant, je suis un peu confus avec les points ci-dessous
- Au lieu de l'interface ResultSet, je reviendrai instance de CachedResultSet. Serait-ce exact de remplacement pour jeu de résultats. JAR du pilote,DB classes peuvent être différentes à travers l'environnement du client. Client d'écrire des classes personnalisées et d'attendre d'un jeu de résultats de la classe Abstraite. Serait-ce la cause de tout problème? Quelque chose comme ci-dessous
public class CustomerXX s'étend BaseClass {
public void process(String query){ ResultSet rs = executeQuery(query); //process rs to fetch data }
}
- De risque impliqués dans ce genre d'opération( mise en Cache
CachedRowSet
, de la validité des données) - Performance de la création de
CachedRowSet
- Compatibilité avec tous les
ResultSet
opérations (ResultSet.getString()
, ResultSet.obtenir..()). Si, à tout Conducteur d'attendre/produit différents sous-classe deResultSet
( DirejdbcResultSet
,BaseResultSet
, etc)
J'ai même genre de beaucoup d'autres question est de mon esprit, je suis juste écrit quelques-uns d'entre eux que je me sens valide et a une plus grande priorité.
Pas sûr que ma question est très vague, n'ont assez de clarté de mes besoins.
Les idées, les pensées, les suggestions sont très appréciés, et un grand merci à l'avance
ResultSet
, et CachedRowSet
s'étend/implémente ResultSet
, le client sera heureux d'accepter les CachedRowSet
OriginalL'auteur Satheesh Cheveri | 2012-10-21
Vous devez vous connecter pour publier un commentaire.
La mise en œuvre personnalisée
CachedRowSet
pourrait être douloureux depuis que vous avez à mettre en œuvre toutes les méthodes exposées parResultSet
interface.Je vous recommande de ne pas mettre en cache sur jdbc, mais aussi au niveau du cache de la valeur des objets sur la couche d'accès aux données à la place.
Par exemple, si vous avez de l'utilisateur table avec l'id, le nom et l'email de colonnes que vous pouvez avoir à la suite de la valeur de l'objet
ensuite, vous pouvez introduire la couche d'accès aux données
par défaut JdbcUserRepository qui charge les données de la base de données.
La mise en cache peut être mis en œuvre à l'aide de modèle de proxy:
La mise en œuvre de la cache est la partie la plus difficile. Vous avez à vous soucier:
Je vous recommande d'utiliser certains solution de mise en cache au lieu de coder votre propre solution.
J'ai trouvé google goyave pour être stable et facile à utiliser.
Oui, mais il n'y a pas implémentations dans le public de l'API Java. L'application que vous utilisez est une partie de la com.soleil.* hiérarchie des paquets qui ne sont pas destinés à une utilisation, sont sujettes à changer dans les futures versions de Java, et ne sont pas pris en charge sur les non-Oracle versions de Java. Il serait préférable d'éviter de l'utiliser.
OriginalL'auteur Mairbek Khadikov