配置

一个JanusGraph图数据库包含一个或者多个JanusGraph实例。可以通过传入一个配置文件来告诉JanusGraph来如何打开一个JanusGraph图的实例。

一个JanusGraph的配置指定了JanusGraph应该使用什么模块。控制了JanusGraph部署的各个可操作方面。并且提供了一组可以对JanusGraph集群进行性能调优的参数。

一个JanusGraph最少需要配置持久化引擎,这样让JanusGraph可以被作为一个存储后端。后边会详细讲JanusGraph支持的存储盒如何配置。如果需要使用高级的查询,(比如全文索引,地理信息查询,范围查询)我们还需要一个额外配置一个索引后端。后边也会细讲。如果对于查询的性能比较关心,caching也应该被打开。后边会讲。

配置样例

下边是有些配置的例子来演示如何去配置最常用的存储,索引和性能模块。例子里也只覆盖了一部分配置项。

Cassandra+Elasticsearch

配置JanusGraph使用一个运行在本地的Cassandra来作为存储引擎,并且用一个远程的Elasticsearch作为索引引擎。

storage.backend=cql
storage.hostname=localhost

index.search.backend=elasticsearch
index.search.hostname=100.100.101.1, 100.100.101.2
index.search.elasticsearch.client-only=true

HBase+Caching

使用远程HBase作为JanusGraph的持久化引擎。使用JanusGraph的caching模块来提高性能

storage.backend=hbase
storage.hostname=100.100.101.1
storage.port=2181

cache.db-cache = true
cache.db-cache-clean-wait = 20
cache.db-cache-time = 180000
cache.db-cache-size = 0.5

BerkeleyDB

使用BerkeleyDB作为JanusGraph的一个内嵌的持久化引擎,并且用Elasticsearch作为一个内嵌的索引系统

storage.backend=berkeleyje
storage.directory=/tmp/graph

index.search.backend=elasticsearch
index.search.directory=/tmp/searchindex
index.search.elasticsearch.client-only=false
index.search.elasticsearch.local-mode=true

更多例子

有一些配置的例子在conf/目录下可以用来快速的使用JanusGraph。可以通过JanusGraphFactory.open()进行打开:

// Connect to Cassandra on localhost using a default configuration
graph = JanusGraphFactory.open("conf/janusgraph-cql.properties")
// Connect to HBase on localhost using a default configuration
graph = JanusGraphFactory.open("conf/janusgraph-hbase.properties")

使用配置

配置是如何提供给JanusGraph和实例化的方式有关。

JanusGraphFactory

Gremlin Console

JanusGraph的发布里包含了Gremlin Console。可以通过gremlin.sh或者gremlin.bat启动。

graph = JanusGraphFactory.open('path/to/configuration.properties')

JanusGraph Embedded

也可以在一个基于JVM的客户端程序里通过代码调用JanusGraphFactory来创建一个graph。然后用JanusGraph提供的API来操作图。

简写

在JanusGraph graph集群里,如果已经配置好,只需要指定存储的话,JanusGraphFactory可以接受一个冒号分隔的字符串来指定存储后端的名字和hostname或者目录.

graph = JanusGraphFactory.open('cql:localhost')
graph = JanusGraphFactory.open('berkeleyje:/tmp/graph')

JanusGraph Server

JanusGraph本身是一组简单的jar文件。没有执行线程。有两种方式可以连接,使用JanusGraph数据库。
方式:
1. 可以在客户端程序里调用JanusGraph。客户端程序提供执行线程。
2. JanusGraph 包提供一个一直运行的进程,启动后,运行其他程序发出对JanusGraph的调用。这个一直运行的进程就是JanusGraph Server。

对于一个JanusGraph Server,JanusGraph用Apache TinkerPop里的Gremlin Server来提供服务。JanusGraph提供了一个开箱即用的配置用来快速上手JanusGraphServer.当然你也可以通过配置来实现更多功能。

我们是通过配置 ./conf/gremlin-server/下的 JanusGraph Server yaml配置文件来实现配置的。为了让JanusGraphServer配置一个graph实例,JanusGraph Server的配置文件需要下边的设置:

...
graphs: {
  graph: conf/janusgraph-berkeleyje.properties
}
scriptEngines: {
  gremlin-groovy: {
    plugins: { org.janusgraph.graphdb.tinkerpop.plugin.JanusGraphGremlinPlugin: {},
               org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
               org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {},
               org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]},
               org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/empty-sample.groovy]}}}}
...

graphs定义了JanusGraph的配置。上边的例子用conf/janusgraph-berkeleyje.properties来配置图。pulgins的条目启用了JanusGraph Gremlin的plugin。可以自动引用JanusGraph的类,这样它们就会被远程调用的脚本引用。

运行 server

JanusGraph 的zip文件包含了一个快速启动的server模块,它的脚本在bin/janusgraph.sh。它启动了一个Cassandra存储,Elasticsearch索引的Gremlin Server。

因为安全问题,janusgraph.sh 必须以一个非root用户启动

全局配置

JanusGraph 分为local和global配置选项。Local配置是对每个JanusGraph实例起作用的。Global配置是对集群里的所有实例起作用的。更具体的说,JanusGraph分为下边5个级别:
1. Local 这些配置对每个JanusGraph实例起作用。它是通过实例化JanusGraph时传出的配置来指定的。
2. MASHABLE 这些配置是可以被LOCAL配置文件复写,如果LOCAL配置没有指定,则从Global JanusGraph集群配置文件读取。
3. GLOBAL 只能从集群配置里读取,不能被具体实例覆盖
4. GLOBAL_OFFLINE 和GLOBAL类似,但是修改需要集群重启。
5. FIXED JanusGraph集群一旦初始化后,不能修改。

当集群里的第一个JanusGraph生成,GLOBAL配置就会被从本地配置文件读取来配置。随后可以通过JanusGraph的management API来更改Global 配置。为了获取management API,可以通过在JanusGraph的实例上调用g.getManagementSystem()来获取。下边的例子演示了如何更改默认的缓存行为:

mgmt = graph.openManagement()
mgmt.get('cache.db-cache')
// Prints the current config setting
mgmt.set('cache.db-cache', true)
// Changes option
mgmt.get('cache.db-cache')
// Prints 'true'
mgmt.commit()
// Changes take effect

修改离线设置

GLOBAL_OFFLINE的配置项对正在运行的实例没有影响,只会对新启动的实例有影响。或者重启,这样对所有实例都起作用。通过下边的步骤来修改GLOBAL_OFFLINE的属性:
1. 留下一个JanusGraph的实例,关掉集群里其他实例。
2. 连接到这个唯一的实例
3. 保证所有的事务都关闭
4. 保证没有新的事务开始
5. 打开Management API
6. 修改configuration配置项
7. 调用commit会自动关闭当前的graph实例
8. 重启所有的实例

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: