Browse Source

Merge branch 'feature/orbitdb' into develop

develop
Ezerous 3 years ago
parent
commit
46da89c359
  1. BIN
      assets/figures/orbitdb-identity.png
  2. BIN
      assets/figures/orbitdb-logo.png
  3. 9
      bibliography/references.bib
  4. 64
      chapters/2.theoretical-background/2.8.orbit-db.tex
  5. BIN
      thesis.pdf

BIN
assets/figures/orbitdb-identity.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
assets/figures/orbitdb-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

9
bibliography/references.bib

@ -75,5 +75,12 @@
url = "https://docs.ipfs.io/" url = "https://docs.ipfs.io/"
} }
@misc{orbitdb,
title = {OrbitDB},
url = {https://orbitdb.org}
}
@misc{orbitdb-guide,
title = {Getting Started with OrbitDB},
url = {https://github.com/orbitdb/orbit-db/blob/main/GUIDE.md}
}

64
chapters/2.theoretical-background/2.8.orbit-db.tex

@ -1,39 +1,37 @@
\section{OrbitDB} \section{OrbitDB}
Η OrbitDB είναι μία P2P βάση δεδομένων. Χρησιμοποιεί το IPFS για την αποθήκευση των δεδομένων και το IPFS Pubsub για τον αυτόματο συγχρονισμό των βάσεων δεδομένων μεταξύ των peers. Είναι μία τελικά συνεπής (eventually consistent) και χρησιμοποιεί CRDTs (Conflict-Free Replicated Data Types) για συγχωνεύσεις βάσεων δεδομένων χωρίς συγκρούσεις, πράγμα που την καθιστά εξαιρετική επιλογή για DApps και offline-first web applications. %TODO add [https://orbitdb.org] and logo \begin{figure}[H]
\centering
\includegraphics[width=2cm]{orbitdb-logo.png}
\caption{OrbitDB logo}
\end{figure}
\underline{\textbf{Stores}}\\ Η OrbitDB είναι μία P2P βάση δεδομένων ανοιχτού κώδικα. Χρησιμοποιεί το IPFS για την αποθήκευση των δεδομένων και το IPFS Pubsub για τον αυτόματο συγχρονισμό των βάσεων δεδομένων μεταξύ των peers. Είναι μία τελικά συνεπής (eventually consistent) και χρησιμοποιεί CRDTs (Conflict-Free Replicated Data Types) για συγχωνεύσεις βάσεων δεδομένων χωρίς συγκρούσεις, πράγμα που την καθιστά εξαιρετική επιλογή για DApps και offline-first web applications.\cite{orbitdb}
Η OrbitDB παρέχει διάφορους τύπους βάσεων (stores) για διαφορετικά μοντέλα δεδομένων και περιπτώσεις χρήσης:
Κάποια Βασικά χαρακτηριστικά της είναι τα εξής:
\begin{itemize} \begin{itemize}
\item log: ένα αμετάβλητο (μόνο για προσάρτηση) ημερολόγιο με ανιχνεύσιμο ιστορικό. \item \textbf{Stores}: Η OrbitDB παρέχει διάφορους τύπους βάσεων (stores) για διαφορετικά μοντέλα δεδομένων και περιπτώσεις χρήσης:
\item feed: ένα μεταβλητό αρχείο καταγραφής με ανιχνεύσιμο ιστορικό, του οποίου οι καταχωρήσεις μπορούν να προστεθούν και να αφαιρεθούν.
\item keyvalue: μία βάση δεδομένων κλειδιών-τιμών. \begin{itemize}
\item docs: μία βάση δεδομένων εγγράφων στην οποία μπορούν να αρχειοθετηθούν έγγραφα JSON με ένα καθορισμένο κλειδί. \item log: ένα αμετάβλητο (μόνο για προσάρτηση) ημερολόγιο με ανιχνεύσιμο ιστορικό.
\item counter: μία βάση δεδομένων για καταμέτρηση συμβάντων. \item feed: ένα μεταβλητό αρχείο καταγραφής με ανιχνεύσιμο ιστορικό, του οποίου οι καταχωρήσεις μπορούν να προστεθούν και να αφαιρεθούν.
\end{itemize} \item keyvalue: μία βάση δεδομένων κλειδιών-τιμών.
\item docs: μία βάση δεδομένων εγγράφων στην οποία μπορούν να αρχειοθετηθούν έγγραφα JSON με ένα καθορισμένο κλειδί.
\item counter: μία βάση δεδομένων για καταμέτρηση συμβάντων.
\end{itemize}
Όλα τα stores υλοποιούνται πάνω στο \texttt{ipfs-log}, μία αμετάβλητη, operation-based CRDT για κατανεμημένα συστήματα, ενώ υπάρχει και η δυνατότητα δημιουργίας προσαρμοσμένων stores ανάλογα με την περίπτωση.
\item \textbf{Address}: Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής: \texttt{/orbitdb/CID/DATABASE\_NAME}, όπου CID είναι το IPFS multihash του μανιφέστου της, ενώ το DATABASE\_NAME είναι το όνομα της βάσης\cite{orbitdb-guide}. Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller).
Όλα τα stores υλοποιούνται πάνω στο \texttt{ipfs-log}, μία αμετάβλητη, operation-based CRDT για κατανεμημένα συστήματα, ενώ υπάρχει και η δυνατότητα δημιουργίας προσαρμοσμένων stores ανάλογα με την περίπτωση. \item \textbf{Identity}: Κάθε φορά που προστίθεται μία εγγραφή στη βάση υπογράφεται από τον δημιουργό της, ο οποίος προσδιορίζεται από μία ταυτότητα (identity). Το Identity object, πέρα από τον προεπιλεγμένο τρόπο λειτουργίας, μπορεί να προσαρμοστεί έτσι ώστε να συνδέεται με κάποιο εξωτερικό αναγνωριστικό.
Η μορφή του έχει ως εξής (βλ. και \url{https://github.com/orbitdb/orbit-db-identity-provider}):
\underline{\textbf{Address}}\\
Κάθε βάση δεδομένων λαμβάνει κατά τη δημιουργία της μία διεύθυνση της μορφής: \texttt{/orbitdb/CID/DATABASE\_NAME}, όπου CID είναι το IPFS multihash του μανιφέστου της, ενώ το DATABASE\_NAME είναι το όνομα της βάσης %TODO add [https://github.com/orbitdb/orbit-db/blob/main/GUIDE.md] \begin{figure}[H]
. Το μανιφέστο είναι ένα IPFS object που περιέχει πληροφορίες της βάσης όπως το όνομα, τον τύπο και έναν δείκτη στον ελεγκτή πρόσβασης (access controller). \centering
\includegraphics[width=12cm]{orbitdb-identity.png}
\underline{\textbf{Identity}}\\ \caption{OrbitDB Identity}
Κάθε φορά που προστίθεται μία εγγραφή στη βάση υπογράφεται από τον δημιουργό της, ο οποίος προσδιορίζεται από μία ταυτότητα (identity). Το Identity object, πέρα από τον προεπιλεγμένο τρόπο λειτουργίας, μπορεί να προσαρμοστεί έτσι ώστε να συνδέεται με κάποιο εξωτερικό αναγνωριστικό. %TODO add [https://github.com/orbitdb/orbit-db-identity-provider] \end{figure}
Η μορφή του έχει ως εξής:
\item \textbf{Access Control}: Κατά τη δημιουργία μίας βάσης μπορούν να οριστούν όσοι θα έχουν δικαίωμα να γράψουν σε αυτήν μέσω ενός ελεγκτή πρόσβασης (access controller). Ο ελεγκτής θα περιλαμβάνει τα public keys τους, τα οποία μπορούν να ανακτηθούν από το identity του καθενός. Από προεπιλογή και αν δεν ορίζεται διαφορετικά, δίνεται πρόσβαση εγγραφής μόνο στον δημιουργό της βάσης.
\begin{lstlisting}[breaklines=true] \end{itemize}
{
_id: <the ID of the external identity>,
_publicKey: <signing key used to sign OrbitDB entries (auto-generated by OrbitDB)>,
signatures: {
id: <signature of _id signed using _publicKey>, //Allows the owner of _id to prove they own the private key associated with _publicKey
publicKey: <signature of signatures.id + _publicKey using _id> //This links the two ids
},
type: 'orbitdb'
}
\end{lstlisting}
\underline{\textbf{Access Control}}\\
Κατά τη δημιουργία μίας βάσης μπορούν να οριστούν όσοι θα έχουν δικαίωμα να γράψουν σε αυτήν μέσω ενός ελεγκτή πρόσβασης (access controller). Ο ελεγκτής θα περιλαμβάνει τα public keys τους, τα οποία μπορούν να ανακτηθούν από το identity του καθενός. Από προεπιλογή και αν δεν ορίζεται διαφορετικά, δίνεται πρόσβαση εγγραφής μόνο στον δημιουργό της βάσης.

BIN
thesis.pdf

Binary file not shown.
Loading…
Cancel
Save