Επανέρχομαι για να περιγράψω καλύτερα το σενάριό μου:
Έχω φέρει κάποια δεδομένα στον client. Όταν ο client τα χρησιμοποιεί, τα κρατάω στη μνήμη. Μεταξύ των sessions τα κρατάω στο δίσκο. Οι μόνοι λόγοι για να βγάλω δεδομένα από τα cache είναι:
- Να έχει πρόβλημα ο client με τη μνήμη του (να μην χωράει όλα τα cachaρισμένα αντικείμενα), οπότε βγάζω περιττά δεδομένα από τη μνήμη (παραμένουν όμως στο δίσκο).
- Κάποιο από τα δεδομένα να είναι invalid, οπότε σε αυτή την περίπτωση το αφαιρώ και από τη μνήμη και από το δίσκο.
Ας εξετάσω το θέμα από πλευράς caching application block (CAB):
Τι expiration policies πρέπει να έχω; Πότε λήγει δηλαδή ένα αντικείμενο του cache; Λήγει μόνο όταν κάτι αλλάξει στη βάση. Και επειδή το να ρωτάμε τη βάση "Πες μου καλή μου, πότε άλλαξε το x αντικείμενο τελευταία φορά" είναι λίγο ακριβό, η ερώτηση αυτή θα γίνεται στις εξής περιπτώσεις:
- Αν ο client ζητήσει το δεδομένο, και έχει περάσει επαρκές χρονικό διάστημα από την ώρα που ρωτήσαμε για τελευταία φορά.
- Αν θέλουμε να προφυλάξουμε τον client από την αναμονή της ερώτησης, ίσως να ρωτάμε από μόνοι μας σε αραιά διαστήματα.
Εκτός από το δεύτερο, που ακολουθεί το μοντέλο του CAB (κάποιος κάθεται από πίσω και ρωτάει μόνος του), το πρώτο δεν ταιριάζει με τον τρόπο που είναι στημένα τα expiration policies (Είναι expiration policy με την ευρύτερη έννοια, αλλά δεν είναι όπως είναι η δομή του CAB).
Συνοψίζοντας λοιπόν, μαζί με το πρώτο post, για να δουλέψει για την περίπτωσή μου το CAB, χρειάζεται να κάνω τα εξής:
- Να επεκτείνω τον cache manager ώστε να μου δίνει με κάποιον τρόπο το μέγεθος των δεδομένων που έχω στη μνήμη, έστω και κατά προσέγγιση. Ίσως παρακολουθώντας κάποιον performance counter, ίσως βρίσκοντας κάποια πατένα για τα συγκεκριμένα δεδομένα που παίζω (datasets).
- Να επεκτείνω τον cache manager ώστε να ελέγχει για invalid δεδομένα πριν τα επιστρέψει με την απλή διαδικασία: Ρωτάω τη βάση αν άλλαξε (αν χρειάζεται να ρωτήσω) και αν άλλαξε ζητάω να πάρω φρέσκα δεδομένα.
Αυτά τα posts στην ουσία τα γράφω για να βάλω σε μια σειρά τις σκέψεις μου, μήπως και βγάλω άκρη. Αλλά μια που τα διαβάζεις κι εσύ, θα εκτιμούσα οποιοδήποτε σχόλιο... Απάντησέ μου για παράδειγμα στην ερώτηση: "Είναι τόσο ασυνήθιστο το σενάριο που περιγράφω;". Περιέργως πως, όλα μέσα στο CAB έχουν σκεφτεί και docuμεντάρει για να γίνονται extend, τον cache manager όμως όχι και τόσο...
Χρήστος Γεωργακόπουλος