【发布时间】:2018-03-08 19:46:34
【问题描述】:
我有一个关于基数为 Multiple 的属性的问题。当我使用具有基数列表或集合的属性时,我可以使用 BerkleyDB 搜索它吗?还是需要索引?我也可以对其进行 NotIn 和或 IN 操作吗?例如,如果我的属性包含数据 [1,2,3] 我可以在 [1,2,3] 或 [4] NotIn [1,2,3] 中执行 [2]
【问题讨论】:
标签: gremlin janusgraph
我有一个关于基数为 Multiple 的属性的问题。当我使用具有基数列表或集合的属性时,我可以使用 BerkleyDB 搜索它吗?还是需要索引?我也可以对其进行 NotIn 和或 IN 操作吗?例如,如果我的属性包含数据 [1,2,3] 我可以在 [1,2,3] 或 [4] NotIn [1,2,3] 中执行 [2]
【问题讨论】:
标签: gremlin janusgraph
无论选择何种存储后端,您都可以查询列表/集合属性。您应该使用索引来提高性能,因为它需要在没有图形索引的情况下进行完整扫描(您将看到 WARN 消息)。 without() 操作也需要全面扫描。
gremlin> [ JanusGraph.version(), Gremlin.version() ]
==>0.2.0
==>3.2.6
gremlin> graph = JanusGraphFactory.build().
......1> set('storage.backend', 'berkeleyje').
......2> set('storage.directory', '/tmp/berkeleyje').
......3> open()
==>standardjanusgraph[berkeleyje:/tmp/berkeleyje]
gremlin> mgmt = graph.openManagement()
==>org.janusgraph.graphdb.database.management.ManagementSystem@32b0876c
gremlin> nums = mgmt.makePropertyKey('nums').
......1> dataType(Integer.class).cardinality(Cardinality.LIST).make()
==>nums
gremlin> numsIdx = mgmt.buildIndex('numsIdx', Vertex.class).
......1> addKey(nums).buildCompositeIndex()
==>numsIdx
gremlin> mgmt.commit()
==>null
gremlin> g = graph.traversal()
==>graphtraversalsource[standardjanusgraph[berkeleyje:/tmp/berkeleyje], standard]
gremlin> g.addV().
......1> property(VertexProperty.Cardinality.list, 'nums', 1).
......2> property(VertexProperty.Cardinality.list, 'nums', 2).
......3> property(VertexProperty.Cardinality.list, 'nums', 3)
==>v[4136]
gremlin> g.addV().property(VertexProperty.Cardinality.list, 'nums', 4)
==>v[8232]
gremlin> g.V().valueMap(true)
17:53:44 WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [()]. For better performance, use indexes
==>[label:vertex,nums:[1,2,3],id:4136]
==>[label:vertex,nums:[4],id:8232]
gremlin> g.V().has('nums', within(2))
==>v[4136]
gremlin> g.V().has('nums', without(4))
17:53:45 WARN org.janusgraph.graphdb.transaction.StandardJanusGraphTx - Query requires iterating over all vertices [(nums <> 4)]. For better performance, use indexes
==>v[4136]
【讨论】: