Προγραμματισμός

TigerGraph: Η παράλληλη βάση δεδομένων γραφημάτων εξηγείται

Ο Victor Lee είναι διευθυντής διαχείρισης προϊόντων στο TigerGraph.

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

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

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

  • Ταχύτερη φόρτωση δεδομένων για γρήγορη δημιουργία γραφημάτων
  • Ταχύτερη εκτέλεση αλγορίθμων παράλληλων γραφημάτων
  • Δυνατότητα σε πραγματικό χρόνο για streaming ενημερώσεις και ένθετα χρησιμοποιώντας το REST
  • Δυνατότητα ενοποίησης αναλυτικών στοιχείων σε πραγματικό χρόνο με μεγάλης κλίμακας επεξεργασία δεδομένων εκτός σύνδεσης
  • Δυνατότητα κλιμάκωσης και κλιμάκωσης για κατανεμημένες εφαρμογές

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

Διαδρομή γραφήματος: Περισσότεροι λυκίσκοι, περισσότερες πληροφορίες

Γιατί αναλυτικά συνδέσμων σε βάθος; Επειδή όσο περισσότεροι σύνδεσμοι μπορείτε να διασχίσετε (hop) σε ένα γράφημα, τόσο μεγαλύτερη είναι η εικόνα που επιτυγχάνετε. Εξετάστε μια υβριδική γνώση και ένα κοινωνικό γράφημα. Κάθε κόμβος συνδέεται με τι ξέρετε και οι οποίοι ξέρεις. Οι άμεσοι σύνδεσμοι (ένα hop) αποκαλύπτουν όσα γνωρίζετε. Δύο λυκίσκοι αποκαλύπτουν όλα όσα γνωρίζουν οι φίλοι και οι γνωστοί σας. Τρεις λυκίσκοι; Είστε στο δρόμο για να αποκαλύψετε τι Ολοι ξέρει.

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

Ένα απλό παράδειγμα όπως η εξατομικευμένη πρόταση σε πραγματικό χρόνο αποκαλύπτει την αξία και τη δύναμη των ακόλουθων πολλαπλών συνδέσμων σε ένα γράφημα:

"Οι πελάτες που τους άρεσαν αυτό που σας άρεσε επίσης αγόρασαν αυτά τα αντικείμενα."

Αυτό μεταφράζεται σε ερώτημα τριών λυκίσκων:

  1. Ξεκινώντας από ένα άτομο (εσείς), προσδιορίστε τα αντικείμενα που είδατε / άρεσε / αγόρασε.
  2. Δεύτερον, βρείτε άλλα άτομα που έχουν δει / αρέσει / αγοράσει αυτά τα αντικείμενα.
  3. Τρίτον, εντοπίστε πρόσθετα αντικείμενα που αγοράστηκαν από αυτά τα άτομα.

Πρόσωπο → προϊόν → (άλλα) πρόσωπα → (άλλα) προϊόντα

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

Αναλυτικά στοιχεία σε πραγματικό χρόνο του TigerGraph

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

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

Νέα συναλλαγή → πιστωτική κάρτα → κάτοχος κάρτας → (άλλες) πιστωτικές κάρτες → (άλλες) κακές συναλλαγές

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

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

Επισκόπηση συστήματος TigerGraph

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

Ένα εγγενές γράφημα

Το TigerGraph είναι μια καθαρή βάση δεδομένων γραφημάτων, από την αρχή προς τα πάνω. Το κατάστημα δεδομένων του διαθέτει κόμβους, συνδέσμους και τα χαρακτηριστικά τους, τελεία. Ορισμένα προϊόντα βάσης δεδομένων γραφημάτων στην αγορά είναι πραγματικά περιτυλίγματα πάνω από ένα πιο γενικό κατάστημα δεδομένων NoSQL. Αυτή η στρατηγική εικονικού γραφήματος έχει διπλή ποινή όσον αφορά την απόδοση. Πρώτον, η μετάφραση από τη λειτουργία εικονικού γραφήματος σε λειτουργία φυσικής αποθήκευσης εισάγει κάποια επιπλέον δουλειά. Δεύτερον, η υποκείμενη δομή δεν έχει βελτιστοποιηθεί για λειτουργίες γραφημάτων.

Συμπαγής χώρος αποθήκευσης με γρήγορη πρόσβαση

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

