Einführung
Titan ist eine Open-Source-Graphendatenbank, die hoch skalierbar ist. Eine Diagrammdatenbank ist eine Art NoSQL-Datenbank, in der alle Daten alsnodes undedges gespeichert werden. Eine Grafikdatenbank eignet sich für Anwendungen, die stark vernetzte Daten verwenden, wobei die Beziehung zwischen Daten ein wichtiger Bestandteil der Funktionalität der Anwendung ist, z. B. eine Website für soziale Netzwerke. Titan wird zum Speichern und Abfragen großer Datenmengen verwendet, die auf mehrere Maschinen verteilt sind. Es kann so konfiguriert werden, dass die verschiedenen verfügbaren Speicher-Backends wie Apache Cassandra, HBase und BerkeleyDB verwendet werden. Auf diese Weise können Sie in Zukunft eine Lieferantenbindung vermeiden, wenn Sie den Datenspeicher ändern müssen.
In diesem Tutorial installieren Sie Titan 1.0. Anschließend konfigurieren Sie Titan für die Verwendung von Cassandra und ElasticSearch, die beide im Lieferumfang von Titan enthalten sind. Cassandra fungiert als Datenspeicher, in dem die zugrunde liegenden Daten gespeichert sind, während ElasticSearch, eine Freitextsuchmaschine, für einige komplexe Suchvorgänge in der Datenbank verwendet werden kann. Sie werden auch Daten aus der Datenbank mit Gremlin erstellen und abfragen.
Voraussetzungen
Um dieses Tutorial abzuschließen, benötigen Sie:
-
Ein Ubuntu 16.04-Server mit mindestens 2 GB RAM mit einem Benutzer ohne Rootberechtigung und einer Firewall. Sie können dies einrichten, indem Sie denInitial Server Setup with Ubuntu 16.04 folgen.
-
Oracle JDK 8 installiert. Befolgen Sie dazu den Abschnitt „Installieren des Oracle JDK“ inthis Java installation article.
[[Schritt-1 - Herunterladen-Auspacken und Starten von Titan]] == Schritt 1 - Herunterladen, Auspacken und Starten von Titan
Um die Titan-Datenbank herunterzuladen, gehen Sie zutheir downloads page. Sie sehen zwei Titan-Distributionen zum Download. Für dieses Tutorial möchten wirTitan 1.0.0 with Hadoop 1. Dies ist die stabile Version. Laden Sie es mitwget
auf Ihren Server herunter:
wget http://s3.thinkaurelius.com/downloads/titan/titan-1.0.0-hadoop1.zip
Sobald der Download abgeschlossen ist, entpacken Sie die Zip-Datei. Das Programm zum Entpacken von Dateien ist standardmäßig nicht installiert. Installiere es zuerst:
sudo apt-get install unzip
Dann entpacke Titan:
unzip titan-1.0.0-hadoop1.zip
Dadurch wird ein Verzeichnis mit dem Namentitan-1.0.0-hadoop
erstellt.
Starten wir Titan, um sicherzustellen, dass alles funktioniert. Wechseln Sie in das Verzeichnistitan-1.0.0-hadoop
und rufen Sie das Shell-Skript auf, um Titan zu starten.
cd titan-1.0.0-hadoop1
./bin/titan.sh start
Sie sehen eine Ausgabe ähnlich der folgenden:
OutputForking Cassandra...
Running `nodetool statusthrift`... OK (returned exit status 0 and printed string "running").
Forking Elasticsearch...
Connecting to Elasticsearch (127.0.0.1:9300)...... OK (connected to 127.0.0.1:9300).
Forking Gremlin-Server...
Connecting to Gremlin-Server (127.0.0.1:8182)...... OK (connected to 127.0.0.1:8182).
Run gremlin.sh to connect.
Titan ist auf eine Reihe anderer Tools angewiesen, um funktionieren zu können. Bei jedem Start von Titan werden also auch Cassandra, ElasticSearch und Gremlin-Server gestartet.
Sie können den Status des Titans überprüfen, indem Sie den folgenden Befehl ausführen.
./bin/titan.sh status
Sie sehen diese Ausgabe:
OutputGremlin-Server (org.apache.tinkerpop.gremlin.server.GremlinServer) is running with pid 7490
Cassandra (org.apache.cassandra.service.CassandraDaemon) is running with pid 7077
Elasticsearch (org.elasticsearch.bootstrap.Elasticsearch) is running with pid 7358
Im nächsten Schritt sehen Sie, wie Sie das Diagramm abfragen.
[[Schritt-2 - Abfragen des Diagramms mit Gremlin]] == Schritt 2 - Abfragen des Diagramms mit Gremlin
Gremlin ist einGraph Traversal Language, mit dem Graph-Datenbanken abgefragt, analysiert und bearbeitet werden. Nachdem Titan eingerichtet und gestartet wurde, werden Sie Gremlin verwenden, um Knoten und Kanten in Titan zu erstellen und abzufragen.
Um Gremlin zu verwenden, öffnen Sie die Gremlin-Konsole, indem Sie den folgenden Befehl eingeben.
./bin/gremlin.sh
Sie werden eine Antwort ähnlich der folgenden sehen:
Output \,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.hadoop
plugin activated: tinkerpop.utilities
plugin activated: aurelius.titan
plugin activated: tinkerpop.tinkergraph
gremlin>
Die Gremlin-Konsole lädt mehrere Plugins, um titan- und gremlinspezifische Funktionen zu unterstützen.
Instanziieren Sie zunächst das Diagrammobjekt. Dieses Objekt stellt das Diagramm dar, an dem wir gerade arbeiten. Es gibt eine Reihe von Methoden, mit denen das Diagramm verwaltet werden kann, z. B. das Hinzufügen von Scheitelpunkten, das Erstellen von Beschriftungen und das Behandeln von Transaktionen. Führen Sie diesen Befehl aus, um das Diagrammobjekt zu instanziieren:
graph = TitanFactory.open('conf/titan-cassandra-es.properties')
Sie sehen diese Ausgabe:
Output==>standardtitangraph[cassandrathrift:[127.0.0.1]]
Die Ausgabe gibt den Objekttyp an, der von derTitanFactory.open()
-Methode zurückgegeben wird, nämlichstandardtitangraph
. Es gibt auch an, welches Speicher-Backend der Graph verwendet (cassandrathrift
) und mit welchem über localhost (127.0.0.1
) verbunden ist.
Die Methodeopen()
erstellt ein neues Titan-Diagramm oder öffnet ein vorhandenes mithilfe der Konfigurationsoptionen in der angegebenen Eigenschaftendatei. Die Konfigurationsdatei enthält die allgemeinen Konfigurationsoptionen wie das zu verwendende Speicher-Backend, das Caching-Backend und einige andere Optionen. Sie können eine benutzerdefinierte Konfigurationsdatei erstellen und diese anstelle der Standardeinstellungen verwenden, die Sie in Schritt 3 ausführen.
Sobald der Befehl ausgeführt wurde, wird das Diagrammobjekt instanziiert und in der Variablengraph
gespeichert. Geben Siegraph.
gefolgt vom SchlüsselTAB
ein, um alle verfügbaren Eigenschaften und Methoden für das Diagrammobjekt anzuzeigen.
gremlin> graph.
addVertex( assignID( buildTransaction() close()
closeTransaction( commit( compute( compute()
configuration() containsEdgeLabel( containsPropertyKey( containsRelationType(
containsVertexLabel( edgeMultiQuery( edgeQuery( edges(
features() getEdgeLabel( getOrCreateEdgeLabel( getOrCreatePropertyKey(
...
...
In Diagrammdatenbanken fragen Sie die Daten meistens nachtraversingab, anstatt wie in relationalen Datenbanken Datensätze mit Verknüpfungen und Indizes abzurufen. Um einen Graphen zu durchlaufen, benötigen wir eine Diagrammdurchlaufquelle aus der Referenzvariablengraph
. Der folgende Befehl erreicht dies.
g = graph.traversal()
Sie führen die Durchquerungen mit dieserg
-Variablen durch. Lassen Sie uns mit dieser Variablen ein paar Eckpunkte erstellen. Scheitelpunkte sind wie Zeilen in SQL. Jeder Scheitelpunkt hat einen Scheitelpunkttyp oderlabel
und die zugehörigen Eigenschaften, analog zu Feldern in SQL. Führen Sie diesen Befehl aus:
sammy = g.addV(label, 'fish', 'name', 'Sammy', 'residence', 'The Deep Blue Sea').next()
company = g.addV(label, 'company', 'name', 'DigitalOcean', 'website', 'www.digitalocean.com').next()
In diesem Beispiel haben wir zwei Scheitelpunkte mit den Bezeichnungenfish
undcompany
erstellt. Wir haben auch zwei Eigenschaften definiert, nämlichname
undresidence
für den ersten Scheitelpunkt undname
undwebsite
für den zweiten Scheitelpunkt. Greifen wir nun mit den Variablensammy
undcompany
auf diese Eckpunkte zu.
Führen Sie beispielsweise den folgenden Befehl aus, um alle Eigenschaften des ersten Scheitelpunkts aufzulisten:
g.V(sammy).properties()
Die Ausgabe sieht ungefähr so aus:
Output==>vp[name->Sammy]
==>vp[residence->The Deep Blue Sea]
Sie können dem Scheitelpunkt auch eine neue Eigenschaft hinzufügen. Fügen wir eine Farbe hinzu:
g.V(sammy).property('color', 'blue')
Definieren wir nun eine Beziehung zwischen diesen beiden Eckpunkten. Dies wird erreicht, indem einedge
zwischen ihnen erstellt wird.
company.addEdge('hasMascot', sammy, 'status', 'high')
Dies erzeugt eine Kante zwischensammy
undcompany
mit der BezeichnunghasMascot
und eine Eigenschaft mit dem Namenstatus
mit dem Werthigh
.
Kommen wir nun zum Maskottchen des Unternehmens:
g.V(company).out('hasMascot')
Dies gibt die ausgehenden Scheitelpunkte vom Scheitelpunktcompany
und die Kante zwischen ihnen alshasMascot
zurück. Wir können auch das Gegenteil tun und die Firma mit dem Maskottchensammy
wie folgt in Verbindung bringen:
g.V(sammy).in('hasMascot')
Dies sind ein paar grundlegende Gremlin-Befehle, mit denen Sie beginnen können. Weitere Informationen finden Sie in den beschreibendenApache Tinkerpop3 documentation.
Verlassen Sie die Gremlin-Konsole, indem SieCTRL+C
drücken.
Fügen wir nun einige benutzerdefinierte Konfigurationsoptionen für Titan hinzu.
[[Schritt-3 - Konfigurieren von Titan]] == Schritt 3 - Konfigurieren von Titan
Erstellen wir eine neue Konfigurationsdatei, mit der Sie alle Ihre benutzerdefinierten Konfigurationsoptionen für Titan definieren können.
Titan hat eine steckbare Speicherschicht; Anstatt den Datenspeicher selbst zu verwalten, verwendet Titan eine andere Datenbank, um ihn zu verwalten. Titan bietet derzeit drei Optionen für die Speicherdatenbank: Cassandra, HBase und BerkeleyDB. In diesem Lernprogramm wird Cassandra als Speicher-Engine verwendet, da sie hochgradig skalierbar und hochverfügbar ist.
Erstellen Sie zuerst die Konfigurationsdatei:
nano conf/gremlin-server/custom-titan-config.properties
Fügen Sie diese Zeilen hinzu, um zu definieren, was das Speicher-Backend ist und wo es verfügbar ist. Das Speicher-Backend ist aufcassandrathrift
eingestellt, was besagt, dass wir Cassandra für die Speicherung mit derthrift-Schnittstelle für Cassandra verwenden:
conf/gremlin-server/custom-titan-config.properties
storage.backend=cassandrathrift
storage.hostname=localhost
Fügen Sie dann diese drei Zeilen hinzu, um zu definieren, welches Such-Backend verwendet werden soll. Wir verwendenelasticsearch
als Such-Backend.
conf/gremlin-server/custom-titan-config.properties
...
index.search.backend=elasticsearch
index.search.hostname=localhost
index.search.elasticsearch.client-only=true
Die dritte Zeile zeigt an, dass ElasticSearch ein Thin Client ist, der keine Daten speichert. Wenn Siefalse
festlegen, wird ein regulärer ElasticSearch-Clusterknoten erstellt, in dem möglicherweise Daten gespeichert werden, die wir jetzt nicht möchten.
Fügen Sie abschließend diese Zeile hinzu, um Gremlin Server mitzuteilen, welche Art von Diagramm bereitgestellt werden soll.
conf/gremlin-server/custom-titan-config.properties
...
gremlin.graph=com.thinkaurelius.titan.core.TitanFactory
Im Verzeichnisconf
stehen eine Reihe von Beispielkonfigurationsdateien zur Verfügung, in denen Sie nachschlagen können.
Speichern Sie die Datei und beenden Sie den Editor.
Wir müssen diese neue Konfigurationsdatei zum Gremlin-Server hinzufügen. Öffnen Sie die Konfigurationsdatei des Gremlin Servers.
nano conf/gremlin-server/gremlin-server.yaml
Navigieren Sie zum Abschnittgraphs
und suchen Sie diese Zeile:
conf/gremlin-server/gremlin-server.yaml
..
graph: conf/gremlin-server/titan-berkeleyje-server.properties}
..
Ersetzen Sie es mit diesem:
conf/gremlin-server/gremlin-server.yaml
..
graph: conf/gremlin-server/custom-titan-config.properties}
..
Speichern und schließen Sie die Datei.
Starten Sie nun Titan neu, indem Sie Titan stoppen und erneut starten.
./bin/titan.sh stop
./bin/titan.sh start
Nachdem wir eine benutzerdefinierte Konfiguration haben, konfigurieren wir Titan so, dass es als Dienst ausgeführt wird.
[[Schritt 4 - Verwalten von Titan mit Systemd]] == Schritt 4 - Verwalten von Titan mit Systemd
Wir sollten sicherstellen, dass Titan jedes Mal automatisch startet, wenn unser Server hochfährt. Wenn unser Server versehentlich neu gestartet wurde oder aus irgendeinem Grund neu gestartet werden musste, möchten wir, dass auch Titan startet.
Um dies zu konfigurieren, erstellen wir eine Systemd-Unit-Datei für Titan, damit wir sie verwalten können.
Zu Beginn erstellen wir eine Datei für unsere Anwendung im Verzeichnis/etc/systemd/system
mit der Erweiterung.service
:
sudo nano /etc/systemd/system/titan.service
Eine Unit-Datei besteht aus Abschnitten. Der Abschnitt[Unit]
gibt die Metadaten und Abhängigkeiten unseres Dienstes an, einschließlich einer Beschreibung unseres Dienstes und des Zeitpunkts, zu dem unser Dienst gestartet werden soll.
Fügen Sie diese Konfiguration zur Datei hinzu:
/etc/systemd/system/titan.service
[Unit]
Description=The Titan database
After=network.target
Wir geben an, dass der Dienstaftertarten soll, wenn das Netzwerkziel erreicht wurde. Mit anderen Worten, wir starten diesen Dienst erst, nachdem die Netzwerkdienste bereit sind.
Nach dem Abschnitt[Unit]
definieren wir den Abschnitt[Service]
, in dem wir angeben, wie der Dienst gestartet werden soll. Fügen Sie dies zur Konfigurationsdatei hinzu:
/etc/systemd/system/titan.service
[Service]
User=sammy
Group=www-data
Type=forking
Environment="PATH=/home/sammy/titan-1.0.0-hadoop1/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
WorkingDirectory=/home/sammy/titan-1.0.0-hadoop1/
ExecStart=/home/sammy/titan-1.0.0-hadoop1/bin/titan.sh start
ExecStop=/home/sammy/titan-1.0.0-hadoop1/bin/titan.sh stop
Wir definieren zuerst den Benutzer und die Gruppe, unter denen der Dienst ausgeführt wird. Dann definieren wir die Art der Dienstleistung, die es sein wird. Der Typ wird standardmäßig alssimple
angenommen. Da das Startskript, mit dem wir Titan starten, andere untergeordnete Programme startet, geben wir den Diensttyp alsforking
an.
Anschließend geben wir die UmgebungsvariablePATH
, das Arbeitsverzeichnis von Titan und den Befehl zum Starten von Titan an. Wir weisen der VariablenExecStart
den Befehl zum Starten von Titan zu.
Die VariablenExecStop
definieren, wie der Dienst gestoppt werden soll.
Schließlich fügen wir den Abschnitt[Install]
hinzu, der folgendermaßen aussieht:
/etc/systemd/system/titan.service
[Install]
WantedBy=multi-user.target
Im AbschnittInstall
können Sie den Dienst aktivieren und deaktivieren. Die DirektiveWantedBy
erstellt ein Verzeichnis mit dem Namenmulti-user.target
im Verzeichnis/etc/systemd/system
. Systemd erstellt dort eine symbolische Verknüpfung dieser Gerätedatei. Durch Deaktivieren dieses Dienstes wird diese Datei aus dem Verzeichnis entfernt.
Speichern Sie die Datei, schließen Sie den Editor und starten Sie den neuen Dienst:
sudo systemctl start titan
Aktivieren Sie dann diesen Dienst, sodass Titan bei jedem Start des Servers Folgendes startet:
sudo systemctl enable titan
Sie können den Status von Titan mit dem folgenden Befehl überprüfen:
sudo systemctl status titan
Weitere Informationen zu Unit-Dateien finden Sie im TutorialUnderstanding Systemd Units and Unit files.
Fazit
Sie haben jetzt ein grundlegendes Titan-Setup auf Ihrem Server installiert. Wenn Sie einen tieferen Einblick in die Architektur von Titan erhalten möchten, zögern Sie nicht, derenofficial documentation zu überprüfen.
Nachdem Sie Titan eingerichtet haben, sollten Sie mehr über Tinkerpop3 und Gremlin erfahren, indem Sie sich dieofficial documentationansehen.