介绍
Titan是一个高度可扩展的开源图形数据库。 图形数据库是一种NoSQL数据库,其中所有数据都作为节点和边存储。 图形数据库适用于使用高度连接的数据的应用程序,数据之间的关系是应用程序功能的重要组成部分,如社交网站。 Titan用于存储和查询分布在多台机器上的大容量数据。 它可以配置为使用任何可用的存储后端,如Apache Cassandra,HBase和BerkeleyDB。 这样,如果您需要更改数据存储,将来更容易避免供应商锁定。
在本教程中,您将安装Titan 1.0。 然后,您将配置Titan使用Cassandra和ElasticSearch,两者都与Titan捆绑在一起。 Cassandra作为保存底层数据的数据存储,而ElasticSearch是一种免费文本搜索引擎,可用于在数据库中执行一些复杂的搜索操作。 您还将使用Gremlin从数据库创建和查询数据。
先决条件
要完成本教程,您将需要:
- 一个具有至少2 GB RAM的Ubuntu 16.04服务器,具有非root用户和防火墙。 您可以通过使用Ubuntu 16.04按照初始服务器设置进行设置 。
- 安装了Oracle JDK 8,您可以通过遵循此Java安装文章的“安装Oracle JDK”部分来执行此操作 。
第1步 - 下载,开箱和启动Titan
要下载Titan数据库,请转到他们的下载页面 。 您将看到两个Titan发行版可供下载。 对于本教程,我们希望Titan 1.0.0与Hadoop 1 。 这是稳定的版本。 使用wget
其下载到您的服务器:
wget http://s3.thinkaurelius.com/downloads/titan/titan-1.0.0-hadoop1.zip
下载完成后,解压zip文件。 默认情况下不安装解压文件的程序。 首先安装:
sudo apt-get install unzip
然后解压泰坦:
unzip titan-1.0.0-hadoop1.zip
这将创建一个名为titan-1.0.0-hadoop
的目录。
让我们开始泰坦,以确保一切正常。 更改为titan-1.0.0-hadoop
目录,并调用shell脚本启动Titan。
cd titan-1.0.0-hadoop1
./bin/titan.sh start
您将看到类似于此的输出:
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取决于一大堆其他工具。 所以每当泰坦开始,Cassandra,ElasticSearch和Gremlin-Server也一起启动。
您可以通过运行以下命令来检查Titan的状态。
./bin/titan.sh status
你会看到这个输出:
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
在下一步中,您将看到如何查询图表。
第2步 - 使用Gremlin查询图表
Gremlin是一种图形遍历语言 ,用于查询,分析和操作Graph数据库。 现在,Titan已经建立起来,您将使用Gremlin来创建和查询Titan的节点和边缘。
要使用Gremlin,请通过发出以下命令打开Gremlin控制台。
./bin/gremlin.sh
你会看到类似的回应:
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>
Gremlin控制台加载几个插件,以支持Titan和Gremlin特定的功能。
首先,实例化图形对象。 此对象表示我们正在处理的图表。 它有一些方法可以帮助管理图形,如添加顶点,创建标签和处理事务。 执行此命令来实例化图形对象:
graph = TitanFactory.open('conf/titan-cassandra-es.properties')
你会看到这个输出:
Output==>standardtitangraph[cassandrathrift:[127.0.0.1]]
输出指定TitanFactory.open()
方法返回的对象的类型,它是standardtitangraph
。 它还表示图使用的存储后端( cassandrathrift
),并且它通过localhost( 127.0.0.1
)连接。
open()
方法使用指定的属性文件中存在的配置选项创建一个新的Titan图,或者打开一个现有的图。 配置文件包含高级配置选项,如要使用的存储后端,缓存后端以及其他一些选项。 您可以创建自定义配置文件,并使用它,而不是默认值,您将在第3步中执行此操作。
一旦命令执行,图形对象就被实例化并存储在graph
变量中。 要查看图形对象的所有可用属性和方法,请键入graph.
,然后是TAB
键:
gremlin> graph.
addVertex( assignID( buildTransaction() close()
closeTransaction( commit( compute( compute()
configuration() containsEdgeLabel( containsPropertyKey( containsRelationType(
containsVertexLabel( edgeMultiQuery( edgeQuery( edges(
features() getEdgeLabel( getOrCreateEdgeLabel( getOrCreatePropertyKey(
...
...
在图形数据库中,您可以通过遍历数据来查询数据,而不是使用关系数据库中的连接和索引检索记录。 为了遍历一个图形,我们需要graph
参考变量的图形遍历源。 以下命令实现了这一点。
g = graph.traversal()
您使用此g
变量执行遍历。 让我们用这个变量创建几个顶点。 顶点类似于SQL中的行。 每个顶点都有一个顶点类型或label
及其相关联的属性,类似于SQL中的字段。 执行此命令:
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()
在这个例子中,我们分别创建了两个带有fish
和company
标签的顶点。 我们还定义了两个属性,即第一个顶点的name
和residence
,第二个顶点的name
和website
。 我们现在使用变量sammy
和company
访问这些顶点。
例如,为了列出第一个顶点的所有属性,请执行以下命令:
g.V(sammy).properties()
输出将如下所示:
Output==>vp[name->Sammy]
==>vp[residence->The Deep Blue Sea]
您还可以向顶点添加新属性。 让我们添加一个颜色:
g.V(sammy).property('color', 'blue')
现在,我们来定义这两个顶点之间的关系。 这是通过在它们之间创建一个edge
来实现的。
company.addEdge('hasMascot', sammy, 'status', 'high')
这创建了sammy
和company
之间的一个边缘,标签为hasMascot
,一个名为status
的属性的值为high
。
现在,让我们得到公司的吉祥物:
g.V(company).out('hasMascot')
这将从company
顶点返回传出的顶点,并将它们之间的边缘标记为hasMascot
。 我们也可以做相反的事情,让公司与吉祥物sammy
相关联:
g.V(sammy).in('hasMascot')
这些是几个基本的Gremlin命令开始使用。 要了解更多信息,请查看描述性Apache Tinkerpop3文档 。
按CTRL+C
退出Gremlin控制台。
现在我们为Titan添加一些自定义配置选项。
第3步 - 配置Titan
让我们创建一个新的配置文件,您可以使用它来定义Titan的所有自定义配置选项。
Titan有一个可插拔的存储层; Titan不是处理数据存储本身,而是使用另一个数据库来处理它。 Titan目前为存储数据库提供三个选项:Cassandra,HBase和BerkeleyDB。 在本教程中,我们将使用Cassandra作为存储引擎,因为它具有高度可扩展性并具有高可用性。
首先,创建配置文件:
nano conf/gremlin-server/custom-titan-config.properties
添加这些行以定义存储后台是什么以及可用的位置。 存储后端设置为cassandrathrift
,它说我们正在使用Cassandra与Cassandra的节俭接口进行存储:
storage.backend=cassandrathrift
storage.hostname=localhost
然后添加这三行来定义要使用的搜索后端。 我们将使用elasticsearch
搜索作为搜索后端。
...
index.search.backend=elasticsearch
index.search.hostname=localhost
index.search.elasticsearch.client-only=true
第三行表示ElasticSearch是不存储数据的瘦客户机。 将其设置为false
会创建一个可以存储数据的常规ElasticSearch集群节点,我们现在不需要。
最后,添加这一行告诉Gremlin Server它将要提供的图形的类型。
...
gremlin.graph=com.thinkaurelius.titan.core.TitanFactory
conf
目录中有许多示例配置文件可供您查看以供参考。
保存文件并退出编辑器。
我们需要将这个新的配置文件添加到Gremlin Server中。 打开Gremlin Server的配置文件。
nano conf/gremlin-server/gremlin-server.yaml
导航到graphs
部分,找到以下行:
..
graph: conf/gremlin-server/titan-berkeleyje-server.properties}
..
替换为:
..
graph: conf/gremlin-server/custom-titan-config.properties}
..
保存并退出文件。
现在通过停止Titan重新启动Titan并再次启动它。
./bin/titan.sh stop
./bin/titan.sh start
现在我们有一个自定义配置,我们来配置Titan作为服务运行。
第4步 - 使用Systemd管理Titan
我们应该确保每当我们的服务器启动时,Titan都会自动启动。 如果我们的服务器意外重新启动或由于任何原因必须重新启动,我们希望Titan也启动。
要配置这个,我们将为Titan创建一个Systemd单元文件,以便我们管理它。
要开始,我们在/etc/systemd/system
目录中为.service
扩展名创建一个我们应用程序的文件:
sudo nano /etc/systemd/system/titan.service
单位文件由部分组成。 [Unit]
部分指定了我们服务的元数据和依赖关系,包括我们服务的描述以及何时开始服务。
将此配置添加到文件中:
[Unit]
Description=The Titan database
After=network.target
我们指定服务应在达到网络目标后开始。 换句话说,我们只有在网络服务准备好之后才启动这个服务。
在[Unit]
部分之后,我们定义[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
我们首先定义该服务运行的用户和组。 然后我们定义它将要的服务类型。 默认情况下,该类型被认为是simple
的。 由于我们正在使用启动脚本启动Titan启动其他子程序,所以我们将服务类型指定为forking
。
然后我们指定PATH
环境变量,Titan的工作目录和要执行的命令启动Titan。 我们分配命令将Titan启动到ExecStart
变量。
ExecStop
变量定义如何停止服务。
最后,我们添加[Install]
部分,如下所示:
[Install]
WantedBy=multi-user.target
Install
部分允许您启用和禁用该服务。 WantedBy
指令在/etc/systemd/system
目录下创建一个名为multi-user.target
的目录。 Systemd将在那里创建该单元文件的符号链接。 禁用此服务将从目录中删除此文件。
保存文件,关闭编辑器并启动新服务:
sudo systemctl start titan
然后启用此服务,以便每次服务器启动时,Titan启动:
sudo systemctl enable titan
您可以使用以下命令检查Titan的状态:
sudo systemctl status titan
要了解有关单元文件的更多信息,请阅读“ 了解系统单位和单位”文档 。
结论
您现在在服务器上安装了一个基本的Titan安装。 如果您想更深入地了解泰坦的架构,请不要犹豫,查看他们的官方文档 。