2012-02-10 6 views
5

나는 현재 다음과 같은 사람들의 블로그, 팔로어, 팔로워, 댓글, 블로그 게시물과 같은 Tumblr과 같은 사용자 상호 작용을 구현하려고합니다. 또한 활동을 표시해야하는 요구 사항이 있습니다. 각 블로그 게시물마다.NoSQL 데이터베이스와 관계를 효율적으로 만들 수 있습니다.

데이터베이스에 적합한 스키마를 만드는 데 어려움을 겪고 있습니다. 이러한 종류의 기능 (블로그 게시물 및 주석과 같이 포함 된 데이터 구조 정의, 각 작업에 대한 활동 문서 작성 등)을 달성하는 데는 여러 가지 방법이 있지만 성능 및 확장 성 측면에서 어느 것이 가장 좋은지는 현재 결정할 수 없습니다.

예를 들어 내가 따르는 사람들의 구현을 살펴 보겠습니다. 다음은 샘플 사용자 문서입니다.

User = { id: Integer, 
     username: String, 
     following: Array of Users, 
     followers: Array of Users, 
     } 

이것은 사소한 것처럼 보입니다. 나는 사용자 필드 (follow/unfollow)에 따라 다음과 같은 필드를 관리 할 수 ​​있지만 현재 내가 따르는 사용자가 삭제되면 어떻게됩니까? 삭제 된 사용자를 따르는 모든 사용자 레코드를 업데이트하는 것이 효과적입니까?

또 다른 문제는 내가 팔로우하는 사람들의 블로그 글보기를 만드는 것입니다.

Post = { id: Integer, 
      author: User, 
      body: Text, 
     } 

그래서 최신 검색어와 같은 효과적인 검색어입니다.

db.posts.find({ author: { $in : me.followers} }) 

답변

0

"스타 스키마"라는 한 가지 접근 방식이 있습니다. 웹이나 위키피디아를 검색하면 많은 정보를 찾을 수 있습니다.

3

두 가지 요구 사항을 충족시키기 위해 단일 데이터 저장소 (이 경우 문서 지향 NoSQL 데이터베이스)를 사용하려고합니다. 가장 먼저하는 일은 문서 지향 저장소에 데이터를 저장하는 것입니다. 나는 당신이 이것을하기를위한 정당한 이유가다는 것을 추정하기 위하여려고하고있다.

두 번째로하려는 것은 저장중인 문서간에 관계를 설정하는 것입니다. 귀하의 예는 FOLLOWS 관계를 보여줍니다. 이를 문서 지향형 NoSQL 데이터베이스에 데이터를 저장하는 것과는 다른 요구 사항으로 간주하고 Neo4j와 같은 그래프 지향 NoSQL 데이터베이스에 관계를 저장하는 것을 살펴볼 것을 권장합니다. 이 방법으로 엔티티는 문서 ID 만 사용하여 그래프 저장소의 문서 저장소와 관계에 저장할 수 있습니다.

내 경험에 비추어 볼 때 중형 및 대형 응용 프로그램의 기능적 및 비 기능적 요구 사항을 모두 충족하는 단일 NoSQL 데이터베이스를 얻는 것이 어려울 것입니다. 예를 들어, 내가 연구중인 최신 응용 프로그램은 RDBMS 외에도 MongoDB, Redis 및 Neo4j를 사용합니다. 나는 기술을 시험하기 위해 많은 시간을 보냈고이 조합에 정착했다. Spring Data 프로젝트와 함께 Spring 3 사용에 전념했고, 지금까지 나의 경험은 훌륭했습니다.

+0

친절한 답변을 보내 주셔서 감사합니다. 실제로 Node.js에 적합한 MongoDB를 사용하고 있습니다. MongoDB를 효과적으로 사용하여 구현할 수있는 한 다른 기술을 사용하고 싶지 않습니다. (배우고 다른 문제도 다루어야하기 때문에). –

+0

MongoDB를 사용하여 문서 관계를 유지하기 위해 계속 시도하려는 유혹을 볼 수 있습니다. 다른 기술이 더 복잡해질 것을 두려워하여. 그러나 문제의 응용 프로그램이 매우 작고 항상 단일 개발자가 유지 관리하는 경우를 제외하고는 일반적으로 내 의견에 비할 바없는 해결책이 될 것입니다. 팀의 개발자 수가 증가함에 따라 각 팀은 문서 관계에서 문서를 업데이트하고 삭제할 때의 의미를 이해해야합니다. 장기적으로 더 많은 실수와 복잡성을 초래할 것입니다. – manish

관련 문제