Μοτίβα μοντελοποίησης για αποθήκες εγγράφων, κλειδιού-τιμής, ευρέων στηλών, γραφημάτων και διανυσμάτων — πότε γίνεται embed, αναφορά, αποκανονικοποίηση ή ομαδοποίηση σε χρονικά παράθυρα.
Οι αποθήκες NoSQL ανταλλάσσουν σταθερά σχήματα και joins με οριζόντια κλιμάκωση. Κάθε οικογένεια μοντελοποιεί τις σχέσεις με τον δικό της τρόπο, οπότε το μοτίβο πρόσβασης — όχι η κανονική μορφή — υπαγορεύει τη δομή.
Πίνακας αναφοράς · 28 καταχωρήσεις
Μοντελοποίηση δεδομένων NoSQLExplained
28 of 28 rows
Έγγραφα
Εμφωλευμένα υπό-έγγραφα ζουν μέσα σε ένα γονικό έγγραφο αντί για ξεχωριστούς πίνακες.
Σχέσεις one-to-few που διαβάζονται μαζί. Μια παραγγελία με τις γραμμές της. Ένας χρήστης με τρεις διευθύνσεις.
Αποθηκεύετε ένα ξένο id, όχι τα δεδομένα. Λύνεται με δεύτερη ανάγνωση ή με $lookup.
Μεγάλες, κοινόχρηστες ή ανεξάρτητα ενημερωμένες υπό-οντότητες. Σύνδεσμοι many-to-many μεταξύ συλλογών.
Ο γονέας ενσωματώνει ένα σύντομο πίνακα παιδιών· όλο το σύνολο χωράει και φορτώνει ως ένα έγγραφο.
Μια χούφτα τηλέφωνα ή προτιμήσεις σε ένα προφίλ. Μία ανάγνωση επιστρέφει γονέα και παιδιά.
Τα παιδιά ζουν στη δική τους συλλογή· κάθε παιδί φέρει το id του γονέα, ή ο γονέας κρατά ένα περιορισμένο πίνακα id.
Σύνολα πολύ μεγάλα ή πολύ ανεξάρτητα για embedding. Ερωτήστε τα παιδιά ανά id γονέα.
Το παιδί αποθηκεύει το id του γονέα· ο γονέας ποτέ δεν απαριθμεί παιδιά, γιατί το σύνολο είναι απεριόριστο.
Συμβάντα, logs ή ψήφους δεμένες με έναν host ή χρήστη. Φιλτράρετε παιδιά ανά id γονέα και σελιδοποιείτε.
Έγγραφα διαφορετικών τύπων οντοτήτων μοιράζονται μία συλλογή, διακρίνονται με ένα πεδίο τύπου.
Σχόλια ή ειδοποιήσεις προσαρτημένα σε πολλά είδη γονέων, όλα ερωτώμενα με έναν τρόπο.
Μερικές ακραίες οντότητες διαχωρίζονται από την κοινή μορφή, ώστε το μέγεθος ή η κίνηση τους να μη διαστρεβλώνει τα υπόλοιπα.
Λογαριασμοί διασημοτήτων των οποίων οι λίστες followers ή οι μετρητές θα ξεπέρναγαν το κανονικό έγγραφο.
Κάθε αναθεώρηση είναι νέο έγγραφο με το ίδιο id και αυξανόμενο αριθμό έκδοσης· το ερώτημα διαλέγει το νεότερο.
Ιστορικό ελέγχου και επεξεργασίες όπου οι παλιές αναθεωρήσεις μένουν ερωτήσιμες.
Οι παράγωγες τιμές υπολογίζονται κατά την εγγραφή και αποθηκεύονται δίπλα στα δεδομένα που συνοψίζουν.
Σύνολα, βαθμολογίες και top-N που αλλιώς θα εκτελούσαν μια συγκέντρωση σε κάθε ανάγνωση.
Κλειδί-τιμή & ευρείες στήλες
Όρος σχεδίασης της DynamoDB: πολλοί τύποι οντοτήτων συμπυκνώνονται σε έναν πίνακα με υπερφορτωμένα κλειδιά partition και ταξινόμησης.
Φέρτε ετερογενή items σε ένα ερώτημα χωρίς join.
Ένα χαρακτηριστικό κλειδί εξυπηρετεί πολλούς τύπους οντοτήτων, σημασμένο με προθέματα όπως USER# ή ORDER#.
Σχεδιάσεις single-table. Ομαδοποιήστε σχετικά items κάτω από ένα partition και φέρτε τα σε ένα ερώτημα.
Ένα κλειδί partition απλώνει γραμμές σε κόμβους· ένα κλειδί ταξινόμησης ταξινομεί κάθε partition.
Cassandra και DynamoDB. Σαρώσεις εύρους, ταξινομημένα logs, ιεραρχικά σύνθετα κλειδιά.
Στοιβάζετε πολλά χαρακτηριστικά σε ένα κλειδί ταξινόμησης με διαχωριστικό — country#region#city — ώστε μια αντιστοίχιση προθέματος να κατεβαίνει την ιεραρχία.
Ιεραρχίες και πολύπτυχρα φίλτρα. Ένα ταξινομημένο ερώτημα εύρους αντικαθιστά πολλές ευρετηριακές αναζητήσεις.
Ομαδοποιήστε συμβάντα σε σταθερά παράθυρα — ώρα, ημέρα, μήνας — κάτω από ξεχωριστά partitions ή πίνακες.
Μετρικές, logs και τηλεμετρία IoT. Περιορίζει το μέγεθος του partition και αφήνει τα κρύα δεδομένα να λήγουν.
Διπλασιάζετε πεδία έντονης ανάγνωσης μεταξύ εγγραφών, ώστε ένα ερώτημα να μην κυνηγά δεύτερη αναζήτηση.
Φορτία έντονης ανάγνωσης όπου η τελική συνέπεια είναι αποδεκτή και η αποθήκευση φθηνή.
Δευτερεύον ευρετήριο πάνω σε ένα χαρακτηριστικό που φέρουν μόνο κάποια items· όσα δεν το έχουν δεν μπαίνουν ποτέ στο ευρετήριο.
Εναλλακτικές διαδρομές πρόσβασης. Βρείτε το αραιό υποσύνολο — ανοιχτές παραγγελίες, μη αποσταλμένα items — χωρίς πλήρη σάρωση.
Γράψτε πρώτα τα ακριβή ερωτήματα· η διάταξη του πίνακα προκύπτει από αυτά, όχι από οντότητες ή κανονική μορφή.
Σχεδίαση σχημάτων σε Cassandra και DynamoDB. Ένας πίνακας ανά οικογένεια ερωτημάτων· το μοντέλο δεδομένων αντιγράφει την ερώτηση.
Ένα ερώτημα πρέπει να χτυπήσει πολλά partitions ή κόμβους παράλληλα, επειδή κανένα κλειδί δεν ταιριάζει με την ερώτηση.
Μια δυσοσμία που σχεδιάζεται εκτός, όχι στόχος. Ξανακλειδώστε τον πίνακα ώστε το συνηθισμένο ερώτημα να προσγειώνεται σε ένα partition.
Τα αντίγραφα ώθονται στη θέα κάθε αναγνώστη κατά την εγγραφή, ή συγκεντρώνονται και συγχωνεύονται κατά την ανάγνωση.
Feeds και timelines. Fan-out εγγραφής για μικρά κοινά, ανάγνωσης για τεράστια.
Ένα προσυπολογισμένο αποτέλεσμα ερωτήματος αποθηκευμένο ως δικός του πίνακας, διατηρούμενο ενημερωμένο καθώς αλλάζει η βάση.
Εναλλακτικές μορφές ανάγνωσης πάνω από μία διαδρομή εγγραφής. Εξυπηρετεί ερωτήματα που ο βασικός πίνακας δεν μπορεί.
Γραφήματα
Κάθε ακμή είναι μια γραμμή ή πλειάδα που δείχνει από έναν κόμβο πηγή σε έναν κόμβο προορισμό.
Αποθήκες γραφημάτων και ιδιοτήτων. Αναζητήσεις φίλου-του-φίλου, δρομολόγηση, προτάσεις.
Κάθε σχέση είναι ένα έγγραφο στη δική της συλλογή, με ids from και to συν χαρακτηριστικά του συνδέσμου.
Γραφήματα σε αποθήκες εγγράφων. Χαρακτηριστικά στον ίδιο τον σύνδεσμο — βαθμολογία, ρόλος, χρονική σήμανση.
Κάθε κόμβος αποθηκεύει αριστερούς και δεξιούς μετρητές από μια διάσχιση κατά βάθος· ένα υποδέντρο ζει μέσα στο εύρος του γονέα του.
Δέντρα έντονης ανάγνωσης. Ένα ερώτημα BETWEEN επιστρέφει υποδέντρο· οι εισαγωγές αριθμούν ξανά τη διάσχιση.
Ένας αποκλειστικός πίνακας καταγράφει κάθε ζεύγος πρόγονος-απόγονος, συμπεριλαμβανομένου κάθε κόμβου σε βάθος μηδέν.
Ερωτήματα ολόκληρων κλάδων σε οποιοδήποτε βάθος. Απλά joins, πληρωμένα με αποθήκευση και συντήρηση.
Τα property graphs προσαρτούν χαρακτηριστικά κλειδί-τιμή σε κόμβους και ακμές· το RDF εκφράζει τα πάντα ως τριπλέτες υποκείμενο-ρήμα-αντικείμενο.
Property graphs για πλούσια διάσχιση (Neo4j)· RDF για συνδεδεμένα ανοιχτά δεδομένα και ανταλλαγή οντολογιών.
Διανύσματα
Ένας πολυδιάστατος πίνακας δεκαδικών κάθεται δίπλα σε μεταδεδομένα. Ένα ευρετήριο ANN βρίσκει τους πλησιέστερους γείτονες.
Σημασιολογική αναζήτηση, ανάκτηση RAG, προτάσεις και ομοιότητα πάνω σε αδόμητο περιεχόμενο.
Τα έγγραφα πηγής διαιρούνται — κατά μέγεθος, επικάλυψη ή δομή — πριν ενσωματωθεί κάθε κομμάτι ξεχωριστά.
Ποιότητα ανάκτησης RAG. Το μέγεθος του chunk ανταλλάσσει ακρίβεια με ανάκληση· η επικάλυψη προστατεύει χωρισμένες προτάσεις.
Η πυκνή ομοιότητα διανυσμάτων τρέχει δίπλα στην αντιστοίχιση λέξεων-κλειδιών· οι δύο ταξινομημένες λίστες συγχωνεύονται σε ένα αποτέλεσμα.
Ερωτήματα που χρειάζονται ακριβείς όρους και νόημα ταυτόχρονα, με φίλτρα μεταδεδομένων από πάνω.