Οι τιμές δεδομένων αποθηκεύονται σε κωδικοποιημένες μορφές που συμπιέζουν αποτελεσματικά τα δεδομένα. Ο συντελεστής συμπίεσης ποικίλλει ανάλογα με τη δομή και τα δεδομένα του γραφήματος, αλλά οι τυπικοί συντελεστές συμπίεσης κυμαίνονται μεταξύ 2x και 10x. Η συμπίεση έχει δύο πλεονεκτήματα: Πρώτον, μια μεγαλύτερη ποσότητα δεδομένων γραφήματος μπορεί να χωρέσει στη μνήμη και στην κρυφή μνήμη. Αυτή η συμπίεση μειώνει όχι μόνο το αποτύπωμα της μνήμης, αλλά και τις απώλειες της προσωρινής μνήμης της CPU, επιταχύνοντας τη συνολική απόδοση του ερωτήματος. Δεύτερον, για χρήστες με πολύ μεγάλα γραφήματα, το κόστος υλικού μειώνεται. Για παράδειγμα, εάν ο συντελεστής συμπίεσης είναι 4x, τότε ένας οργανισμός μπορεί να είναι σε θέση να χωρέσει όλα τα δεδομένα του σε ένα μηχάνημα αντί για τέσσερα.

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

Οι δείκτες κατακερματισμού χρησιμοποιούνται για την αναφορά κόμβων και συνδέσμων. Σε όρους Big-O, ο μέσος χρόνος πρόσβασης είναι O (1) και ο μέσος χρόνος ενημέρωσης ευρετηρίου είναι επίσης O (1). Μετάφραση: η πρόσβαση σε έναν συγκεκριμένο κόμβο ή σύνδεσμο στο γράφημα είναι πολύ γρήγορη και παραμένει γρήγορη ακόμη και καθώς το γράφημα μεγαλώνει σε μέγεθος. Επιπλέον, η διατήρηση του ευρετηρίου ως νέοι κόμβοι και σύνδεσμοι προστίθενται στο γράφημα είναι επίσης πολύ γρήγορη.

Παράλληλος και κοινές αξίες

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

Η φύση των ερωτημάτων γραφημάτων είναι να "ακολουθείτε τους συνδέσμους". Ξεκινήστε από έναν ή περισσότερους κόμβους. Κοιτάξτε τις διαθέσιμες συνδέσεις από αυτούς τους κόμβους και ακολουθήστε αυτές τις συνδέσεις σε μερικούς ή όλους τους γειτονικούς κόμβους. Λέμε ότι μόλις «διασχίσατε» ένα «λυκίσκο». Επαναλάβετε αυτήν τη διαδικασία για να μεταβείτε στους γείτονες των γειτόνων του αρχικού κόμβου και έχετε διασχίσει δύο λυκίσκους. Δεδομένου ότι κάθε κόμβος μπορεί να έχει πολλές συνδέσεις, αυτή η διέλευση δύο λυκίσκων περιλαμβάνει πολλές διαδρομές για να φτάσετε από τους κόμβους έναρξης στους κόμβους προορισμού. Τα γραφήματα είναι μια φυσική εφαρμογή για παράλληλη, πολλαπλών νημάτων εκτέλεση.

Ένα ερώτημα φυσικά θα πρέπει να κάνει περισσότερα από το να επισκεφτείτε έναν κόμβο. Σε μια απλή περίπτωση, μπορούμε να μετρήσουμε τον αριθμό των μοναδικών γειτόνων δύο λυκίσκων ή να δημιουργήσουμε μια λίστα με τα αναγνωριστικά τους. Πώς υπολογίζει κανείς μια συνολική μέτρηση, όταν έχετε πολλαπλούς παράλληλους μετρητές; Η διαδικασία είναι παρόμοια με αυτό που θα κάνατε στον πραγματικό κόσμο: Ζητήστε από κάθε μετρητή να κάνει το μερίδιό του στον κόσμο και, στη συνέχεια, συνδυάστε τα αποτελέσματά τους στο τέλος.

Θυμηθείτε ότι το ερώτημα ζήτησε τον αριθμό μοναδικός κόμβοι. Υπάρχει πιθανότητα ο ίδιος κόμβος να μετρηθεί από δύο διαφορετικούς μετρητές, επειδή υπάρχουν περισσότερες από μία διαδρομές για να φτάσετε σε αυτόν τον προορισμό. Αυτό το πρόβλημα μπορεί να προκύψει ακόμη και με μονόστροφο σχεδιασμό. Η τυπική λύση είναι να εκχωρήσετε μια προσωρινή μεταβλητή σε κάθε κόμβο. Οι μεταβλητές αρχικοποιούνται σε False. Όταν ένας μετρητής επισκέπτεται έναν κόμβο, η μεταβλητή αυτού του κόμβου έχει οριστεί σε True, έτσι ώστε άλλοι μετρητές να γνωρίζουν ότι δεν τον μετράνε.

