如何在 JanusGraph 中将多个图实例相互解耦
How to decouple multiple graph instances from each other in JanusGraph
我正在尝试在 Janusgraph 中创建多个图形实例,但它们似乎都对彼此具有相同的引用,因此对一个进行的任何操作都会影响其他(请参见下面的示例)。我想将这些图表设置为单独的实例,彼此不同,但在下面的步骤中我步履蹒跚。
向 JanusGraph 添加新图所采取的步骤
目标:有两个名为 graph1
、graph2
的图,遍历对象分别名为 g1
、g2
,并且彼此不同。
创建名为 graph1.properties
、graph2.properties
的属性文件。包含内容(对于 Cassandra 后端):
gremlin.graph=org.janusgraph.core.JanusGraphFactory
gremlin.graph=org.janusgraph.core.ConfiguredGraphFactory
storage.backend=cql
storage.hostname=127.0.0.1
^ 这就是我猜测的核心问题所在 - graph1.properties
和 graph2.properties
具有相同的内容...但我不确定要更改什么
将图表添加到 gremlin-server.yaml
文件,该文件映射到新创建的 graph1.properties
和 graph2.properties
文件。
graphs: {
graph1: conf/gremlin-server/graph1.properties,
graph2: conf/gremlin-server/graph2.properties
}
将遍历对象名称添加到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
,对于您要彼此分开的每个图,该参数都不相同。
我正在尝试在 Janusgraph 中创建多个图形实例,但它们似乎都对彼此具有相同的引用,因此对一个进行的任何操作都会影响其他(请参见下面的示例)。我想将这些图表设置为单独的实例,彼此不同,但在下面的步骤中我步履蹒跚。
向 JanusGraph 添加新图所采取的步骤
目标:有两个名为 graph1
、graph2
的图,遍历对象分别名为 g1
、g2
,并且彼此不同。
创建名为
graph1.properties
、graph2.properties
的属性文件。包含内容(对于 Cassandra 后端):gremlin.graph=org.janusgraph.core.JanusGraphFactory gremlin.graph=org.janusgraph.core.ConfiguredGraphFactory storage.backend=cql storage.hostname=127.0.0.1
^ 这就是我猜测的核心问题所在 - graph1.properties
和 graph2.properties
具有相同的内容...但我不确定要更改什么
将图表添加到
gremlin-server.yaml
文件,该文件映射到新创建的graph1.properties
和graph2.properties
文件。graphs: { graph1: conf/gremlin-server/graph1.properties, graph2: conf/gremlin-server/graph2.properties }
将遍历对象名称添加到
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
,对于您要彼此分开的每个图,该参数都不相同。