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

Αναθεώρηση Amazon Neptune: Μια επεκτάσιμη βάση δεδομένων γραφημάτων για OLTP

Βάσεις δεδομένων γραφημάτων, όπως Neo4j, Apache Spark GraphX, DataStax Enterprise Graph, IBM Graph, JanusGraph, TigerGraph, AnzoGraph, το τμήμα γραφήματος του Azure Cosmos DB και το αντικείμενο αυτής της αναθεώρησης, Amazon Neptune, είναι καλές για διάφορα είδη εφαρμογών που περιλαμβάνουν πολύ συνδεδεμένα σύνολα δεδομένων, όπως παροχή συστάσεων με βάση κοινωνικά γραφήματα, εκτέλεση εντοπισμού απάτης, παροχή συστάσεων προϊόντων σε πραγματικό χρόνο και ανίχνευση εισβολών σε λειτουργίες δικτύου και πληροφορικής. Αυτοί είναι τομείς όπου οι παραδοσιακές, σχεσιακές βάσεις δεδομένων τείνουν να καθίστανται αναποτελεσματικές και αργές λόγω της ανάγκης σύνθετων συνδέσεων SQL που λειτουργούν σε μεγάλα σύνολα δεδομένων.

Το Neptune είναι μια πλήρως διαχειριζόμενη υπηρεσία βάσης δεδομένων γραφημάτων με ιδιότητες ACID και άμεση συνέπεια, η οποία έχει στον πυρήνα της έναν ειδικά κατασκευασμένο, υψηλής απόδοσης μηχανή βάσεων δεδομένων γραφημάτων που έχει βελτιστοποιηθεί για την αποθήκευση δισεκατομμυρίων σχέσεων και την αναζήτηση του γραφήματος με καθυστέρηση χιλιοστών του δευτερολέπτου. Το Neptune υποστηρίζει δύο από τις πιο δημοφιλείς γλώσσες ερωτημάτων ανοιχτού κώδικα, το Apache TinkerPop Gremlin και το W3C SPARQL. Η δημοφιλής Cypher Query Language (CQL) που χρησιμοποιήθηκε στο Neo4j ξεκίνησε ιδιόκτητη, αλλά αργότερα έγινε ανοιχτή πηγή.

Οι Gremlin και SPARQL αντιμετωπίζουν διαφορετικά είδη βάσης δεδομένων γραφημάτων. Το Gremlin, όπως και η CQL, προορίζεται για βάσεις δεδομένων ιδιοτήτων. Το SPARQL προορίζεται για τριπλάσιο πόρου περιγραφής πόρων (RDF), σχεδιασμένο για τον Ιστό. Το Gremlin είναι μια γλώσσα διασταύρωσης γραφήματος. Η SPARQL είναι μια γλώσσα ερωτήματος με ρήτρες SELECT και WHERE.

Η εφαρμογή Amazon Neptune επιτρέπει τόσο τις γλώσσες Gremlin όσο και SPARQL σε μία παρουσία βάσης δεδομένων, αλλά δεν μπορούν να δουν τα δεδομένα του άλλου. Ο λόγος για να επιτρέψουμε και τα δύο είναι να αφήσουμε τους νέους χρήστες να καταλάβουν ποιο λειτουργεί καλύτερα για τις ανάγκες τους.

Η τεκμηρίωση του Ποσειδώνα έχει δείγματα που χρησιμοποιούν τις παραλλαγές Gremlin-Groovy, Gremlin-Java και Gremlin-Python του Gremlin. Το Neptune επιτρέπει στο Gremlin στην κονσόλα, κλήσεις HTTP REST, προγράμματα Java, Python, .Net και Node.js. Από την πλευρά του SPARQL, το Neptune υποστηρίζει την κονσόλα Eclipse RDF4J και τον πάγκο εργασίας, κλήσεις HTTP REST και προγράμματα Java.

