2014-12-10 4 views
0

웹 사이트를 방문하는 사용자로 구성된 많은 양의 데이터가 있습니다. 방문 할 때마다 타임 스탬프가 있습니다.neo4j 및 groovy : 가변 길이의 경로 자동로드

U1-> T1-> P1-> T2- 다음 http://jexp.de/blog/2012/10/parallel-batch-inserter-with-neo4j/ 스크립트를 사용하여, 나는 지금 각 페이지

U1-->T1-->P1 
| 
--->T2-->P2 
etc. 

에 대한 별도의 경로를 가지고 그래프를 생성, 나는 다음과 같은 구조를 갖고 싶어 것 > P2 ...

분명히, 각 사용자는 다른 페이지 수를 방문합니다. 나는이처럼 보이는 파일이 : ME->

  1. 위의 구조 등 블로그 t1about 있도록 각 사용자 시퀀스가 ​​방문 시간에 따라 정렬됩니다

    person,time,place 
    U1,t1,P1 
    U1,t2,P2 
    U1,t3,P3 
    U2,t4,P1 
    U2,t5,P6 
    

    을 U1-> T1-> P1 -> T2 -> P2 좋은 접근? (약 3 천만 개의 항목이 있습니다)

  2. groovy 스크립트를 수정하여 관계와 노드를 동일한 순서로 자동 추가 할 수 있도록해야합니다. 나는 이전 사용자 아이디를 메모리에 유지할 생각이었고 새로운 아이디 = 이전 아이디라면 관계와 위치 만 추가 할 것입니다. 그렇지 않으면 새 사용자를 만들고 새 경로를 작성합니다.

답변

3

나는 당신의 노드가 페이지에 대한 사용자 U, 타임 스탬프에 대한 TP를 표시한다고 가정합니다.

  1. 타임 스탬프 노드가 필요하지 않습니다. 대신에 UP 사이의 관계에 타임 스탬프 값을 입력 할 수 있습니다. 이렇게하면 노드와 관계의 수를 크게 줄일 수 있습니다.

    (:U)-[:VISITED_AT]->(:T {timestamp: 123})-[:PAGE]->(:P) 
    

    이 사용할 수 있습니다, 당신에게 1 개 노드와 방문 당 1 개 관계를 저장합니다 :

    (:U)-[:VISITED {timestamp: 123}]->(:P) 
    
  2. 를 예를 들어

    대신이의 (나는 관계 유형을 만드는 중이라서)

  3. 당신이 묘사하는 것이 합리적인 것처럼 보이지만, 페이지 당 하나의 노드를 갖기를 원한다면 동일한 페이지 (예를 들어, 두 번째로 나타나기 때문에 P1)에 여러 개의 노드를 생성 할 수 있습니다. 또한 파일에 U2 행 뒤에 또 다른 U1 행이 포함될 경우 두 번째 U1 노드를 생성합니다. 이러한 중복을 방지하려면 UP 노드에 CREATE 대신 MERGE을 사용해야합니다. MERGE은 이미 존재하지 않는 경우에만 노드를 만들고, 그렇지 않으면 기존 노드를 반환합니다. 노드가 있으면 계속 연결하고 CREATE (시간 소인을 특성으로 사용) 관계를 함께 연결할 수 있습니다.

+0

죄송합니다. 사용자 및 페이지에 대한 고유성 제약 조건이 이미 있음을 잊어 버렸습니다. – user201411