JanusGraph实战-动态创建图(ConfiguredGraphFactory)

概述

本文讲述如何在JanusGraph中使用动态图。

为什么要使用动态图

在前面的一些文章中,介绍了简单的使用JanusGraph来进行一些图的操作。但请注意,绝大部分的操作都是基于现有的图基础上进行的,那么为什么启动JanusGraph Server就已经有图存在了呢?

其实是因为,我们的gremlin-sever.yaml配置文件中配置了这么一项:

graphs {
  graph1: conf/graph1.properties
}

这个配置表示在启动JanusGraph Server时就创建一个基于graph1.properties配置文件属性的图数据库,并和名称graph1进行绑定。这样我们在启动JanusGraph Server后就可以直接通过graph1来进行图的各种操作。

那么,能不能在启动JanusGraph Server后再创建和配置和操作图数据库呢?当然是可以的,这就是本文讲述的动态图。

ConfiguredGraphFactory介绍

可以将JanusGraph服务器配置为使用ConfiguredGraphFactory。ConfiguredGraphFactory是图的访问入口,类似于JanusGraphFactory。但ConfiguredGraphFactory提供了动态管理服务器上图的机制和方法。

ConfiguredGraphFactory概要

  • JanusGraphFactory是图的访问入口类,它每次提供Configuration对象来访问图。
  • ConfiguredGraphFactory使用ConfigurationManagementGraph为之前创建配置的图提供访问入口。它还提供了一个管理图配置的入口。
  • ConfigurationManagementGraph允许你管理图的配置。
  • JanusGraphManager是一个内部服务器组件,用于跟踪图的引用,前提是您的图使用它进行的配置。

ConfiguredGraphFactory与JanusGraphFactory

但是,这两个图工厂之间存在重要区别:

  • 只有在服务器启动时将服务器配置为使用ConfigurationManagementGraph API时,才能使用ConfiguredGraphFactory。

使用ConfiguredGraphFactory的优势:

  • 只需要提供一个String(图的名称)来访问图,而不像JanusGraphFactory(它要求在每次打开图形时指定您在访问图形时要使用的后端信息)。
  • 若ConfigurationManagementGraph配置了分布式存储后端,那么图配置可供集群中的所有JanusGraph节点使用。

在JanusGraph Server端配置ConfiguredGraphFactory

JanusGraph Server配置说明

要启用ConfiguredGraphFactory,需要在gremlin-server.yaml配置文件中配置ConfigurationManagementGraph变量的值,配置文件的内容如下:

graphManager: org.janusgraph.graphdb.management.JanusGraphManager
graphs: {
  ConfigurationManagementGraph: ./conf/gremlin-server/janusgraph-hbase-configurationgraph.properties
}

janusgraph-hbase-configurationgraph.properties配置文件的内容如下:

gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=hbase
graph.graphname=ConfigurationManagementGraph
storage.hostname=127.0.0.1

假设GremlinServer成功启动并且ConfigurationManagementGraph已成功实例化,那么ConfigurationManagementGraph Singleton上的所有可用API也将对所述图执行操作。此外,这是用于访问使用ConfiguredGraphFactory创建/打开图形的配置的图形。

准备配置文件

  • 准备gremlin-server配置文件
cp conf/gremlin-server/gremlin-server.yaml conf/gremlin-server/gremlin-server-dy2.yaml 

在文件conf/gremlin-server/gremlin-server-dy2.yaml中按上一节的说明修改对应的配置内容。

  • 准备ConfigurationManagementGraph配置文件
cp conf/janusgraph-cql-configurationgraph.properties conf/gremlin-server/janusgraph-hbase-configurationgraph.properties 

按上一节的说明来修改配置文件:janusgraph-hbase-configurationgraph.properties。若有外部索引系统,还可以在该文件中进行配置。

启动JanusGraph Server

输入以下命令来启动JanusGraph Server:

./bin/gremlin-server.sh ./conf/gremlin-server/gremlin-server-dy2.yaml

使用JanusGraph Server

再开一个终端,在终端中启动gremlin用户输入端:

./bin/gremlin.sh 
gremlin> 

在该终端中输入以下命令:

:remote connect tinkerpop.server conf/remote.yaml session
:remote console

map = new HashMap();
map.put("storage.backend", "hbase");
map.put("storage.hostname", "127.0.0.1");
map.put("graph.graphname", "graph8");
ConfiguredGraphFactory.createConfiguration(new MapConfiguration(map));
// 打开图graph8,这个和打开数据库一样
g8 = ConfiguredGraphFactory.open("graph8");
// 查看图的属性
g8.features()

// 更新配置
map = new HashMap();
map.put("storage.hostname", "10.0.0.1");
ConfiguredGraphFactory.updateConfiguration("graph1",
map);

// 打开已有配置
// 若已经创建并保存了其他的图,也可以在这里打开
g8 = ConfiguredGraphFactory.open("graph8");

// 可以先创建一个模板,基于该模板来创建图
map = new HashMap();
map.put("storage.backend", "hbase");
map.put("storage.hostname", "127.0.0.1");
ConfiguredGraphFactory.createTemplateConfiguration(new MapConfiguration(map));
// 完成此操作后,您可以使用模板配置创建图形:
ConfiguredGraphFactory.create("graph2");
// 打开图
ConfiguredGraphFactory.open("graph2");

// 更新模板
map = new HashMap();
map.put("index.search.backend", "elasticsearch");
map.put("index.search.hostname", "127.0.0.1");
map.put("index.search.elasticsearch.transport-scheme", "http");
ConfiguredGraphFactory.updateTemplateConfiguration(new
MapConfiguration(map));

// 删除配置
ConfiguredGraphFactory.removeConfiguration("graph1");

// 按新模板重新创建图数据库(注意:若图数据库存在会报错)
ConfiguredGraphFactory.create("graph1");

若没有任何错误说明安装成功了。可以根据官方的文档来尝试ConfiguredGraphFactory的更多的用法。

总结

本文说明如何使用JanusGraph提供的动态创建图的特性,其实也就是:使用ConfiguredGraphFactory工厂类。通过这个工厂类,可以动态创建图,并动态的修改图的配置,而这种修改对于整个JanusGraph的集群的节点都是可见的。

通过官方的ConfiguredGraphFactory文档,可以尝试一下ConfiguredGraphFactory更多的用法。

参考

  • ConfiguredGraphFactory

你可能感兴趣的:(图计算,JanusGraph,JanusGraph实战,JanusGraph动态图,JanusGraph使用)