Χαρακτηριστικά και οφέλη του Amazon Neptune

Ως μια πλήρως διαχειριζόμενη βάση δεδομένων γραφημάτων συναλλαγών ως υπηρεσία, το Amazon Neptune όχι μόνο προσφέρει ελευθερία από την ανάγκη συντήρησης υλικού και λογισμικού της βάσης δεδομένων, αλλά προσφέρει επίσης εύκολη κλιμάκωση, διαθεσιμότητα μεγαλύτερη από 99,99% και πολλαπλά επίπεδα ασφάλειας. Τα συμπλέγματα βάσεων δεδομένων Neptune μπορούν να έχουν έως και 64 TB αποθηκευτικού χώρου αυτόματης κλιμάκωσης σε έξι αντίγραφα των δεδομένων σας σε τρεις ζώνες διαθεσιμότητας και πολλά περισσότερα αν ενεργοποιήσετε υψηλή διαθεσιμότητα χρησιμοποιώντας αντίγραφα ανάγνωσης σε επιπλέον ζώνες.

Το επίπεδο αποθήκευσης δεδομένων Neptune υποστηρίζεται από SSD, ανεκτικοί σε σφάλματα και αυτοθεραπεία. Οι αστοχίες δίσκων επιδιορθώνονται στο παρασκήνιο χωρίς απώλεια διαθεσιμότητας βάσης δεδομένων. Το Neptune ανιχνεύει αυτόματα σφάλματα της βάσης δεδομένων και επανεκκινεί - συνήθως σε 30 δευτερόλεπτα ή λιγότερο - χωρίς να χρειάζεται να πραγματοποιήσει ανάκτηση σφαλμάτων ή να αναδημιουργήσει την προσωρινή μνήμη της βάσης δεδομένων, καθώς η προσωρινή μνήμη είναι απομονωμένη από τις διαδικασίες της βάσης δεδομένων και μπορεί να επιβιώσει από την επανεκκίνηση. Εάν αποτύχει ολόκληρη η κύρια παρουσία, το Neptune θα αποτύχει αυτόματα σε μία από τις 15 αντίγραφα ανάγνωσης. Τα αντίγραφα ασφαλείας μεταδίδονται συνεχώς στο S3.

Μπορείτε να κλιμακώσετε τα συμπλέγματα Amazon Neptune προς τα πάνω είτε προς τα κάτω είτε τροποποιώντας τις παρουσίες είτε (για να αποφύγετε το χρόνο διακοπής λειτουργίας) προσθέτοντας μια παρουσία του επιθυμητού μεγέθους και τερματίζοντας την παλιά παρουσία όταν ένα αντίγραφο των δεδομένων μετεγκατασταθεί και έχετε προωθήσει τη νέα παρουσία σε πρωταρχικός. Τα μεγέθη παρουσίας Neptune VM κυμαίνονται από db.r4.large (δύο vCPU και 16 GiB RAM) έως db.r4.16xlarge (64 vCPU και 488 GiB RAM).

Το Amazon Neptune εφαρμόζει ασφάλεια εκτελώντας τον κινητήρα σε δίκτυο VPC (εικονικό ιδιωτικό σύννεφο) και προαιρετικά κρυπτογραφώντας τα δεδομένα σε κατάσταση ηρεμίας χρησιμοποιώντας την υπηρεσία διαχείρισης κλειδιών AWS. Εκτός από την κρυπτογράφηση του υποκείμενου χώρου αποθήκευσης, το Neptune κρυπτογραφεί επίσης τα αντίγραφα ασφαλείας, τα στιγμιότυπα και τα αντίγραφα. Το Neptune είναι κατάλληλο για χρήση σε εφαρμογές HIPAA. Ο Ποσειδώνας δεν απαιτείτε να δημιουργήσετε συγκεκριμένους δείκτες για να επιτύχετε καλή απόδοση ερωτήματος, η οποία είναι μια ευπρόσδεκτη αλλαγή από την εξισορρόπηση του ερωτήματος και την απόδοση της σύνταξης συντονίζοντας προσεκτικά τους δείκτες.

