【发布时间】:2015-06-09 16:32:17
【问题描述】:
节点
1000000 x ({prop:'a'})
1000000 x ({prop:'b'})
1000000 x ({prop:'c'})
节点集 = ~3MegaNodes
Obs.: prop 不是专有属性。
关系
1000 x [:TYPEA {date:20150301} ]
1000 x [:TYPEA {date:20150228} ]
1000 x [:TYPEA {date:20150227} ]
1000 x [:TYPEA {date:........} ]
1000 x [:TYPEA {date:19000101} ]
1000 x [:TYPEB {date:20150301} ]
1000 x [:TYPEB {date:20150228} ]
1000 x [:TYPEB {date:20150227} ]
1000 x [:TYPEB {date:........} ]
1000 x [:TYPEB {date:19000101} ]
TYPEA = 42062 天 x 1 000 相对
TYPEA = ~42 000 000
TYPEB = ~42 000 000
关系集 = ~84 MegaRels
我想匹配模式:
MATCH (n1 {prop:'a'}) -[ r1:TYPEA {date:20001231} ]-> (n2 {prop:'b'})
RETURN n2;
通过索引改进
我的 neo4j.properties:
relationship_auto_indexing=true
relationship_keys_indexable=date
密码查询:
START
r1 = relationship:relationship_auto_index('date:20001231')
MATCH (n1 {prop:'a'}) -[r1:TYPEA]-> (n2 {prop:'b'})
RETURN n2;
:) 工作正常!
现在,我想匹配模式:
MATCH
(n1 {prop:'a'})
-[ r1:TYPEA {date:20001231} ]->
(n2 {prop:'b'})
-[ r2:TYPEA {date:20001231} ]->
(n3 {prop:'c'})
RETURN n2, n3;
那我试试:
START
r1 = relationship:relationship_auto_index('date:20001231'),
r2 = relationship:relationship_auto_index('date:20001231')
MATCH (n1 {prop:'a'}) -[r1:TYPEA]-> (n2 {prop:'b'}) -[r2:TYPEA]-> (n3 {prop:'c'})
RETURN DISTINCT n2, n3;
:( 慢跑。
因为笛卡尔积会产生许多中间结果。 1000 ^ 2。
一方面,不可能在查询中多次使用同一个标识符。
另一方面,标签索引(架构)不适用于关系。
还有希望吗? (发布:Neo4j-community-2.2.0)
在查询密码中不使用子句开始时,关系遗留索引有什么好处?
感谢
【问题讨论】:
标签: indexing neo4j cypher relationship timing