You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
4.5 KiB
35 lines
4.5 KiB
3 years ago
|
\subsubsection{OrbitDB} \label{subsection:4-3-4-2-orbit-db}
|
||
3 years ago
|
|
||
3 years ago
|
\logo{chapter-4/4.3.orbitdb-logo}{OrbitDB logo}
|
||
3 years ago
|
|
||
3 years ago
|
Η OrbitDB είναι μία P2P βάση δεδομένων ανοιχτού κώδικα. Χρησιμοποιεί το IPFS για την αποθήκευση των δεδομένων και το IPFS Pubsub για τον αυτόματο συγχρονισμό των βάσεων δεδομένων μεταξύ των peers. Είναι τελικά συνεπής (eventually consistent) και χρησιμοποιεί CRDTs (Conflict-Free Replicated Data Types) για συγχωνεύσεις βάσεων δεδομένων χωρίς συγκρούσεις, πράγμα που την καθιστά εξαιρετική επιλογή για DApps και offline-first web applications.\cite{4.3-orbitdb}
|
||
3 years ago
|
|
||
3 years ago
|
Κάποια βασικά χαρακτηριστικά της είναι τα εξής:
|
||
3 years ago
|
\begin{itemize}
|
||
3 years ago
|
\item \textbf{Stores}: Η OrbitDB παρέχει διάφορους τύπους βάσεων (stores) για διαφορετικά μοντέλα δεδομένων και περιπτώσεις χρήσης:
|
||
|
|
||
|
\begin{itemize}
|
||
|
\item log: ένα αμετάβλητο (μόνο για προσάρτηση) ημερολόγιο με ανιχνεύσιμο ιστορικό.
|
||
|
\item feed: ένα μεταβλητό αρχείο καταγραφής με ανιχνεύσιμο ιστορικό, του οποίου οι καταχωρήσεις μπορούν να προστεθούν και να αφαιρεθούν.
|
||
|
\item keyvalue: μία βάση δεδομένων κλειδιών-τιμών.
|
||
|
\item docs: μία βάση δεδομένων εγγράφων στην οποία μπορούν να αρχειοθετηθούν έγγραφα JSON με ένα καθορισμένο κλειδί.
|
||
|
\item counter: μία βάση δεδομένων για καταμέτρηση συμβάντων.
|
||
|
\end{itemize}
|
||
|
|
||
|
Όλα τα stores υλοποιούνται πάνω στο \texttt{ipfs-log}, μία αμετάβλητη, operation-based CRDT για κατανεμημένα συστήματα, ενώ υπάρχει και η δυνατότητα δημιουργίας προσαρμοσμένων stores ανάλογα με την περίπτωση.
|
||
|
|
||
3 years ago
|
\item \textbf{Address}: Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής \texttt{/orbitdb/CID/DATABASE\_NAME}, όπου \texttt{CID} είναι το IPFS multihash του μανιφέστου της και \texttt{DATABASE\_NAME} το όνομα της βάσης.\cite{4.3-orbitdb-guide}Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller).
|
||
3 years ago
|
|
||
|
\item \textbf{Identity}: Κάθε φορά που προστίθεται μία εγγραφή στη βάση υπογράφεται από τον δημιουργό της, ο οποίος προσδιορίζεται από μία ταυτότητα (identity). Το Identity object, πέρα από τον προεπιλεγμένο τρόπο λειτουργίας, μπορεί να προσαρμοστεί έτσι ώστε να συνδέεται με κάποιο εξωτερικό αναγνωριστικό.
|
||
3 years ago
|
Η μορφή του έχει ως εξής\footnote{Βλ. και \url{https://github.com/orbitdb/orbit-db-identity-provider}}:
|
||
3 years ago
|
|
||
3 years ago
|
\begin{enumitemcenteredfigure}
|
||
3 years ago
|
\simplelisting[width=.95\textwidth]{orbit-db-identity.js}
|
||
3 years ago
|
\caption{OrbitDB Identity}
|
||
3 years ago
|
\end{enumitemcenteredfigure}
|
||
3 years ago
|
|
||
3 years ago
|
\item \textbf{Access Control}: Κατά τη δημιουργία μίας βάσης μπορούν να οριστούν όσοι θα έχουν δικαίωμα εγγραφής σε αυτή, μέσω ενός ελεγκτή πρόσβασης (access controller). Ο ελεγκτής θα περιλαμβάνει τα public keys τους, τα οποία μπορούν να ανακτηθούν από το identity του καθενός. Από προεπιλογή και αν δεν ορίζεται διαφορετικά, δίνεται πρόσβαση εγγραφής μόνο στον δημιουργό της βάσης.
|
||
3 years ago
|
\end{itemize}
|
||
3 years ago
|
|
||
3 years ago
|
Η OrbitDB έχει το αποθετήριό της στο GitHub (\url{https://github.com/orbitdb/orbit-db}) και διατίθεται μέσω του μητρώου npm (\url{https://www.npmjs.com/package/orbit-db}).
|