Το Amazon Neptune το κάνει δεν Υποστήριξη αναλυτικών αλγορίθμων ερωτημάτων, όπως το PageRank, που εμφανίζονται σε ορισμένες άλλες βάσεις δεδομένων γραφημάτων, όπως Neo4j, TigerGraph και AnzoGraph. Το Neptune προορίζεται να είναι μια βάση δεδομένων γραφήματος χαμηλού λανθάνοντος χρόνου (OLTP) για τεράστια σύνολα δεδομένων, όχι μια βάση δεδομένων ανάλυσης (OLAP) και απλά δεν είναι βελτιστοποιημένη για αναλυτικές περιπτώσεις χρήσης ή ερωτήματα που περιλαμβάνουν περισσότερους από τρεις λυκίσκους και το PageRank αγγίζει κάθε στοιχείο στη βάση δεδομένων.

Το Amazon Neptune υποστηρίζει αδρανή, οπότε μπορεί να το κάνει λίγο ανάλυση, αλλά όχι πολύ. Όπως το Neptune, το Neo4j προοριζόταν επίσης αρχικά να χρησιμοποιηθεί για OLTP, αλλά πρόσθεσε μια βιβλιοθήκη αναλυτικών ερωτημάτων το 2017. Το γεγονός ότι οι δυνατότητες ανάλυσης είναι περιορισμένες στο Neptune δεν είναι απαραίτητα λόγος να το αποκλείσουμε, ως βάση δεδομένων γραφημάτων OLTP χαμηλού λανθάνοντος χρόνου με παγκόσμια κατανεμημένα αντίγραφα ανάγνωσης και την ικανότητα χειρισμού 64 TB δεδομένων δεν είναι τίποτα να φτερνιστείτε.

Ξεκινήστε με το Amazon Neptune

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

Μπορείτε να ξεκινήσετε μικρό και να προσθέσετε χωρητικότητα — μεγαλύτερα VM ή περισσότερα αντίγραφα ανάγνωσης — όποτε το χρειάζεται η εφαρμογή σας. Ο αποθηκευτικός χώρος αυξάνεται αυτόματα και πληρώνετε μόνο για τον αποθηκευτικό χώρο που χρησιμοποιείτε.

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

Θέλετε υψηλή διαθεσιμότητα για το σύμπλεγμα σας; Δεν είναι καθόλου δύσκολο.

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

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

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

Σε επίπεδο συμπλέγματος, μπορείτε να εμφανίσετε μια σύνοψη.

Στο επίπεδο παρουσίας μπορείτε να δείτε γραφήματα απόδοσης.

Φόρτωση δεδομένων στο Amazon Neptune

Για να φορτώσετε δεδομένα στο Amazon Neptune, πρώτα φορτώνετε αρχεία στο Amazon S3 σε μία από τις σωστές μορφές: CSV για Gremlin και τρίκλινα, τετράγωνα, RDF / XML ή Turtle for RDF. Ο φορτωτής υποστηρίζει συμπίεση gzip μεμονωμένων αρχείων.

Θα χρειαστεί να δημιουργήσετε έναν ρόλο IAM και S3 VPC τελικό σημείο για να δώσετε στον Neptune άδεια πρόσβασης στον κάδο S3, εκτός εάν έχουν ήδη δημιουργηθεί, για παράδειγμα από ένα πρότυπο CloudFormation. Υπάρχει ένα API φορτωτή Neptune που καλείται μέσω ενός τελικού σημείου REST (π.χ. από μια εντολή curl) που μπορεί να αναλάβει το ρόλο IAM και να φορτώσει μαζικά τα δεδομένα στο σύμπλεγμα. Υπάρχει επίσης ένας μετατροπέας για GraphML σε CSV στο GitHub. Η αναδρομή φόρτωσης δεδομένων είναι για οποιαδήποτε υποστηριζόμενη μορφή δεδομένων.

