Birçok giden ilişkiyi olan bir düğüme sahip bir grafiğim var. Daha fazla ilişki eklediğimde yeni giden ilişkiler eklemek için gereken süre azalır. Bozunma, ilişkinin zaten mevcut olmadığını kontrol etmek için geçen süreden kaynaklanıyor gibi görünüyor (ilişkileri eklemek için MERGE kullanıyorum).Neo4j Birleştirme sorgusunu bir düğümde birçok ilişkiyle nasıl en iyi duruma getirebilirim?
İlişkilerin hedef düğümlerinin kendileriyle çok az ilişkisi vardır. Neo4j'i, kaynak düğümden değil, hedef düğümden ilişkinin varlığını kontrol etmenin herhangi bir yolu var mı?
Sorunu yeniden oluşturmak için test komut dosyası. 0 ile HAS
ilişkisiyle düğüm 0'a bağlı 1000 düğüm ve ardından 1000 düğüm içeren bir düğüm oluşturur. Düğümler eklendikçe yürütme süresi doğrusal olarak artar.
CREATE CONSTRAINT ON (n:Node) ASSERT n.id IS UNIQUE
UNWIND RANGE(1,1000) AS i
MERGE (from:Node { id: 0 })
MERGE (to:Node { id: i})
MERGE (from)-[:HAS]->to
Eklendi 1001 etiket, 1001 düğümlerini oluşturulan 1001 özellikleri ayarlamak, 1000 ilişkileri, 3496 ms yürütülen deyimi yarattı.
Eklendi 1000
etiketler, 1000 düğümlerini oluşturulan 1000 özellikleri ayarlamak, 1000 ilişkileri, 7030 ms yürütülen deyimi yarattı. Eklendi 1000UNWIND RANGE(1001,2000) AS i MERGE (from:Node { id: 0 }) MERGE (to:Node { id: i}) MERGE (from)-[:HAS]->to
etiketler, 1000 düğümlerini oluşturulan 1000 özellikleri ayarlamak, 1000 ilişkileri, 10489 ms yürütülen deyimi yarattı. Eklendi 1000UNWIND RANGE(2001,3000) AS i MERGE (from:Node { id: 0 }) MERGE (to:Node { id: i}) MERGE (from)-[:HAS]->to
etiketler, 1000 düğümlerini oluşturulan 1000 özellikleri ayarlamak, 1000 ilişkileri, 14390 ms yürütülen deyimi yarattı.UNWIND RANGE(3001,4000) AS i MERGE (from:Node { id: 0 }) MERGE (to:Node { id: i}) MERGE (from)-[:HAS]->to
MERGE
yerine CREATE
kullanılıyorsa, performans çok daha iyidir. İlişkilerin benzersiz olduğundan emin olmak için CREATE
kullanamıyorum.
UNWIND RANGE(4001,5000) AS i
MERGE (from:Node { id: 0 })
MERGE (to:Node { id: i})
CREATE (from)-[:HAS]->to
Eklendi 1000 etiket, 1000 düğümlerini oluşturulan 1000 özellikleri ayarlamak, 1000 ilişkileri, 413 ms yürütülen deyimi yarattı.
Not: şifre birleştirme yürütülürken düğüm derecesi henüz kullanımı kadar zeki olmadığı için Neo4j v2.2.2 ile test edilmiştir
Teşekkürler, bu çok umut verici görünüyor. Test edeceğim ve nasıl gideceğini size bildireceğim. – Dave
Çalıştı mı? eğer öyleyse, lütfen kabul edin :) –
Bunu test ettim ve bize büyük bir performans artışı sağladı. Sorgu planlayıcısının bu optimizasyonu otomatik olarak yapabilmesi için bekliyorum. Tekrar teşekkürler Michael :) – Dave