我正在尝试在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
的内容相同...但是我不确定要更改什么 < / p>
将图形添加到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
答案 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
,该参数对于要彼此分离的每个图都不同。