欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-09 20:28:08
...

概述

本文讲述如何在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<String, Object>();
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<String, Object>();
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更多的用法。

参考