12. Παράρτημα: Σχήμα της βάσης δεδομένων
Μια βάση δεδομένων blunderDB είναι ένα απλό αρχείο SQLite (επέκταση .db). Έτσι, ελλείψει του blunderDB, μπορεί να ανοιχτεί και να επιθεωρηθεί με οποιονδήποτε επεξεργαστή ή περιηγητή αρχείων SQLite.
12.1. Εκδόσεις και μεταβάσεις
Το σχήμα της βάσης δεδομένων είναι εκδοσιοποιημένο. Η τρέχουσα έκδοση του σχήματος είναι 2.14.0· είναι ανεξάρτητη από την έκδοση της εφαρμογής και αυξάνεται μόνο όταν εξελίσσεται η εσωτερική δομή. Η έκδοση του σχήματος μιας ανοιχτής βάσης είναι ορατή στον πίνακα Μεταδεδομένων (εντολή meta).
Σημαντικό
Δημιουργείτε πάντα αντίγραφο ασφαλείας του αρχείου .db σας πριν ανοίξετε μια βάση που δημιουργήθηκε με προγενέστερη έκδοση του blunderDB.
Σημείωση
Από την έκδοση 0.10.0, όλες οι μεταβάσεις σχήματος εκτελούνται αυτόματα κατά το άνοιγμα μιας βάσης δεδομένων. Δεν απαιτείται καμία εντολή χειροκίνητης μετάβασης. Η μετάβαση πραγματοποιείται επιτόπου: μια βάση που έχει μεταβεί σε πρόσφατο σχήμα δεν μπορεί πλέον να ανοιχτεί από παλαιότερες εκδόσεις του blunderDB, εξ ου και η σημασία του προηγούμενου αντιγράφου ασφαλείας.
12.2. Κύριοι πίνακες
Το τρέχον σχήμα διαρθρώνεται γύρω από τους ακόλουθους πίνακες:
Θέσεις και αναλύσεις:
position(οι θέσεις, χωρίς διπλότυπα),analysis(τα σχετικά δεδομένα ανάλυσης) καιcomment(τα σχόλια).Αγώνες: οι
match,game,moveκαιmove_analysisαποθηκεύουν τους εισαγόμενους αγώνες, τις παρτίδες τους, τις κινήσεις τους και την ανάλυση κάθε κίνησης.Συλλογές: οι
collectionκαιcollection_position(πίνακας σύνδεσης) ομαδοποιούν θέσεις που επιλέγονται χειροκίνητα.Τουρνουά: ο
tournamentομαδοποιεί αγώνες σε τουρνουά.Επανάληψη με διαστήματα (Anki): οι
anki_deck,anki_cardκαιanki_review_logδιαχειρίζονται τα πακέτα, τις κάρτες και το αρχείο καταγραφής επαναλήψεων (αλγόριθμος FSRS).Ιστορικό και διάφορα: οι
command_historyκαιsearch_historyδιατηρούν το ιστορικό των εντολών και των αναζητήσεων, οfilter_libraryτη βιβλιοθήκη φίλτρων, και οmetadataτα μεταδεδομένα της βάσης (μεταξύ των οποίων και η έκδοση του σχήματος).
12.3. Αρχές σχεδιασμού
Από το σχήμα 2.0.0, αρκετές επιλογές σχεδιασμού επιταχύνουν την αναζήτηση και μειώνουν το μέγεθος του αρχείου:
Απαλοιφή διπλότυπων θέσεων: κάθε θέση φέρει έναν κατακερματισμό Zobrist και ένα μοναδικό ευρετήριο, έτσι ώστε μια ίδια θέση που συναντάται σε πολλαπλές εισαγωγές να αποθηκεύεται μόνο μία φορά.
Αποκανονικοποιημένες στήλες φιλτραρίσματος: κριτήρια που αναζητούνται συχνά (τύπος απόφασης, ζάρια, διαφορά κούρσας, πούλια εκτός, καθυστερημένα πούλια, σφάλμα κίνησης ή κύβου, πιθανότητες νίκης…) προϋπολογίζονται σε ειδικές στήλες για γρήγορο φιλτράρισμα.
Προφιλτράρισμα με bitboards: στήλες κατοχής και μασκών σημείων επιτρέπουν ένα πολύ γρήγορο ακέραιο προφιλτράρισμα κατά τις αναζητήσεις μοτίβων δομής.
Συμπαγής αποθήκευση: οι θέσεις κωδικοποιούνται με συμπαγή τρόπο και τα δεδομένα ανάλυσης συμπιέζονται (zlib), γεγονός που μειώνει σημαντικά το μέγεθος του αρχείου.
Καταγραφή WAL: η λειτουργία WAL και προσαρμοσμένα PRAGMA βελτιώνουν τις επιδόσεις ανάγνωσης και εγγραφής.