kullanarak bir neo4j veritabanına düğüm eklemenin en etkili yolu nedir? Py2neo python kullanarak cypher komutlarını çalıştırarak (gömülmemiş) bir neo4j veritabanına çok sayıda düğüm (~ 500.000) eklemeye çalışıyorum modül (py2neo.cypher.execute). Sonunda, py2neo'ya olan bağımlılığı kaldırmam gerekiyor, ama şu anda cypher ve neo4j hakkında daha fazla şey öğrenene kadar kullanıyorum.Cypher
İki düğüm tipi A ve B var ve düğümlerin büyük çoğunluğu A tipindedir. İki olası ilişki r1 ve r2, öyle ki A- [r1] -A ve A- [r2] -B . A tipi düğümlerin her biri 0 - 100 r1 ilişkilere sahip olacak ve B tipi her düğümün 1 - 5000 r2 ilişkisi olacaktır.
Şu anda büyük CREATE deyimleri oluşturarak düğümler ekliyorum. Örneğin zaman ... grafikte doğrusal bir zincir oluşturan bir başka 5000 ya da düğümler ve ilişkileri olabilecek bir açıklama
CREATE (:A {uid:1, attr:5})-[:r1]-(:A {uid:2, attr:5})-[:r1]-...
sahip olabilir. Bu işe yarıyor, ama oldukça yavaş. Ben de tüm A tipi düğümleri eklemek sonra
CREATE INDEX ON :A(uid)
kullanarak bu düğümleri indeksleme ediyorum, tekrar ifadeleri CREATE kullanarak tip B düğümleri ekleyin. En sonunda, bir kaç bin VEYA ifadeleri temsil edebilir ...
MATCH c:B, m:A where c.uid=1 AND (m.uid=2 OR m.uid=5 OR ...)
CREATE (m)-[:r2]->(c)
nerede gibi bir ifade kullanarak r2 ilişkileri eklemek çalışıyorum. Bu, saniyede sadece birkaç ilişki ekleyerek gerçekten yavaş görünüyor.
Bunu yapmak için daha iyi bir yol var mı? Buradan tamamen uzak mıyım? this question'a baktım ama bu, düğümleri verimli bir şekilde yüklemek için cypher'in nasıl kullanılacağını açıklamıyor. Baktığım her şey, gerçek cypher sorgularının kullanılabileceğini göstermeden java kullanıyor gibi görünüyor.
İkinci yorum yazmak istiyorum: parametreler, daha küçük ifadeler, eğer 2.0 kullanıyorsanız, cypher için işlemsel http uç noktasını kullanmayı düşünün, bakınız: http://neo4j.org/develop/labies for cypher & import see: http: //www.neo4j.org/develop/import ve http://jexp.de/blog/2013/05/on-importing-data-in-neo4j-blog-series/ –
Öneri için teşekkürler. Python'dan gelen CREATE ifadeleriyle parametreleri nasıl kullanabileceğimi biliyor musunuz? Parametreler hakkında bulabildiğim her şey Java karma haritaları hakkında konuşuyor. – savagent
Py2neo'da params denen bir sözlük parametresidir. http://book.py2neo.org/en/latest/cypher.html HTTP üzerinden ham JSON yapıyorsanız, sorgu ile JSON isteğine {uid: ...} bir params ekleyebilirsiniz. –