如何在 JanusGraph 中将多个图实例相互解耦

How to decouple multiple graph instances from each other in JanusGraph

我正在尝试在 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 具有相同的内容...但我不确定要更改什么

  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

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

如您在 JanusGraph Cassandra docs 中所见:

  • keyspace: The name of the keyspace to store the JanusGraph graph in. Allows multiple JanusGraph graphs to co-exist in the same Cassandra cluster.

查看JanusGraph configuration reference,我们看到关于这个配置参数的更多信息:

  • name: storage.cql.keyspace
  • description: "The name of JanusGraph’s keyspace. It will be created if it does not exist."
  • data type: String
  • default value: janusgraph
  • mutability: LOCAL

因此,如果不在您的配置中指定此参数,两个图都会存储在默认的 janusgraph 键空间中,这会导致它们相互冲突。

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