配置
一个JanusGraph图数据库集群由一个或多个JanusGraph实例组成。要打开一个JanusGraph实例,必须提供一个配置,该配置指定了如何设置JanusGraph。
一个JanusGraph配置指定了JanusGraph应使用哪些组件,控制JanusGraph部署的所有操作方面,并提供多种调优选项以从JanusGraph集群获得最大性能。
至少,一个JanusGraph配置必须定义JanusGraph应使用的持久化引擎作为存储后端。 存储后端列出了所有支持的持久化引擎以及如何分别配置它们。如果需要高级图查询支持(例如全文搜索、地理搜索或范围查询),则必须配置额外的索引后端。详情请参见 索引后端。如果关注查询性能,则应启用缓存。缓存配置和调优在 JanusGraph缓存中有描述。
Example Configurations
以下是一些示例配置文件,用于演示如何配置最常用的存储后端、索引系统和性能组件。这里仅涵盖了可用配置选项的一小部分。有关所有选项的完整列表,请参阅配置参考。
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+缓存
设置JanusGraph使用远程运行的HBase持久化引擎 并利用JanusGraph的缓存组件以获得更好的性能。
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
设置JanusGraph使用BerkeleyDB作为嵌入式持久化引擎 并采用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
Configuration Reference 详细描述了所有这些配置选项。JanusGraph发行版的conf目录包含更多配置示例。
更多示例
在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控制台
JanusGraph 发行版包含一个命令行 Gremlin 控制台,可以轻松开始使用并与 JanusGraph 交互。调用
bin/gremlin.sh(Unix/Linux)或 bin/gremlin.bat(Windows)启动
控制台,然后使用工厂打开一个 JanusGraph 图,配置存储在可访问的属性配置文件中:
graph = JanusGraphFactory.open('path/to/configuration.properties')
JanusGraph Embedded
JanusGraphFactory 也可用于从基于JVM的用户应用程序中打开一个嵌入式JanusGraph图实例。在这种情况下,JanusGraph是用户应用程序的一部分,应用程序可以通过其公共API直接调用JanusGraph。
短代码
如果JanusGraph图集群之前已经配置过和/或 只需要定义存储后端,JanusGraphFactory接受 存储后端名称和主机名或目录的冒号分隔字符串表示。
graph = JanusGraphFactory.open('cql:localhost')
graph = JanusGraphFactory.open('berkeleyje:/tmp/graph')
JanusGraph Server
JanusGraph, 本身, 仅仅是一组没有执行线程的jar文件。有两种基本模式用于连接和使用JanusGraph数据库:
-
JanusGraph可以通过在客户端程序中嵌入JanusGraph调用来使用,其中程序提供执行线程。
-
JanusGraph 打包了一个长期运行的服务器进程,当启动后,允许远程客户端或在独立程序中运行的逻辑进行 JanusGraph 调用。这个长期运行的服务器进程被称为 JanusGraph Server。
对于JanusGraph服务器,JanusGraph使用Apache TinkerPop堆栈中的Gremlin Server来服务客户端请求。JanusGraph提供了一个开箱即用的配置,以便快速启动JanusGraph服务器,但可以更改配置以提供广泛的服务器功能。
配置JanusGraph Server是通过位于JanusGraph发行版的./conf/gremlin-server目录中的JanusGraph Server yaml配置文件完成的。要使用图实例(JanusGraph)配置JanusGraph Server,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配置的绑定。在上述情况下,它将graph绑定到位于conf/janusgraph-berkeleyje.properties的JanusGraph配置。plugins条目启用了JanusGraph Gremlin插件,该插件支持自动导入JanusGraph类,以便它们可以在远程提交的脚本中被引用。
了解更多关于在JanusGraph Server中配置和使用JanusGraph的信息。
服务器分发
JanusGraph zip文件包含一个快速启动服务器组件,帮助更容易地开始使用Gremlin Server和JanusGraph。调用bin/janusgraph.sh start以启动带有Cassandra和Elasticsearch的Gremlin Server。
注意
出于安全原因,Elasticsearch 以及 janusgraph.sh 必须
在非 root 账户下运行
注意
从0.5.1版本开始,这已包含在完整软件包版本中。
Global Configuration
JanusGraph区分本地和全局配置选项。 本地配置选项适用于单个JanusGraph实例。 全局配置选项适用于集群中的所有实例。更具体地说,JanusGraph区分以下五种配置选项的作用域:
-
LOCAL: 这些选项仅适用于单个JanusGraph实例,并在初始化JanusGraph实例时提供的配置中指定。
-
可屏蔽: 这些配置选项可以通过本地配置文件为单个janusgraph实例进行覆盖。如果本地配置文件未指定该选项,则其值将从全局janusgraph集群配置中读取。
-
全局: 这些选项始终从集群配置中读取,无法基于实例进行覆盖。
-
GLOBAL_OFFLINE: 类似于GLOBAL,但修改这些选项需要重启集群,以确保整个集群中的值保持一致。
-
已修复: 类似于全局,但该值在JanusGraph集群初始化后无法更改。
当集群中的第一个JanusGraph实例启动时,全局配置选项会从提供的本地配置文件中初始化。随后更改全局配置选项需要通过JanusGraph的管理API完成。要访问管理API,请在已打开的JanusGraph实例句柄g上调用g.getManagementSystem()。例如,要更改JanusGraph集群上的默认缓存行为:
mgmt = graph.openManagement()
mgmt.get('cache.db-cache')
// 打印当前配置设置
mgmt.set('cache.db-cache', true)
// 更改选项
mgmt.get('cache.db-cache')
// 打印 'true'
mgmt.commit()
// 更改生效
更改离线选项
更改配置选项不会影响正在运行的实例,仅适用于新启动的实例。更改GLOBAL_OFFLINE配置选项需要重启集群,以便所有实例立即生效更改。要更改GLOBAL_OFFLINE选项,请按照以下步骤操作:
- 关闭集群中除一个JanusGraph实例外的所有实例
- 连接到单实例
- 确保所有运行中的事务都已关闭
- 确保没有新的事务启动(即集群必须处于离线状态)
- 打开管理API
- Change the configuration option(s)
- Call commit which will automatically shut down the graph instance
- 重启所有实例
有关更多信息,包括每个选项的配置范围,请参阅配置参考中的完整配置选项列表。