2013-03-29 4 views
3

단일 사용자를 위해 수천 개의 관계를 허용하는 데 가장 좋은 디자인은 무엇입니까?Neo4j 그래프 디자인 - 헤더/카테고리 노드?

-

이 이미지 참조 (소셜 네트워킹 응용 프로그램에서 작업 당신이 어떤 "일반적인"소셜 네트워크 설계를 알고 있다면 .. 도움이 될 것을 지적하시기 바랍니다) - 상태 업데이트를 연결리스트를 나타냅니다를, 관심사는 다른 관심사를 나타내는 반면, 이러한 관심사는 단일 사용자를 위해 수천 개의 노드로 크게 날아갈 수 있습니다. 이렇게하면 일종의 슈퍼 노드 문제가 발생하지 않을까요?

그림

Figure

1은 더 나은 디자인은 그 이익에 대한 범주, 또는 "헤더"노드를 가지고하는 다음 두 가지 이익이 카테고리 노드에 해당이겠습니까? 처음에는 사용자 노드와 몇 개의 관계/헤더 노드를 처리 할 때 수천 개의 노드가 사용자 노드와 직접 관련되는 대신 효율적이라고 생각합니다.

예 : 그림 2 사용자
|
+ 이익 +
+ ----- 관심
+ ----- 관심이
+ ----- 등 ...

그리고
은 이익도 "서브 헤더를"하지 말았어야 예컨대 같은 "책", "영화", "제품"으로 분류 노드 :

**FIGURE 3** 
User 
| 
+ interests+ 
      + books+ 
      |  + interest 
      |  + interest 
      |  + interest 
      + movies+<br> 
        + interest 
        + interest 
        + interest 

여기


내 질문이다 (물론 나는 n00b가 네오을 해요) :

  1. 어떤 모델은 고성능에 가장 적합한, 확장, 시스템과 같은 페이스 북 - 범주없이 하나, 또는 하나? 성능을 염두에 두십시오.

  2. 관심사가 항상 수천 노드에 날아 가지 않을 수도 있습니다 - 12 개 또는 100 일 수 있음 - 추가 카테고리 디자인이 너무 많은 오버 헤드를 추가합니까? 자신이 좋아하는 친구를 찾는 것을 고려해보십시오. 카테고리를 추가하면 오버 헤드가 너무 많이 추가됩니까?

  3. 후자의 이미지 (카테고리 및 하위 카테고리 노드가있는 이미지)는 성능이 좋고 조직적으로 좋지는 않습니까?

  4. 범주 노드 대신 범주가 무엇인지 설명하는 범주 속성이 있어야합니까? 그리고 카테고리 속성을 가진 노드를 인덱스에 추가하는 것이 카테고리 노드를 갖는 것만 큼 좋을까요?

  5. 질문 4와 관련하여 색인에 범주가있는 노드를 추가하는 것이 더 나은 해결책입니까?

  6. 이러한 유형의 구조에는 어떤 단점이 있습니까?그들은 진짜 이점이 있습니까?

답변

2

나는 당신의 관심사가 연결 수십만 또는 수백만 날려 때만 여전히 충분 작동합니다 수천 경우 관심 분야 카테고리, 좋은 생각이라고 생각. 아마도 이것은 사용자 노드를 실제로 필요할 때까지 발전시킬 수있는 것입니다. (트위터에서 다른 슈퍼 스타를 다루 듯).

모두 유스 케이스에 따라 다르며, 모델에 대한 답변을 원하는 유형은 범주에 제한되거나 모든 범주에서 항상 아래 관심 분야로 쿼리 할 수 ​​있습니까?

항상 고려해야 할 것은 그래프로 이동하는 각 단계마다 터치되는 관계의 수는 기하 급수적으로 증가한다는 것입니다. 사용자의 모든 친구 또는 친구 및 모든 관심사에 대해 사용자가 쿼리하면 터치 된 요소의 수는 매우 빠르게 증가한다는 것을 알고 있어야합니다. 서버의 메모리가 충분해야 그래프의 큰 부분을 메모리에 저장하여 요청에 신속하게 응답 할 수 있습니다.

성능을 높이고 테스트를 일찍로드해야합니다 (예 : 데이터 생성기 사용).

btw. 열심히 필터링하는 것은 관심사마다 별개의 관계 유형을 갖는 것이 현명 할 수도 있습니다. 따라서 관심이없는 관계를 실제로 따르지 않고 일찍 필터링 할 수 있습니다.

색인은 일반적으로 글로벌 카테고리에 도움이됩니다. 자신의 이름과 사용자 ID를 사용하여 카테고리를 색인하지만 사용자 시간 카테고리 색인 항목이있어 매우 빠르게 성장할 수도 있습니다.

귀하의 유스 케이스가 모든 카테고리 (모든 사용자와 모든 관심사 전반에 걸쳐)가 아니라 카테고리별로 실제로 잘 맞으면 카테고리 접근법이 잘 조정되어야한다고 생각합니다.

+0

글쎄, 저는 수백만 개의 연결을 디자인하려고합니다. 책 X와 같은 FOF를 찾으십시오. 그러나 모든 사용자를 살펴보고 책을 좋아하는 사용자를 찾고 싶습니다. Y (fof 쿼리가 아닙니다.) .. 그래서 그것은 두 가지 방법입니다 ..하지만 모든 사용자와 모든 관심사를 조사하기 위해 그래프 데이터를 항상 hadoop에 던질 수 있습니다 - 분석은 대규모의 경우 반드시 neo4j에 있어야 할 필요는 없습니다. 그림 쿼리 .. –

+1

당신이 책에서 시작할 수 있다면, 그것은 단지 두 단계 홉입니다 범주와 함께 모든 후 사용자에게 도착하는 것은 매우 간단해야합니다. 상대방 (모든 사용자)에서 시작하여 특정 책을 찾으려고하면 더 많이 참여하게됩니다. 백그라운드에서 쿼리를 실행하고 쿼리 결과를 나타내는 추가 그래프 구조를 만들 수 있습니다. –

+0

Michael - danke .. 소셜 네트워크 스키마를 게시 한이 질문에 대한 귀하의 의견은 무엇입니까? http://stackoverflow.com/questions/15714963/neo4j-graph-model-for-a-social-network –