Ερώτηση Amazon Neptune με το Gremlin

Μπορείτε να χρησιμοποιήσετε την κονσόλα Gremlin και ένα τελικό σημείο REST για να συνδεθείτε και να ρωτήσετε τις παρουσίες Amazon Neptune στο Gremlin από μια EC2 VM στο ίδιο VPC με τη βάση δεδομένων. Πιο χρήσιμα για εφαρμογές, μπορείτε να ζητήσετε το Neptune χρησιμοποιώντας το Gremlin σε Java, Python, .Net και Node.js.

Υπάρχει ένα ολόκληρο βιβλίο για το Gremlin, Πρακτικό Gremlin: Ένα Apache TinkerPop Tutorial, από τον Kelvin Lawrence. Το βιβλίο χρησιμοποιεί το TinkerGraph για τη βάση δεδομένων του, αλλά η ίδια σύνταξη Gremlin λειτουργεί για τον Ποσειδώνα με μικρές εξαιρέσεις που τεκμηριώνονται από την Amazon.

Τα ερωτήματα Gremlin περιγράφουν τον τρόπο πλοήγησης κορυφών γραφημάτων και ακμών. Ένα παράδειγμα για τη βάση δεδομένων αεροπορικών δρομολογίων που συζητήθηκε στο βιβλίο βρίσκει όλους τους τρόπους πτήσεων από Ώστιν, Τέξας (κωδικός αεροδρομίου AUS) προς Άγκρα της Ινδίας (κωδικός αεροδρομίου AGR) με δύο στάσεις:

g.V (). έχει («κωδικός», «AUS»). επανάληψη (έξω ()). φορές (3). έχει («κωδικός», «AGR»). διαδρομή (). από («κωδικός»)

Αν θέλετε να δοκιμάσετε τα παραδείγματα στο βιβλίο για το Amazon Neptune, θα πρέπει πρώτα να αντιγράψετε τα άκρα και τους κόμβους των αρχείων CSV σε έναν κάδο S3 χρησιμοποιώντας την εντολή AWS CLI cp και να φορτώσετε τα δεδομένα από εκεί στο Neptune.

Ερώτηση Amazon Neptune με SPARQL

Μπορείτε να χρησιμοποιήσετε την κονσόλα RDF4J, τον πάγκο εργασίας RDF4J και ένα τελικό σημείο REST για να συνδεθείτε και να ρωτήσετε τις παρουσίες Amazon Neptune στο SPARQL από μια EC2 VM στο ίδιο VPC με τη βάση δεδομένων. Πιο χρήσιμα για εφαρμογές, μπορείτε να ζητήσετε το Neptune χρησιμοποιώντας SPARQL στην Java. Η προδιαγραφή SPARQL 1.1 Query Language καθορίζει τον τρόπο κατασκευής ερωτημάτων. Εάν κάνετε αναζήτηση στον ιστό για "sparql tutorial", θα βρείτε έναν αριθμό δωρεάν γραπτών και εκπαιδευτικών βίντεο σχετικά με το θέμα. Όλα αυτά θα πρέπει να λειτουργούν με το Neptune μόλις φορτώσετε τα δεδομένα.

Το SPARQL μοιάζει λιγότερο με λειτουργικό κώδικα από ό, τι το Gremlin και περισσότερο σαν το SQL. Για παράδειγμα:

ΕΠΙΛΟΓΗ; βιβλίο; ποιος

ΠΟΥ {? Book dc: creator? Who}

Απόδοση και κλιμάκωση του Amazon Neptune

