(geeky rant)
Έχει κάτσει εδώ και λίγο καιρό να μελετάω πολύ καλά μια κατανεμημένη εφαρμογή, γιατί πρέπει να της κάνω κάτι καστομιές (custom-ιές). Δυστυχώς δε μπορώ να πω λεπτομέρειες, αλλά πρόκειται για κεντρικό σέρβερ (που τρέχει και το GUI) ο οποίος μιλάει με καμιά δεκαπενταριά κόμβους και μια βάση δεδομένων με πληροφορία της τάξης του ΤΒ (γενικά σε άλλο σέρβερ).
Λοιπόν για μεγάλη μου έκπληξη ανακάλυψα κάπου στα Program Files του κεντρικού κόμβου ένα αρχείο .mdb (MS Access 2000), το οποίο φαίνεται ότι περιέχει ορισμένες ρυθμισούλες για την όλη εφαρμογή. Ουσιαστικά καμιά εικοσιπενταριά ζεύγη
κλειδιού-τιμής(ων). Για παράδειγμα:
{{nodes}, {node1.domain.gr, node2.domain.gr, node3.domain.gr}}
{{user_roles},{admin,executive,guest}}
Πρόκειται δηλαδή για semi-persistent πληροφορίες που το GUI και διάφορα services του κεντρικού κόμβου πρέπει να διαβάζουν/γράφουν πολύ συχνά (ίσως και μερικές δεκάδες φορές για κάθε request) και που δεν είναι πρακτικό να τις έχει στο RDBMS μαζί με το 1ΤΒ των κυρίως δεδομένων.
Προσωπικά όμως αναρωτιέμαι αν ο πρακτικότερος τρόπος να αποθηκεύσεις λιγότερα από 30 ζεύγη κλειδιού-τιμής είναι να ορίσεις σχεδόν ισάριθμες σχέσεις (ας πούμε NODES: node_id as int, node_name as string) στην κάθεμιά από τις οποίες θα αποθηκεύεις το πολύ 5-6 records (στις περισσότερες μόνο 1), κι όλα αυτά σε μια από τις πιο αργές σχεσιακές βάσεις του κόσμου που αντικειμενικά θα ζορίζεται με τις εκατοντάδες ταυτόχρονες αιτήσεις που θα δέχεται (έμμεσα) από τους υπόλοιπους κόμβους. Γιατί αυτό έκαναν τα τυπάκια που έφτιαξαν αυτό το πράγμα.
Οι σχεσιακές βάσεις δεδομένων χρησιμοποιούνται πολύ συχνά σαν μέθοδος αποθήκευσης από Web εφαρμογές και από Desktop εφαρμογές φτιαγμένες με RAD εργαλεία (και τυπικά σε VB, όπου βέβαια η ΒΔ είναι Access. Περιττό να σας πω ότι το GUI της εφαρμογής που ασχολούμαι βρωμάει VB από χιλιόμετρα). Κατά τη γνώμη μου αυτό το πράγμα έχει γενικευτεί τόσο πολύ, που πολλοί προγραμματιστές φαίνεται να έχουν ξεχάσει ότι μια σχεσιακή ΒΔ δεν είναι πάντα η καλύτερη μέθοδος αποθήκευσης. Ούτε από πλευράς επιδόσεων, ούτε από πλευράς προγραμματιστικού φόρτου, ούτε (τελικά) από πλευράς αρχιτεκτονικής κομψότητας.
Στη συγκεκριμένη περίπτωση, έχεις ρε φίλε 25 ζευγαράκια κλειδιού και τιμής. Ε, βάλτα στο Windows Registry. Βάλτα σε μια μη σχεσιακή ΒΔ, όπως η BerkeleyDB. Κάντα serialize με τον πιο πρόχειρο τρόπο και πέτα τα χύμα σε ένα .dat. Ποιος ο λόγος να κάνεις τη ζωή σου δύσκολη; Δηλαδή πραγματικά ρε παιδιά δεν καταλαβαίνω, να κέρδιζε κάτι σε κώδικα, ταχύτητα ή λειτουργικότητα με αυτή την επιλογή ΟΚ, αλλά να το κάνει… από συνήθεια; Σε εφαρμογή με soft real-time constraints που κάνει ένα διάολο λεφτά;
Συμπέρασμα: προγραμματιστές υπάρχουν πολλοί, αλλά προγραμματιστές με στοιχειώδες ταλέντο και αίσθηση του ότι δίνουν εντολές σε ένα πραγματικό μηχάνημα που θέλει μη μηδενικό χρόνο να τις επεξεργαστεί ελάχιστοι.