Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1ο

Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1ο Τα πραγματικά ξίφη βάσης δεδομένων - παγκόσμιοι - είναι γνωστά από καιρό, αλλά ακόμα λίγοι γνωρίζουν πώς να τα χρησιμοποιούν αποτελεσματικά ή δεν κατέχουν καθόλου αυτό το υπερόπλο.

Εάν χρησιμοποιείτε παγκόσμιους για την επίλυση των προβλημάτων στα οποία είναι πραγματικά καλοί, μπορείτε να επιτύχετε εξαιρετικά αποτελέσματα. Είτε στην παραγωγικότητα είτε στην απλοποίηση της λύσης του προβλήματος (1, 2).

Τα καθολικά είναι ένας ειδικός τρόπος αποθήκευσης και επεξεργασίας δεδομένων, εντελώς διαφορετικός από τους πίνακες στην SQL. Εμφανίστηκαν το 1966 στη γλώσσα ΠΑΡΩΤΙΤΙΔΑ) (εξελικτική ανάπτυξη - Cache ObjectScript, στο εξής COS) στην ιατρική βάση δεδομένων και εξακολουθεί να υπάρχει χρησιμοποιείται ενεργά, και διείσδυσε επίσης σε ορισμένους άλλους τομείς όπου απαιτείται αξιοπιστία και υψηλή απόδοση: χρηματοοικονομικά, εμπορικές συναλλαγές κ.λπ.

Τα καθολικά στα σύγχρονα DBMS υποστηρίζουν συναλλαγές, καταγραφή, αναπαραγωγή και κατάτμηση. Εκείνοι. μπορούν να χρησιμοποιηθούν για την κατασκευή σύγχρονων, αξιόπιστων, κατανεμημένων και γρήγορων συστημάτων.

Οι παγκόσμιοι δεν σας περιορίζουν στο σχεσιακό μοντέλο. Σας δίνουν την ελευθερία να αναπτύξετε δομές δεδομένων που είναι βελτιστοποιημένες για συγκεκριμένες εργασίες. Για πολλές εφαρμογές, η έξυπνη χρήση των παγκόσμιων μπορεί πραγματικά να είναι ένα μυστικό όπλο, παρέχοντας επιδόσεις που οι προγραμματιστές σχεσιακών εφαρμογών μπορούν μόνο να ονειρεύονται.

Τα παγκόσμια ως τρόπος αποθήκευσης δεδομένων μπορούν να χρησιμοποιηθούν σε πολλές σύγχρονες γλώσσες προγραμματισμού, τόσο υψηλού όσο και χαμηλού επιπέδου. Ως εκ τούτου, σε αυτό το άρθρο θα επικεντρωθώ ειδικά στους παγκόσμιους, και όχι στη γλώσσα από την οποία προήλθαν κάποτε.

2. Πώς λειτουργούν οι παγκόσμιοι

Ας καταλάβουμε πρώτα πώς λειτουργούν οι παγκόσμιοι και ποια είναι τα δυνατά τους σημεία. Οι παγκόσμιοι μπορούν να εξεταστούν από διαφορετικές οπτικές γωνίες. Σε αυτό το μέρος του άρθρου θα τα δούμε ως δέντρα. Ή σαν ιεραρχικές αποθήκες δεδομένων.

Για να το θέσω απλά, ένα παγκόσμιο είναι ένας επίμονος πίνακας. Ένας πίνακας που αποθηκεύεται αυτόματα στο δίσκο.
Είναι δύσκολο να φανταστεί κανείς κάτι πιο απλό για την αποθήκευση δεδομένων. Στον κώδικα (στις γλώσσες COS/M) διαφέρει από έναν κανονικό συσχετιστικό πίνακα μόνο στο σύμβολο ^ πριν από το όνομα.

Για να αποθηκεύσετε δεδομένα σε ένα παγκόσμιο, δεν χρειάζεται να μάθετε τη γλώσσα ερωτημάτων SQL· οι εντολές για να εργαστείτε μαζί τους είναι πολύ απλές. Μπορούν να μαθευτούν σε μια ώρα.

Ας ξεκινήσουμε με το πιο απλό παράδειγμα. Δέντρο μονού επιπέδου με 2 κλαδιά. Τα παραδείγματα είναι γραμμένα στο COS.

Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1ο

Set ^a("+7926X") = "John Sidorov"
Set ^a("+7916Y") = "Sergey Smith"



