图数据库 --- >Janusgraph 基础 (二)

图数据库 — > Tinkerpop (一)
图数据库 — >Janusgraph 基础 (二)
图数据库 — > hugegraph (三)
图数据库 — > spark 和janusgraph组合(四)
图数据库 — > JanusGraph可视化之Gephi (五)

JanusGraph作为Titan的继承者,汲取了Titan和TinkerPop框架诸多的优点,成为了当前热门的图数据库领域的佼佼者,JanusGraph的一大特性是和其他组件的交互能力强,比如像存储的Hbase, full-text search的elasticsearch等,也可以很方便地和graphx等olap引擎交互。

不同图的管理

在处理中,会创建并使用不同的图,就想sql中的table一样,Janusgraph这里使用的是不同的配置来管理不同的图。这里有两个组件能够分别对不同的图进行管理:ConfiguredGraphFactory和JanusGraphFactory。

ConfiguredGraphFactory

我们在启动JanusGraph server时,需要对启动的yaml文件进行配置,才可以使用该组件
在gremlin-server.yaml文件中,增加:

graphManager: org.janusgraph.graphdb.management.JanusGraphManager
graphs: {
  ConfigurationManagementGraph: conf/JanusGraph-configurationmanagement.properties
}

这里面的conf/JanusGraph-configurationmanagement.properties为

gremlin.graph=org.janusgraph.core.ConfiguredGraphFactory
storage.backend=cql
graph.graphname=ConfigurationManagementGraph
storage.hostname=127.0.0.1

配置好之后,启动server:./bin/janusgraph.sh start
打开 ./bin/gremlin.sh终端

gremlin> map = new HashMap();
gremlin> map.put("storage.backend","cql"); map.put("storage.hostname", "127.0.0.1");
gremlin> ConfiguredGraphFactory.createTemplateConfiguration(new MapConfiguration(map));
==>null
gremlin> g2 = ConfiguredGraphFactory.create("graph2"); //使用配置创建了新图,新图的存储文件夹也同名(graph2)的建好
gremlin> g3 = ConfiguredGraphFactory.create("graph3");

查看所有的图

  • JanusGraphFactory.getGraphNames()
  • ConfiguredGraphFactory.getGraphNames()

JanusGraphFactory

使用该组件之间使用其打开相应的配置文件,配置文件里对对于存储backend,index及图名做了相应设置:

graph = JanusGraphFactory.open('conf/janusgraph-cql.properties')

也可以直接在启动服务前配置yaml文件:

graphManager: org.janusgraph.graphdb.management.JanusGraphManager
graphs {
  graph1: conf/graph1.properties,
  graph2: conf/graph2.properties
}

通过下面命令获取所有的图信息:

JanusGraphFactory.getGraphNames()

他们的区别在于:

  1. ConfiguredGraphFactory:

    • 只有在服务启动时你已经使用ConfigurationManagementGraph API来配置你的server了,ConfiguredGraphFactory才能被使用。
    • 其好处在于,
      • 你只需要提供一个String来访问你的图,而不是JanusGraphFactory—它要求你在每次打开图时都要指定在访问图形时要使用的后端信息。
        // ConfiguredGraphFactory
        ConfiguredGraphFactory.create(“graphName”)
        // JanusGraphFactory
        graph = JanusGraphFactory.open('conf/janusgraph-cql.properties')
        
      • 如果你的ConfigurationManagementGraph配置了分布式存储后端,则你的图配置可供群集中的所有JanusGraph节点使用。
  2. ConfigurationManagementGraph

ConfigurationManagementGraph是一个Singleton,允许你使用ConfiguredGraphFactory create/update/remove 图的配置。 请参阅上文有关配置服务以使用这些API。

注意:ConfiguredGraphFactory提供了一个通过ConfigurationManagementGraph来管理图配置的方法,因此你可以使用相应的ConfiguredGraphFactory静态方法,而不是对单例本身进行操作。 例如,你可以使用

ConfiguredGraphFactory.removeTemplateConfiguration()
而不是ConfiguredGraphFactory.getInstance().removeTemplateConfiguration()

注意

为方便起见,如果你的配置文件中指定了graph.graphname,但未配置后端存储的目录,tablename或keyspacename,则相关参数将自动设置为graph.graphname的值。 但是,如果你配置了其中一个参数,则优先使用该值。 如果你没有配置,则默认为配置项使用默认值。
一个特例是storage.root的配置项。 这是一个新的配置项,用于指定将用于需要本地存储目录访问的任何后端目录的根目录。 如果提供此参数,则还必须提供graph.graphname属性,这个绝对存储目录将是storage.root路径加上graph.graphname路径。

设置不同图的方式

  • graph.graphname
    map.put("graph.graphname", "graph1");
  • keyspace
    storage.cql.keyspace=janusgraph
  • 路径
map = new HashMap();
map.put("storage.backend", "berkeleyje");
map.put("storage.root", "/data/graphs");
ConfiguredGraphFactory.createTemplateConfiguration(new
MapConfiguration(map));

g1 = ConfiguredGraphFactory.create("graph1"); //storage directory === /data/graphs/graph1
g2 = ConfiguredGraphFactory.create("graph2"); //storage directory === /data/graphs/graph2
g3 = ConfiguredGraphFactory.create("graph3"); //storage directory === /data/graphs/graph3

以cassandra为存储docker

  1. docker run -d -p 7001:7001 -p 7199:7199 -p 9042:9042 -p 9160:9160 -v /var/lib/cassandra:/var/lib/cassandra -e CASSANDRA_START_RPC=true --name cass cassandra
  2. ./bin/gremlin.sh
  3. graph = JanusGraphFactory.open('conf/janusgraph-cql.properties')
  4. graphtraversalsource[standardjanusgraph[cql:[127.0.0.1]], standard]
    即连接上该存储

直接使用java连接数据

https://github.com/JanusGraph/janusgraph/tree/master/janusgraph-examples

Janusgraph服务

启动服务

$ bin/janusgraph.sh start
Forking 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.

gremlin console连接

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

总结

  1. gremline console是独立的,没有janusgraph server一样可以运行,只需要相应的服务如Cassandra和elasticsearch已启动
  2. janusgraph server启动前,上述两个服务均需要事先启动
  3. 每个图的管理,以及保存的路径由properties属性文件确定

Ref:
1 JanusGraph ConfiguredGraphFactory
4. ConfiguredGraphFactory
5. git直连运行java
6. janusgraph server
7. janusgraph 文档
8. 如何新建一张JanusGraph图

你可能感兴趣的:(图数据库)