Το Amazon Neptune σχεδιάστηκε για ερωτήματα γραφήματος χαμηλού λανθάνοντος χρόνου έως και τριών λυκίσκων σε τεράστιες (έως 64 TB) βάσεις δεδομένων. Υποστηρίζει έως και 15 αντίγραφα χαμηλής καθυστέρησης σε τρεις ζώνες διαθεσιμότητας για να κλιμακώσει την ικανότητα ανάγνωσης και, σύμφωνα με την Amazon, μπορεί να εκτελέσει περισσότερα από 100.000 ερωτήματα γραφήματος ανά δευτερόλεπτο.

Τα μεγέθη εμφάνισης κυμαίνονται από δύο σε 64 vCPU με 15 GiB έως 488 GiB RAM, διπλασιάζοντας περίπου και τα δύο σε κάθε βήμα. Το πολύ, το Neptune μπορεί να χρησιμοποιήσει 64 vCPU φορές 16 εμφανίσεις για συνολικά 1024 vCPU, και 488 GiB RAM φορές 16 παρουσίες για συνολικά 7808 GiB RAM. Αυτή είναι μια συνολική πιθανή αύξηση κλιμάκωσης 512x, λαμβάνοντας υπόψη τόσο το μέγεθος της παρουσίας όσο και τον αριθμό των αντιγράφων ανάγνωσης. Το κόστος παρακολουθεί την κλιμάκωση πόρων σχεδόν ακριβώς.

Εάν αναζητάτε μια βάση δεδομένων με γραφήματα συναλλαγών ως υπηρεσία, το Amazon Neptune είναι μια βιώσιμη επιλογή. Δεδομένου ότι το Neptune υποστηρίζει τόσο τις γλώσσες ερωτήσεων Gremlin όσο και SPARQL, θα πρέπει να μπορείτε να βρείτε προγραμματιστές για τη δημιουργία εφαρμογών εναντίον του. Από την άλλη πλευρά, η έλλειψη υποστήριξης Cypher του Neptune μπορεί να αποθαρρύνει τους υπάρχοντες χρήστες Neo4j και η έλλειψη υποστήριξης OLAP και αλγορίθμου γραφημάτων θα αποθαρρύνει τους ανθρώπους που θέλουν μια βάση δεδομένων γραφήματος για συναλλαγές και ανάλυση.

Το ευρύ φάσμα δυνατοτήτων του Amazon Neptune (έως 16x μέγεθος και 16 παρουσίες), το υψηλό μέγιστο ποσοστό συναλλαγών (100.000 ερωτήματα ανά δευτερόλεπτο) και η τιμολόγηση pay-as-you-go πρέπει να ταιριάζει στις περισσότερες επιχειρηματικές απαιτήσεις. Ωστόσο, η έλλειψη επιλογών εσωτερικής εγκατάστασης μπορεί να αποκλείσει τη χρήση του σε εταιρείες με πολιτικές κατά της τοποθέτησης των ευαίσθητων δεδομένων τους στο cloud και εταιρειών που προτιμούν να δημιουργούν και να γράφουν κεφαλαιουχικά έξοδα από τα τρέχοντα λειτουργικά έξοδα.

Κόστος: 0,348 $ έως 5,568 $ ανά ώρα λειτουργίας, ανάλογα με το μέγεθος της παρουσίας, 0,10 $ ανά GB-μήνα για αποθήκευση, 0,20 $ ανά εκατομμύριο αιτήσεις εισόδου / εξόδου, 0,023 $ ανά μήνα GB για εφεδρικό χώρο αποθήκευσης, 0,12 $ ανά GB για μεταφορά δεδομένων εξερχόμενων. ισχύουν διάφορα διαλείμματα τιμών.

Πλατφόρμα: Υπηρεσίες Web Amazon; υποστηρίζει ερωτήματα Apache TinkerPop Gremlin ή SPARQL. πρόσβαση μέσω κονσόλας AWS, HTTP REST και Java, καθώς και RDF4J Workbench (SPARQL) και Python, .Net και Node.js (Gremlin).