如何在JanusGraph中将多个图实例彼此解耦

时间:2019-07-01 14:54:04

标签: graph gremlin tinkerpop3 janusgraph gremlin-server

我正在尝试在Janusgraph中创建多个图形实例,但是它们似乎都相互引用相同,因此对一个对象执行的任何操作都会影响其他实例(请参见下面的示例)。我想将这些图设置为单独的实例,彼此不同,但是在下面步骤的某个地方步履蹒跚。

将新图形添加到JanusGraph的步骤

目标:具有两个名为graph1graph2的图形,遍历对象分别名为g1g2,并且彼此不同。

  1. 创建名为graph1.propertiesgraph2.properties的属性文件。带有内容(对于Cassandra后端):

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

^这是我猜测的核心问题所在-graph1.propertiesgraph2.properties的内容相同...但是我不确定要更改什么 < / p>

  1. 将图形添加到gremlin-server.yaml文件中,该文件映射到新创建的graph1.propertiesgraph2.properties文件。

    graphs: {
        graph1: conf/gremlin-server/graph1.properties,
        graph2: conf/gremlin-server/graph2.properties
    }
    
  2. 将遍历对象名称添加到empty-sample.groovy

    globals << [g1 : graph1.traversal(), g2: graph2.traversal()]
    

测试

下面的输出显示图已成功创建,但也表明它们相互引用。

==>Configured localhost/127.0.0.1:8182-[b7696535-97d9-4b59-b30f-f83707492057]
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [localhost/127.0.0.1:8182]-[b7696535-97d9-4b59-b30f-f83707492057] - type ':remote console' to return to local mode
gremlin> g1
==>graphtraversalsource[standardjanusgraph[cql:[127.0.0.1]], standard]
gremlin> g1.V().count()
==>100
gremlin> g2.V().count()
==>100
gremlin> g1.addV('item').property('id', '123')
==>v[327684312]
gremlin> g1.tx().commit()
==>null
gremlin> g1.V().count()
==>101
gremlin> g2.V().count()
==>101                  <-- g2 should have remained at 100

1 个答案:

答案 0 :(得分:1)

由于您使用的是Cassandra来存储数据,因此要将两个图形完全分开,因此您需要为每个图形使用不同的Cassandra键空间,因为这是JanusGraph使用的存储单位。

如您在JanusGraph Cassandra docs中所见:

  
      
  • 键空间:用于存储JanusGraph图的键空间的名称。允许多个JanusGraph图在同一Cassandra群集中共存。
  •   

看看JanusGraph configuration reference,我们会看到有关此配置参数的更多信息:

  
      
  • 名称:storage.cassandra.keyspace
  •   
  • 说明:“ JanusGraph的键空间的名称。如果不存在,将创建它。如果未提供,但graph.graphname被提供,则键空间将被设置为该键空间。”
  •   
  • 数据类型:String
  •   
  • 默认值:janusgraph
  •   
  • 可变性:LOCAL
  •   

因此,通过在配置中未指定此参数,两个图形都存储在默认的janusgraph键空间中,这导致它们相互冲突。

要分离两个图,只需提供一个显式参数storage.cassandra.keyspace,该参数对于要彼此分离的每个图都不同。