Techniques d’optimisation des interactions avec le SGBDR

En complément du mécanisme de cache, la couche de persistance doit assurer l’optimisation des interactions avec la base relationnelle. A cet effet, plusieurs techniques peuvent être

mises en œuvre pour réduire le nombre et la complexité des accès au support de persistance.

 

Techniques d’optimisation pour la lecture et le requêtage des objets :

 

La lecture d’un objet, si elle peut sembler simple à première vue, est en réalité un processus complexe qui nécessite la prise en compte de divers aspects. En effet, un objet peut

comporter des attributs simples (primitives du langage), mais aussi des objets dépendants, et des références vers d’autres objets avec lesquels il entretient des relations d’association,

et qui eux-mêmes peuvent référencer d’autres objets. En d’autres termes, l’objet de départ n’est que la partie visible de l’iceberg

 

iceberg

 

L'objet de départ constitue le sommet d’un graphe constitué de tous les objets qui sont accessibles directement ou indirectement à travers lui, par navigation de références.

 

Pour optimiser le processus de chargement du graphe objet en mémoire, il est important de déterminer quels sont les objets qu’il est primordial de charger en mémoire, et quels sont ceux qu’il est superflu de charger. La décision de charger tel ou tel objet, ou de charger les objets jusqu’à une « profondeur » donnée, doit pouvoir être contrôlée en fonction du contexte applicatif et de la performance recherchée. Il existe également plusieurs techniques d’optimisation qui peuvent être mises en œuvre pour optimiser les accès à la base nécessaires au chargement des objets.

 

Dans le cas le plus général, on peut envisager deux approches simples :


Une question? Posez-la ici

 

- une première approche naïve consiste à charger tous les objets de façon unitaire,

 

au fur et à mesure des accès à ces objets par l’application par navigation de références. Cette approche se révèle coûteuse en performances : un accès à la base doit être affectué à chaque fois que l’application accède pour la première fois à l’un des objets du graphe.

 

- une seconde approche toute aussi naïve consiste à charger systématiquement

l’ensemble du graphe objet.

 

Les accès à la base sont effectués en bloc à la lecture del’objet « racine », et la navigation ultérieure à travers le graphe ne nécessite aucun appel supplémentaire. Cependant, le temps de chargement du graphe objet peut être très long (dans le cas de graphes complexes). De plus, l’application n’accède en général qu’à un sous-ensemble du graphe objet complet, et la lecture des objets non utilisés entraîne donc un gaspillage de ressources (en termes de temps d’accès et d’occupation mémoire).

 

Il est donc important que la couche de persistance fournisse à l’application le moyen d’exercer un contrôle fin sur le chargement des objets. En particulier, il est souhaitable que l’application puisse spécifier des règles particulières pour le chargement des objets qui correspondent à des scénarios pré-établis

 

Besoin d'aide? Remplissez ce petit formulaire, je reviendrai vers vous dès que possible :