2014-09-04 27 views
6

Ben şu iki düğüm türleri vardır: Ben almaya çalışıyorumbelli ilişki (Cypher/Neo4j) yok düğümleri alın

(s)-[:offered_in]->(c) 

:

c:City {name: 'blah'} 
s:Course {title: 'whatever', city: 'New York'} 

bu oluşturmak için Looking şehirlere bağlı olmayan ve kentle ilişkiyi oluşturmayan tüm dersler (eğer mevcut değilse şehir oluşur). Ancak, sorun şu ki, veri kümem yaklaşık 5 milyon düğüm ve zaman aşımı yaptığım herhangi bir sorgulamadır (10k'lık artış olmadan).

... herhangi birinin tavsiyesi var mı? DÜZENLEME

:. Burada

ben şimdi koşuyorum işler için bir sorgu (yani onu olduğu gibi birkaç dakika sürer çünkü) milyonlardan (10k parçalar halinde yapılmalıdır etmiyor ise kenti yaratır 't) mevcut:

match (j:Job) 
where not has(j.merged) and has(j.city) 
WITH j 
LIMIT 10000 
MERGE (c:City {name: j.city}) 
WITH j, c 
MERGE (j)-[:in]->(c) 
SET j.merged = 1 
return count(j) 

(şimdilik öyle yapmaya çalışıyor, zaten eşleştirilmiş olanları süzmek için iyi bir yol bilmiyorum özel ile etiketleyerek zaten bir var niteliği 'birleşti' index on)

+0

Şu anda denediğiniz şeyi paylaşabilir misiniz? – JohnMark13

+0

Bunun daha fazla bağlam olmadan yanıtlanabileceğini sanmıyorum (ve sorunuza güncellemenizle uyuşuyor, iş üstleniyorum == kurs ve == offer_in). Mevcut veriler üzerinde mi çalışıyorsunuz yoksa bu toplu bir içe aktarma mı? Sistem kurulumunuz hakkında biraz bilgi verir misiniz? 'Birleştirilmiş' yerine WHERE NOT (j) - [: in] ->() kullanabilirsiniz. – JohnMark13

+0

Tarayıcı arayüzünden zaman aşımı görüyor musunuz? –

cevap

2

500000 adil bir f ew düğümleri ve% 90'ını burada oluşturmak istediğiniz ilişki olmadan önerdiğiniz diğer sorunuzda, biraz zaman alacaktır. Sisteminizde (Spec, neo kurulum, programlama ortamı) ve daha bilgi olmadan bu daha düzenli bir çözüme sadece iyi tahmin (eski verilere veya eki üzerine) bu çalışırken: Açıkçası

MATCH (j:Job) 
WHERE NOT (j)-[:IN]->() AND HAS(j.city) 
MERGE (c:City {name: j.city}) 
MERGE (j)-[:IN]->(c) 
return count(j) 

yapabilirsiniz sınırlarınızı gerektiği gibi geri ekleyin.

+0

5.000.000 düğümdür. nedense (ve bu bir) vardı sorgusu yinelenen şehirler ton üretir ... Ben pes ettik ve sadece küçük parçalar halinde bunu yapmak için bir python betik yazdım. Sonsuza dek sürecek, ama eşsizliği koruyor ve ihtiyacım olanı yapıyor. İlgili bir notta, "CREATE UNIQUE" ile de oynamayı denedim (bu, parçaların benzersizliğini garanti etmesi gerektiği için), fakat bana "ilişkisiz desen" demeyi ya da bunun kullanılmaması gerektiğini söyledi. yol (ya da bu çizgiler boyunca bir şey), bu yüzden işe yaramaz. – Diaspar

+1

Hangi dizinleri tanımladınız ve yukarıdaki gibi iki birleştirme deyimini kullanıyordunuz? Tek bir birleştirme ('MERGE (j) - [: IN] -> (c: Şehir {isim: j.city})'), benzersiz bağlanmamış desen nedeniyle kopyalar üretecektir. Sorunuzu daha fazla bilgi (daha önce ne denediniz, ne başarısız oldu) ile güncellerseniz bu mümkün olabilir! – JohnMark13