Κατά την εισαγωγή πληροφοριών σε μια καθολική (εντολή Set), συμβαίνουν αυτόματα 3 πράγματα:

  1. Αποθήκευση δεδομένων στο δίσκο.
  2. Ευρετηρίαση. Αυτό που βρίσκεται σε παρένθεση είναι το κλειδί (στην αγγλική λογοτεχνία - "subscript"), και στα δεξιά του ίσου είναι η τιμή ("node value").
  3. Ταξινόμηση. Τα δεδομένα ταξινομούνται κατά κλειδί. Στο μέλλον, κατά τη διέλευση του πίνακα, το πρώτο στοιχείο θα είναι το "Sergey Smith" και το δεύτερο "John Sidorov". Όταν λαμβάνετε μια λίστα χρηστών από το παγκόσμιο, η βάση δεδομένων δεν χάνει χρόνο στην ταξινόμηση. Επιπλέον, μπορείτε να ζητήσετε την έξοδο μιας ταξινομημένης λίστας, ξεκινώντας από οποιοδήποτε κλειδί, ακόμη και ανύπαρκτο (η έξοδος θα ξεκινήσει από το πρώτο πραγματικό κλειδί, το οποίο έρχεται μετά το ανύπαρκτο).

Όλες αυτές οι λειτουργίες γίνονται απίστευτα γρήγορα. Στον οικιακό μου υπολογιστή έπαιρνα τιμές έως και 750 ένθετα/δευτερόλεπτο σε μία μόνο διαδικασία. Σε επεξεργαστές πολλαπλών πυρήνων οι τιμές μπορούν να φτάσουν δεκάδες εκατομμύρια ένθετα/δευτ.

Φυσικά, η ίδια η ταχύτητα εισαγωγής δεν λέει πολλά. Μπορείτε, για παράδειγμα, να γράψετε πολύ γρήγορα πληροφορίες σε αρχεία κειμένου - όπως αυτό φημολογείται Εργασίες επεξεργασίας βίζας. Αλλά στην περίπτωση των παγκόσμιων, έχουμε ως αποτέλεσμα έναν δομημένο ευρετηριασμένο χώρο αποθήκευσης, τον οποίο μπορεί να εργαστεί κανείς εύκολα και γρήγορα στο μέλλον.

Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1ο

  • Η μεγαλύτερη δύναμη των παγκόσμιων είναι η ταχύτητα με την οποία μπορούν να εισαχθούν νέοι κόμβοι.
  • Τα δεδομένα στο παγκόσμιο είναι πάντα ευρετηριασμένα. Η διέλευση τους, τόσο σε ένα επίπεδο όσο και βαθιά μέσα στο δέντρο, είναι πάντα γρήγορη.

Ας προσθέσουμε μερικούς ακόμη κλάδους του δεύτερου και του τρίτου επιπέδου στο παγκόσμιο.

Set ^a("+7926X", "city") = "Moscow"
Set ^a("+7926X", "city", "street") = "Req Square"
Set ^a("+7926X", "age") = 25
Set ^a("+7916Y", "city") = "London"
Set ^a("+7916Y", "city", "street") = "Baker Street"
Set ^a("+7916Y", "age") = 36

Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1ο

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

Όπως μπορείτε να δείτε, οι πληροφορίες μπορούν να αποθηκευτούν τόσο σε κλειδί όσο και σε τιμή. Το συνολικό μήκος κλειδιού (το άθροισμα των μηκών όλων των ευρετηρίων) μπορεί να φτάσει 511 bytes, και τις αξίες 3.6 MB για την προσωρινή μνήμη. Ο αριθμός των επιπέδων στο δέντρο (αριθμός διαστάσεων) είναι 31.

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

Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1ο

Set ^b("a", "b", "c", "d") = 1
Set ^b("a", "b", "c", "e") = 2
Set ^b("a", "b", "f", "g") = 3

Οι κενοί κύκλοι είναι κόμβοι που δεν έχουν εκχωρηθεί τιμή.

Για να κατανοήσουμε καλύτερα τα παγκόσμια, ας τα συγκρίνουμε με άλλα δέντρα: δέντρα κήπου και δέντρα ονομάτων συστήματος αρχείων.

Ας συγκρίνουμε δέντρα σε παγκόσμιους με τις πιο γνωστές σε εμάς ιεραρχικές δομές: με συνηθισμένα δέντρα που αναπτύσσονται σε κήπους και χωράφια, καθώς και με συστήματα αρχείων.

Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1ο

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

Και εδώ είναι η παγκόσμια δομή δεδομένων.

Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1οΔιαφορές:

  1. Εσωτερικοί κόμβοι: Οι πληροφορίες σε ένα καθολικό μπορούν να αποθηκευτούν σε κάθε κόμβο, όχι μόνο στα άκρα των διακλαδώσεων.
  2. Εξωτερικοί κόμβοι: Το καθολικό πρέπει να έχει καθορισμένες τιμές στα άκρα των κλαδιών, ενώ το FS και τα δέντρα κήπου όχι.



Όσον αφορά τους εσωτερικούς κόμβους, μπορούμε να πούμε ότι η δομή του καθολικού είναι ένα υπερσύνολο της δομής των δέντρων ονομάτων σε συστήματα αρχείων και δέντρα κήπου. Εκείνοι. πιο ευέλικτο.

