2017-12-06 2 views
0

단일 쿼리에서 여러 사용자 노드를 만들려고합니다. 또한 동일한 쿼리에서 친구 관계와 연결됩니다. 쿼리를 프로파일 링 할 때 각 속성에 대해 관계로 설정된 db 호출이 생성됩니다. 이것은 각 관계의 많은 관계와 속성이있을 때 쿼리를 비싸게 만듭니다. 이 쿼리의 비용을 어떻게 줄일 수 있습니까?여러 속성 관계를 만드는 최적의 방법

PROFILE MERGE (user: User {myId: "1"}) WITH user 
UNWIND [ 
{myId: "2",userLastName: "2",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "3",userLastName: "3",userAddressId: "3",hasImage: false,randomId: 0}, 
{myId: "4",userLastName: "4",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "5",userLastName: "5",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "6",userLastName: "6",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "7",userLastName: "7",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "8",userLastName: "8",userAddressId: "1",hasImage: false,randomId: 0}, 
{myId: "9",userLastName: "9",userAddressId: "1",hasImage: false,randomId: 0} 
] as row 
MERGE (friend: User {myId: row.myId}) ON CREATE SET friend.name = row.userLastName 
MERGE (user)-[c:KNOWS]->(friend) ON CREATE SET c = row 

As you can see in this profile result image there are over 88 db calls in just creating the relation properties from map

가 어떻게이 쿼리 많은 DB 호출을 방지 할 수 있습니다

쿼리는 다음과 같다?

참고 : CREATE CONSTRAINT ON (user:User) ASSERT user.myId IS UNIQUE은 이미 db에 설정되어 있습니다.

편집 :

this video에 설명 된대로 @ChristopheWillemsen의 지침에 따라, 내 컴퓨터의 실행 시간 500 + MS에서 삭제 한 후에 100 ~ 500 레코드은 40ms.

답변

0

DB에 관계에 대한 몇 가지 속성을 만들도록 요청합니다. 따라서 일부 DB 히트 수는 정상입니다. 당신은 DB의 일을 조금 줄이려면

, 당신은 명시 적으로 모든 SET이 같은 ON CREATE SET c = row에 수행 할 수 있습니다

MERGE (user)-[c:KNOWS]->(friend) 
ON CREATE SET c.myId = row.myId, 
       c.userLastName=row.userLastName, 
       c.userAddressId=row.userAddressId, 
       c.hasImage=row.hasImage, 
       c.randomId=row.randomId 
+0

자네 말이 맞아. 작은 짐을 내리는 것 같습니다. 이 노드와 관계를 만드는 더 좋은 방법을 제안 하시겠습니까? 1000 개의 레코드가있는 경우이 작업을 수행하는 데 너무 많은 시간이 걸립니다. –

+0

매개 변수를 어디에서나 사용할 수 있습니다. 1000 개 레코드의 경우 500ms 미만이 소요됩니다. 정확한 사용 사례에 대한 내 비디오를 확인하려면 여기를 클릭하십시오. https://dzone.com/articles/cypher-write-fast-and-furious –

+0

@ChristopheWillemsen 제안에 감사드립니다. 현재 1000 개의 레코드를 저장하는 데는 몇 초가 걸립니다. 매개 변수를 사용하는 것이 어떻게 도움이되는지 봅시다. 한번 완료되면 결과를 게시 할 것입니다. 그러나 벤치마킹하는 동안 사람들이 더 많은 것을 성취 할 수 있다는 것을 알았습니다. 500ms는 여전히 커 보인다. 데이터가 여기에 모델링 된 방식 때문입니까? –

관련 문제