2017-05-20 1 views
3

내가 Neo4j와 소셜 네트워크를 구축, 그것은 포함데이터 모델?

노드 레이블 : User, Post, Comment, Page, Group

관계 : LIKE, WRITE, HAS, JOIN, FOLLOW, ...

페이스 북과 같습니다.

예 : A userB user를 수행 B는 포스트, 댓글 등의 조치가있을 때, 그 행동이 A로 전송됩니다, 그래서 등, 그룹에 가입 페이지에 따라, 다른 사용자를 따릅니다. 마찬가지로 C, D, E 명의 사용자는 B을 수신하면 동일한 알림을 받게됩니다.

나는이 문제에 대한 데이터 모델을 설계하는 방법을 모르는 나는 몇 가지 해결책이 있습니다

  1. 은 모든 사용자에 대해 Notification 노드를 작성합니다. 작업이 실행되면 n 명의 팔로워에 대한 n 알림을 생성합니다. 이점 : 사용자가 알림을 보았는지 확인할 수 있습니다. 그러나 노드 수는 빠르게 증가하고 n의 힘이됩니다.
  2. 모든 호출 API 알림 (클라이언트 응용 프로그램의 경우)에 대한 쿼리를 만듭니다.이 쿼리는 특별한 시간 (24 시간 또는 2, 3 일) 동안 사용자의 동작 목록 만 가져옵니다. 그러나 추종자들은 본 통지를 확인하지 못하고이 쿼리는 서버를 느리게 만들 수 있습니다.
  3. 사용자 당 노드가 20 개, 노드 수가 30 개로 제한된 노드를 만듭니다.
  4. 24 시간 동안 무제한 노드 생성 (동작 시간 포함) 및 해당 노드에 작업 시간 초과 속성 생성> 24 시간이 삭제됩니다 (만료 시간은 2, 3 일). 누가이 문제를 해결할 수 있습니까? 나는 어떤 해결책이나 새로운 방법을 선택해야합니까?

답변

2

저는 최선의 방법은 옵션 1이라고 생각합니다. 말씀 드린대로, 추종자가 알림을 읽었는지 여부를 알 수 있습니다. 팔로어에 의한 통지 노드의 수에 관하여 :이 문제는 너무 많은 연결을 가진 노드 인 "supernodes"또는 "dense nodes"라고 불립니다.

(download in the Neo4j's web site 사용할 릭 반 브루 겐에 의해) 책 학습 Neo4j는 "조밀 한 노드"또는 "슈퍼 노드"에 대해 이야기하고 말한다 :

"[개의 supernode]를 그래프 순회를위한 진짜 문제가되는 때문에 그래프 데이터베이스 관리 시스템은 연결된 모든 관계를 평가해야 다음 단계 인 이 그래프 통과에 있는지 결정할 수 있습니다. "

이 책에서는 추종자와 알림 (귀하의 경우) 사이에 메타 노드를 추가하는 솔루션을 제안합니다. 이 메타 노드에는 최대 100 개의 연결이 있어야합니다.현재 메타 노드가 인기 가수와 함께 예를 나타내는 그림의 예에 따라 새로운 메타 노드가 생성되어 계층 구조에 추가해야합니다 (100 개) 연결을, 도달하고 팬 경우

Dense node

난 당신을 생각 지금 당장 걱정하지 마라. 앞으로 추종자 노드가 문제가된다면 데이터베이스 스키마를 리팩터링 할 수 있습니다. 그러나 지금은 일을 단순하게 유지하십시오!

"Building a Twitter clone with Neo4j"이라는 일련의 게시물에서 Max de Marzi는 모델 구축 프로세스를 설명합니다. 어쩌면 모델에 대한 최선의 결정을 내리는 데 도움이 될 수 있습니다!

+0

하지만 알림의 문제는 아직 설계 방법이 없습니다. –