Γενικά το παγκόσμιο είναι διατεταγμένο δέντρο με δυνατότητα αποθήκευσης δεδομένων σε κάθε κόμβο.

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

  1. Η διαγραφή ενός μόνο αρχείου σε έναν κατάλογο θα διαγράψει αυτόματα τον κατάλογο, καθώς και όλους τους υπερκείμενους καταλόγους που περιέχουν μόνο τον έναν κατάλογο που μόλις διαγράφηκε.
  2. Δεν θα χρειαζόταν καταλόγους. Θα υπήρχαν απλώς αρχεία με υποαρχεία και αρχεία χωρίς υποαρχεία. Αν συγκρινόταν με ένα συνηθισμένο δέντρο, τότε κάθε κλαδί θα γινόταν καρπός.

    Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1ο

  3. Ενδέχεται να μην χρειάζονται πράγματα όπως τα αρχεία README.txt. Όλα όσα έπρεπε να ειπωθούν για τα περιεχόμενα του καταλόγου θα μπορούσαν να γραφτούν στο ίδιο το αρχείο καταλόγου. Στον χώρο διαδρομής, το όνομα του αρχείου δεν διακρίνεται από το όνομα του καταλόγου, επομένως ήταν δυνατό να τα βγάλετε πέρα ​​με μόνο αρχεία.
  4. Η ταχύτητα διαγραφής καταλόγων με ένθετους υποκαταλόγους και αρχεία θα αυξανόταν δραματικά. Πολλές φορές στο Habré υπήρξαν άρθρα σχετικά με το πόσο μακρύ και δύσκολο είναι να διαγράψεις εκατομμύρια μικρά αρχεία (1, 2). Ωστόσο, εάν δημιουργήσετε ένα σύστημα ψευδο-αρχείων σε ένα καθολικό, θα χρειαστούν δευτερόλεπτα ή κλάσματα αυτού. Όταν δοκίμασα τη διαγραφή υποδέντρων σε έναν οικιακό υπολογιστή, αφαίρεσε 1-96 εκατομμύρια κόμβους από ένα δέντρο δύο επιπέδων σε έναν σκληρό δίσκο (όχι SSD) σε 341 δευτερόλεπτο. Επιπλέον, μιλάμε για διαγραφή μέρους του δέντρου, και όχι μόνο ολόκληρου του αρχείου με τα καθολικά.

Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1ο
Η αφαίρεση των υποδέντρων είναι ένα άλλο δυνατό σημείο των παγκόσμιων. Δεν χρειάζεται επανάληψη για αυτό. Αυτό συμβαίνει απίστευτα γρήγορα.

Στο δέντρο μας αυτό θα μπορούσε να γίνει με την εντολή Σκοτώστε.

Kill ^a("+7926X")

Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 1ο

Για καλύτερη κατανόηση του ποιες ενέργειες είναι διαθέσιμες σε εμάς σε σχέση με τα παγκόσμια, θα παράσχω έναν σύντομο πίνακα.

Βασικές εντολές και λειτουργίες για εργασία με παγκόσμιους στο COS

σετ
Ορισμός διακλαδώσεων σε έναν κόμβο (αν δεν έχει οριστεί ακόμη) και τις τιμές του κόμβου

πηγαίνω
Αντιγραφή υποδέντρου

Σκοτώστε
Αφαίρεση υποδέντρου

ΖΚιλ
Διαγραφή της τιμής ενός συγκεκριμένου κόμβου. Το υποδέντρο που αναδύεται από τον κόμβο δεν αγγίζεται

$Query
Πλήρης διάσχιση του δέντρου, πηγαίνοντας βαθιά μέσα στο δέντρο

$Παραγγελία
Διασχίζοντας κλάδους ενός συγκεκριμένου κόμβου

$Δεδομένα
Έλεγχος εάν έχει οριστεί κόμβος

$Αύξηση
Ατομική αύξηση της τιμής ενός κόμβου. Για να αποφύγετε να κάνετε ανάγνωση και γραφή, για ACID. Πρόσφατα έχει προταθεί η αλλαγή σε $Ακολουθία

Σας ευχαριστούμε για την προσοχή σας, είμαστε έτοιμοι να απαντήσουμε στις ερωτήσεις σας.

Αποποίηση ευθυνών: Αυτό το άρθρο και τα σχόλιά μου σε αυτό είναι η γνώμη μου και δεν έχουν καμία σχέση με την επίσημη θέση της InterSystems Corporation.

Επέκταση Τα παγκόσμια είναι ξίφη θησαυρού για την αποθήκευση δεδομένων. Δέντρα. Μέρος 2ο. Θα μάθετε ποιοι τύποι δεδομένων μπορούν να εμφανίζονται σε παγκόσμιους και σε ποιες εργασίες παρέχουν το μέγιστο όφελος.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο