2014-03-29 3 views
0

큰 오브젝트 그래프를 Neo4j 데이터베이스에 저장해야합니다. Neo4jClient를 사용하여 Neo4j와 대화하기. 필자는 단일 쿼리에서 모든 필수 CREATE 등을 생성 (리플렉션 사용) 한 다음 ExecuteWithoutResults를 수행하기로 결정했습니다. 이는 코드 작성으로 인해 각 객체를 생성하지 못하도록하고 하나의 데이터베이스 호출로 전체 그래프를 작성하여 성능을 향상시킵니다.Neo4jClient 또는 Neo4j가 전체 쿼리를 처리하지 않습니다.

내 코드는 다음과 유사합니다 (그러나 분명히 더 복잡)입니다 :

ICypherFluentQuery query; 
foreach(...) { query = query.CreateUnique(...); } 
if (...) query = query.Match(...); 
... etc. etc. 

query.ExecuteWithoutResults(); 

결과는이 게시물의 끝에 긴 쿼리 (이 비주얼에 의해 제조 된 쿼리 변수의 값입니다 Studio 디버거).

문제는 내가 이것을 실행 한 후에 Neo4j 데이터베이스를 검사 할 때 쿼리의 시작 부분에 생성 된 항목 만 실제로 데이터베이스에있는 것입니다 (첫 번째 보조 프로그램까지). 나는 주문이 발전기를 변경하여이 일과 관련이 있다는 것을 확인했다. 다른 CREATE가 먼저 오게되었다. 결과는 새롭게 등장한 항목이 이제는 데이터베이스에 나타나고, 새로 EmailAddress 등에서 나타나지 않았다는 것이다.

이 문제가 발생하는 이유와 가능한 해결 방법에 대한 피드백은 크게 환영 할 것입니다.

