Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Έστω ότι έχουμε μια υποτιθέμενη web εφαρμογή στην οποία παρουσιάζουμε ας πούμε συνταγές μαγειρικής και εμφανίζουμε στους χρήστες λίστες με τις πιο πρόσφατες ή τις πιο δημοφιλείς ανάμεσα από χιλιάδες συνταγές.

Προφανώς τις 2 τελευταίες λίστες θα τις κρατάμε στην cache ώστε να μην χρειάζεται να τις τραβάμε απ' τη βάση κάθε φορά.

Η απορία μου είναι, με τις μεμονωμένες συνταγές τι γίνεται;

Σίγουρα κάποιες απ' αυτές θα είναι αρκετά δημοφιλείς και δεδομένου ότι οι χρήστες θα τις ζητάν ξανά και ξανά, έχει νόημα να τις κρατάμε στην cache, αντί να τις ψάχνουμε στη βάση κάθε φορά; Αλλά τελικά θα κάνουμε τι; Θα κρατάμε και κάθε μεμονωμένη συνταγή στην cache; Έτσι θα καταλήξουμε να έχουμε ολόκληρο το site cache-αρισμένο και μάλιστα θα έχουμε μηδενικά db reads (ανάλογα και τον τρόπο που ανανεώνουμε την cache).

Μπορεί να είναι ρεαλιστικό αυτό; Χρησιμοποιείται γενικά; Φαντάζομαι απαιτεί τεράστια αποθέματα μνήμης.

Ή μήπως ένα db read, κάθε φορά που κάποιος θέλει να δει μια συγκεκριμένη συνταγή δεν είναι δα και τόσο «κακό». Απ' την άλλη αν δεν το κάνουμε, κάθε «απλός» επισκέπτης της σελίδας θα ακουμπάει την βάση και μάλιστα συχνά, πράγμα που επίσης δεν ακούγεται καλό.

Σκέφτηκα και το σενάριο μήπως να ψάχνουμε τη μεμονωμένη συνταγή στις λίστες που έχουμε cache-αρισμένες έτσι κι αλλιώς, αλλά αυτό αυξάνει την πολυπλοκότητα και δεν ξέρω αν τελικά συμφέρει.

Σχόλια, παρατηρήσεις, θετικά, αρνητικά; Τι παίζει στον πραγματικό κόσμο;

Δημοσ.

αν δεν αλλάζουν τα δεδομένα συχνά τοτε καλύτερα να τα κάνεις cache όλα και να φροντίσεις κάθε φορά που κάτι ανανεώνετε/δημιουργείται/διαγράφετε να ενημερώνεις και το cache σου.

 

Παίζουν ρόλο βέβαια:

1)τι είδους cache χρησιμοποιείς,

2) τι resources έχει ο σέρβερ σου

3) πόσο όγκο δεδομένων θές να σερβίρεις

 

Δές το Redis γενικά, είναι πολύ καλό αλλά θέλει ραμ όσο μεγαλώνει ο όγκος των δεδομένων.

Δημοσ.

Ευχαριστώ για την απάντηση.

Δηλαδή είναι συχνό, να κασάρονται τα πάντα;

 

Επίσης τα αποτελέσματα αναζητήσεων, κασάρονται και αυτά; Για παράδειγμα ας πούμε το github πιθανόν να κρατάει στην cache τα αποτελέσματα αναζητήσεων των χρηστών και να τα σερβίρει απ' την μνήμη όταν αναζητήσεις επαναλαμβάνονται με ίδια keywords;

Δημοσ.

Για παράδειγμα ας πούμε το github πιθανόν να κρατάει στην cache τα αποτελέσματα αναζητήσεων των χρηστών και να τα σερβίρει απ' την μνήμη όταν αναζητήσεις επαναλαμβάνονται με ίδια keywords;

Διάβασε αυτό. Είναι λίγο μεγάλο βέβαια γιατί μιλάει για όλη την υποδομή και όχι μόνο για το caching αλλά δεν σε πειράζει. Θα πάρεις και μια ιδέα πώς δένουν όλα μεταξύ τους.

  • Like 2
Δημοσ.

Διάβασε αυτό. Είναι λίγο μεγάλο βέβαια γιατί μιλάει για όλη την υποδομή και όχι μόνο για το caching αλλά δεν σε πειράζει. Θα πάρεις και μια ιδέα πώς δένουν όλα μεταξύ τους.

Ενδιαφέρον. Κ εγω αν και ήμουν του memcached διαβάζοντας το post του nikos_90 βρήκα ένα καλο αρθρο για το redis εδω

Δημοσ.

Δεν υπάρχει τυφλοσούρτης γι αυτά τα πράγματα, ή "σωστή λύση" για κάθε περίπτωση βρίσκεται με δεδομένα τα ιδιαίτερα στοιχεία της εφαρμογής και των υποδομών, το ποιες τεχνολογίες ξέρεις για caching και πόσο καλά, σίγουρα βαθμό εμπειρίας (πρώτη φορά αποκλείεται εντελώς να κάνεις το "βέλτιστο") κλπ. Καθόλου περίεργο που αναρωτιέσαι.

 

Δεν έχει καμία σχέση το τι θα ήταν οκ για σελίδα με συνταγές που δεν την ξέρει "κανείς" και το github η to fb κλπ.

 

Σε πολλές περιπτώσεις όταν έχεις πολλή, πολλή κίνηση το "cache τα πάντα" ισχύει, σε βαθμό η "cache" είναι το μοναδικό data store που βλέπει η εφαρμογή. Κι αυτό ακόμα σε πολλαπλά layers και με partitioning (aka sharding). Χαμός.

 

 

Αν σ ενδιαφέρει να μάθεις και δεν έχεις πρόσβαση σε έμπειρο mentor να σου εξηγεί τι και πως και γιατί, θα πρότεινα

 

1. Κάνε μια λίστα με μερικές τεχνολογίες που θα μπορούσαν να βοηθήσουν (όχι "όλες" γιατί είναι πολλές και θα χάσεις τη μπάλα)

2. Κάνε ένα setup το οποίο θα μπορείς να χρησιμοποιήσεις ως σύστημα-πειραματόζωο, αυτό περιλαμβάνει και αυτοματοποιημένο load test με το οποίο θα βάζεις φορτίο Χ τύπου Υ και θα παίρνεις πίσω νούμερα

3. For each στη λίστα σου άρχισε να ψαχνεις τι και πως. Εδώ επειδή έχεις ήδη τα δεδομένα του φορτίου και της τεχνολογίας θα μπορείς να κάνεις πολύ πιο συγκεκριμένες ερωτήσεις για κάποια πράγματα οπότε θα πάρεις και πολύ πιο χρήσιμες απαντήσεις

4. Repeat κλπ

  • Like 1
Δημοσ.

Ευχαριστώ και για τις υπόλοιπες απαντήσεις.

 

πρώτη φορά αποκλείεται εντελώς να κάνεις το "βέλτιστο"


Δηλαδή υπάρχει βέλτιστο εδώ; (πρακτικά, όχι θεωρητικά)
Ή είναι πάλι ανάλογα την εφαρμογή; (σε άλλες ναι, σε άλλες όχι ανάλογα την πολυπλοκότητα τους)

Δημοσ.

Είναι ανάλογα με πάρα πολλές παραμέτρους, γι αυτό το έβαλα σε εισαγωγικά. Engineering, έχεις ένα πρόβλημα με 15 παραμέτρους, θεωρείς τις 10 ψιλό σταθερές και βρίσκεις ποια λύση είναι καλή/καλύτερη με τις υπόλοιπες να παίζουν.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...