2015-04-04 3 views
0

NODESNeo4j Наследство связь авто-индекс Slow в шифровальщика запросе

1000000 x ({prop:'a'}) 
1000000 x ({prop:'b'}) 
1000000 x ({prop:'c'}) 

УЗЕЛ SET = ~ 3MegaNodes

OBS .: проп не является эксклюзивным atribute.


ВЗАИМООТНОШЕНИЯ

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 дней х 1 000 RELS

TypeA = ~ 42 000 000

TypeB = ~ 42 000 000

УСТАНОВКА ОТНОШЕНИЙ = ~ 84 MegaRels


Я хочу соответствовать шаблону:

MATCH (n1 {prop:'a'}) -[ r1:TYPEA {date:200} ]-> (n2 {prop:'b'}) 
RETURN n2; 

Улучшение путем индексации

Мои neo4j.properties:

relationship_auto_indexing=true 
relationship_keys_indexable=date 

шифровальщиком запрос:

START 
    r1 = relationship:relationship_auto_index('date:200') 
MATCH (n1 {prop:'a'}) -[r1:TYPEA]-> (n2 {prop:'b'}) 
RETURN n2; 

:) Прекрасно работайте!


Теперь я хочу соответствовать шаблону:

MATCH 
    (n1 {prop:'a'}) 
    -[ r1:TYPEA {date:200} ]-> 
    (n2 {prop:'b'}) 
    -[ r2:TYPEA {date:200} ]-> 
    (n3 {prop:'c'}) 
RETURN n2, n3; 

Тогда я стараюсь:.

START 
    r1 = relationship:relationship_auto_index('date:200'), 
    r2 = relationship:relationship_auto_index('date:200') 
MATCH (n1 {prop:'a'}) -[r1:TYPEA]-> (n2 {prop:'b'}) -[r2:TYPEA]-> (n3 {prop:'c'}) 
RETURN DISTINCT n2, n3; 

:(Run Slow


Поскольку декартово произведение происходит производство много промежуточных результатов. 1000^2.

С одной стороны, невозможно использовать один и тот же идентификатор более одного раза в запросе.

С другой стороны, индекс ярлыков (схема) не применяется к отношениям.

Есть надежда? (Релиз: Neo4j-community-2.2.0)

Есть ли какое-либо преимущество в отношении устаревшего индексации отношений, когда не используется начало предложения в запросе cypher?

Thanx

ответ

1

Это изменение концептуальный запрос, но работал отлично:

START 
    r = relationship:relationship_auto_index('date:200') 
WITH [x IN COLLECT(r) WHERE TYPE(x)='TYPEA'] AS cr 
UNWIND cr AS r1 
    MATCH (n1 {prop:'a'}) -[r1]-> (n2 {prop:'b'}) 
WITH DISTINCT n2, cr 
UNWIND cr AS r2 
    MATCH (n2) -[r2]-> (n3 {prop:'c'}) 
RETURN DISTINCT n2, n3; 

Thx

Смежные вопросы