如何在JanusGraph中解耦多个图形实例

如何在JanusGraph中解耦多个图形实例,graph,gremlin,tinkerpop3,janusgraph,gremlin-server,Graph,Gremlin,Tinkerpop3,Janusgraph,Gremlin Server,我试图在Janusgraph中创建多个graph实例,但它们似乎彼此都有相同的引用,因此对一个实例执行的任何操作都会影响其他实例(请参见下面的示例)。我想将这些图设置为单独的实例,彼此不同,但在下面的步骤中,我有些犹豫 向JanusGraph添加新图形所采取的步骤 目标:有两个名为graph1,graph2的图,遍历对象分别名为g1,g2,它们彼此不同 创建名为graph1.properties,graph2.properties的属性文件。包含内容(对于Cassandra后端): ^这就是我

我试图在Janusgraph中创建多个graph实例,但它们似乎彼此都有相同的引用,因此对一个实例执行的任何操作都会影响其他实例(请参见下面的示例)。我想将这些图设置为单独的实例,彼此不同,但在下面的步骤中,我有些犹豫

向JanusGraph添加新图形所采取的步骤 目标:有两个名为
graph1
graph2
的图,遍历对象分别名为
g1
g2
,它们彼此不同

  • 创建名为
    graph1.properties
    graph2.properties
    的属性文件。包含内容(对于Cassandra后端):

  • ^这就是我猜测的核心问题所在-
    graph1。属性
    graph2。属性
    具有相同的内容。。。但我不确定要改变什么

  • 将图形添加到
    gremlin server.yaml
    文件,该文件映射到新创建的
    graph1.properties
    graph2.properties
    文件

    graphs: {
        graph1: conf/gremlin-server/graph1.properties,
        graph2: conf/gremlin-server/graph2.properties
    }
    
  • 将遍历对象名称添加到
    空示例中。groovy

    globals << [g1 : graph1.traversal(), g2: graph2.traversal()]
    
    globals配置的本地主机/127.0.0.1:8182-[b7696535-97d9-4b59-b30f-f83707492057]
    小精灵>:远程控制台
    ==>所有脚本现在将被发送到Gremlin服务器-[localhost/127.0.0.1:8182]-[b7696535-97d9-4b59-b30f-f83707492057]-键入“:远程控制台”返回本地模式
    小精灵>g1
    ==>graphtraversalsource[standardjanusgraph[cql:[127.0.0.1]],标准]
    gremlin>g1.V().count()
    ==>100
    gremlin>g2.V().count()
    ==>100
    gremlin>g1.addV('item').property('id','123'))
    ==>v[327684312]
    gremlin>g1.tx().commit()
    ==>空
    gremlin>g1.V().count()
    ==>101
    gremlin>g2.V().count()
    
    ==>101由于您使用Cassandra存储数据,为了将两个图形完全分开,您需要为每个图形使用不同的Cassandra键空间,因为这是JanusGraph使用的存储单元

    如图所示:

    • 键空间:用于存储JanusGraph图形的键空间的名称。允许多个JanusGraph图形在同一Cassandra集群中共存
    查看,我们可以看到有关此配置参数的更多信息:

    • 名称:
      storage.cql.keyspace
    • description:“JanusGraph键空间的名称。如果它不存在,将创建它。”
    • 数据类型:
      String
    • 默认值:
      janusgraph
    • 易变性:
      LOCAL
    因此,通过在配置中不指定此参数,两个图形都存储在默认的
    janusgraph
    keyspace中,这会导致它们相互冲突


    由于您使用的是
    storage.backend=cql
    ,要分离这两个图形,只需提供一个显式参数
    storage.cql.keyspace
    ,对于要彼此分离的每个图形,该参数都是不同的。

    请查看我的更新答案;由于您使用的是
    storage.backend=cql
    ,因此需要在配置中设置
    storage.cql.keyspace
    ,而不是
    storage.cassandra.keyspace
    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