Μηχανές αποθήκευσης και επεξεργασίας γραμμένες σε C ++

Οι επιλογές γλώσσας επηρεάζουν επίσης την απόδοση. Ο κινητήρας αποθήκευσης γραφημάτων και η μηχανή επεξεργασίας της TigerGraph υλοποιούνται στο C ++. Εντός της οικογένειας διαδικαστικών γλωσσών γενικού σκοπού, τα C και C ++ θεωρούνται χαμηλότερα επίπεδα σε σύγκριση με άλλες γλώσσες όπως η Java. Αυτό σημαίνει ότι οι προγραμματιστές που κατανοούν πώς το υλικό του υπολογιστή εκτελεί τις εντολές λογισμικού τους μπορούν να κάνουν ενημερωμένες επιλογές για τη βελτιστοποίηση της απόδοσης. Το TigerGraph έχει σχεδιαστεί προσεκτικά ώστε να χρησιμοποιεί αποτελεσματικά τη μνήμη και να απελευθερώνει μνήμη που δεν χρησιμοποιείται. Η προσεκτική διαχείριση της μνήμης συμβάλλει στην ικανότητα του TigerGraph να διασχίζει πολλούς συνδέσμους, τόσο σε βάθος όσο και σε εύρος, σε ένα μόνο ερώτημα.

Πολλά άλλα προϊόντα βάσης δεδομένων γραφημάτων είναι γραμμένα στην Java, η οποία έχει πλεονεκτήματα και μειονεκτήματα. Τα προγράμματα Java εκτελούνται μέσα σε μια εικονική μηχανή Java (JVM). Το JVM φροντίζει τη διαχείριση μνήμης και τη συλλογή απορριμμάτων (ελευθερώνοντας μνήμη που δεν χρειάζεται πλέον). Παρόλο που αυτό είναι βολικό, είναι δύσκολο για τον προγραμματιστή να βελτιστοποιήσει τη χρήση της μνήμης ή να ελέγξει πότε διατίθεται μη χρησιμοποιημένη μνήμη.

Γλώσσα ερωτήματος γραφήματος GSQL

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

Ο πυρήνας των περισσότερων ερωτημάτων της GSQL είναι η δήλωση SELECT, που διαμορφώνεται στενά μετά τη δήλωση SELECT σε SQL. Οι όροι SELECT, FROM και WHERE χρησιμοποιούνται για την επιλογή και το φιλτράρισμα ενός συνόλου συνδέσμων ή κόμβων. Μετά από αυτήν την επιλογή, η προαιρετική ρήτρα ACCUM μπορεί να χρησιμοποιηθεί για τον καθορισμό ενός συνόλου ενεργειών που θα εκτελούνται από κάθε σύνδεσμο ή παρακείμενο κόμβο. Λέω "εκτέλεση από" και όχι "εκτέλεση σε" γιατί εννοιολογικά, κάθε αντικείμενο γραφήματος είναι μια ανεξάρτητη μονάδα υπολογισμού. Η δομή του γραφήματος λειτουργεί σαν ένα μαζικά παράλληλο υπολογιστικό πλέγμα. Το γράφημα δεν είναι μόνο η αποθήκευση δεδομένων σας. είναι και η μηχανή αναζήτησης ή ανάλυσης.

Μια ρήτρα ACCUM μπορεί να περιέχει πολλές διαφορετικές ενέργειες ή δηλώσεις. Αυτές οι δηλώσεις μπορούν να διαβάσουν τιμές από τα αντικείμενα του γραφήματος, να εκτελέσουν τοπικούς υπολογισμούς, να εφαρμόσουν δηλώσεις υπό όρους και να προγραμματίσουν ενημερώσεις του γραφήματος. (Οι ενημερώσεις δεν πραγματοποιούνται έως ότου τελειώσει το ερώτημα.)

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

Υπολογιστικό μοντέλο MPP

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

Αυτόματο διαμέρισμα

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

Κατανεμημένη λειτουργία υπολογισμού

$config[zx-auto] not found$config[zx-overlay] not found