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 βελτιώνουν τις επιδόσεις ανάγνωσης και εγγραφής.