"START root=node(0) 
MATCH root-[:HOSTS]->(n2) 
WHERE n2.Key = 2552851c9015412ea808 
WITH root,n2 
CREATE UNIQUE (n2)-[:AGENCY_HAS_RESIDENTIAL_UNITS]->(n3) 
CREATE (n3)-[:AGENCY_HAS_RESIDENTIAL_UNIT]->(n4 MyStory.Logic.CarerManagementSlice.Models.ResidentialUnit) 
WITH root,n4 
CREATE (n4)-[:RESIDENTIAL_UNIT_HAS_EMAIL_ADDRESS]->(n5 MyStory.Logic.Common.Models.EmailAddress) 
WITH root,n4,n5 
CREATE (n4)-[:RESIDENTIAL_UNIT_HAS_EMAIL_ADDRESS]->(n6 MyStory.Logic.Common.Models.EmailAddress) 
WITH root,n4,n6 
CREATE (n4)-[:RESIDENTIAL_UNIT_HAS_EMAIL_ADDRESS]->(n7 MyStory.Logic.Common.Models.EmailAddress) 
WITH root,n4,n7 
CREATE (n4)-[:RESIDENTIAL_UNIT_HAS_ADDRESS]->(n8 MyStory.Logic.CarerManagementSlice.Models.ResidentialUnitAddress) 
WITH root,n4,n8 
CREATE (n4)-[:RESIDENTIAL_UNIT_HAS_ADDRESS]->(n9 MyStory.Logic.CarerManagementSlice.Models.ResidentialUnitAddress) 
WITH root,n4,n9 
CREATE (n4)-[:RESIDENTIAL_UNIT_HAS_ADDRESS]->(n10 MyStory.Logic.CarerManagementSlice.Models.ResidentialUnitAddress) 
WITH root,n4,n10 
CREATE (n4)-[:RESIDENTIAL_UNIT_SUPPORTS_PROGRAM]->(n11 MyStory.Logic.CarerManagementSlice.Models.SupportingProgram) 
WITH root,n4,n11 
MATCH root-[:HOSTS]->(n12) 
WHERE n12.Key = 2552851c9015412ea808 
WITH root,n4,n11,n12 
MATCH (n12)-[:CENTRE_BELONGS_TO]-(n13) 
WITH root,n4,n11,n13 
MATCH (n13)-[:HAS_PROGRAM]->(n14) 
WHERE n14.UniqueId = 2 
WITH root,n4,n11,n14 
CREATE (n11)-[:SUPPORTING_PROGRAM_IS_LINKED_TO_PROGRAM]->(n14) 
WITH root,n4,n11 
CREATE (n4)-[:RESIDENTIAL_UNIT_SUPPORTS_PROGRAM]->(n15 MyStory.Logic.CarerManagementSlice.Models.SupportingProgram) 
WITH root,n4,n15 
MATCH root-[:HOSTS]->(n16) 
WHERE n16.Key = 2552851c9015412ea808 
WITH root,n4,n15,n16 
MATCH (n16)-[:CENTRE_BELONGS_TO]-(n17) 
WITH root,n4,n15,n17 
MATCH (n17)-[:HAS_PROGRAM]->(n18) 
WHERE n18.UniqueId = 2 
WITH root,n4,n15,n18 
CREATE (n15)-[:SUPPORTING_PROGRAM_IS_LINKED_TO_PROGRAM]->(n18) 
WITH root,n4,n15 
CREATE (n4)-[:RESIDENTIAL_UNIT_HAS_PHONE_NUMBER]->(n19 MyStory.Logic.Common.Models.PhoneNumberWithType) 
WITH root,n4,n19 
CREATE (n4)-[:RESIDENTIAL_UNIT_HAS_PHONE_NUMBER]->(n20 MyStory.Logic.Common.Models.PhoneNumberWithType) 
WITH root,n4,n20 
CREATE (n4)-[:RESIDENTIAL_UNIT_HAS_PHONE_NUMBER]->(n21 MyStory.Logic.Common.Models.PhoneNumberWithType) 
WITH root,n4,n21 
CREATE (n4)-[:HAS_RESIDENTIAL_UNIT_CLOSURE_REASON]->(n22 MyStory.Logic.CarerManagementSlice.Models.ResidentialUnitClosureReason) 
WITH root,n4,n22 
CREATE (n4)-[:HAS_RESIDENTIAL_UNIT_CLOSURE_REASON]->(n23 MyStory.Logic.CarerManagementSlice.Models.ResidentialUnitClosureReason) 
WITH root,n4,n23 
CREATE (n4)-[:HAS_RESIDENTIAL_UNIT_CLOSURE_REASON]->(n24 MyStory.Logic.CarerManagementSlice.Models.ResidentialUnitClosureReason) 
WITH root,n4,n24" 

답변

1

일부 경기가 실패하고 더 이상 실행하지 못할 수도 있습니까?

아마 그 중 일부에 MERGE를 사용해야합니까?

또는 선택적 일치로 바꾸고 Null 값을 올바르게 처리합니까?

Neo4j 브라우저 또는 셸에서 해당 명령문을 실행하면 어떻게됩니까? 그리고 파편을 실행하고 실제로 성명서의 결과를 반환 할 때?

가능한 경우 매개 변수를 사용할 때주의하십시오.

개인적으로 필자는 여러 문장으로 작성을 분할했지만 단일 HTTP 요청으로 작성을 실행합니다.

+0

네가 맞아, 실제로 Neo4j (내 질문에 표시된 쿼리와 대조적으로)에있는 쿼리가 – user1147862

+0

인 것으로 나타났습니다. 네가 맞아요, 실제로 Neo4j에 연결된 쿼리를 발견했습니다. 내 질문에 표시된 쿼리) 대신 WHERE n14.UniqueId = 2 (따옴표없이) 쿼리를 생성하는 방식 때문에 WHERE n14.UniqueId = "2" (따옴표와 함께)했다. 이렇게하면 Neo4j는 equals를 false로 평가합니다. 따옴표를 제거하면 문제가 해결되었습니다. – user1147862

관련 문제