2014-06-20 3 views
0

MongoDB를 원하는 데이터베이스로 선택하려고합니다. 내 책상 디자인에 대한 도움이 필요해.MongoDB 스키마 제안

앱 배경 - 연락처가 자신의 일정과 관련 맞춤 데이터를 푸시하는 분석 앱입니다. 연락처에 많은 이벤트가있을 수 있습니다. 예 : 이벤트 1 : EVENT_TYPE : page_visited, 사용자 정의 데이터 : {구글 URL : 가격, 리퍼러} ​​접촉, EPOCH_TIME

예를 이런 짓을하는 등

EVENT_TYPE, custom_data (JSON)을했다 이벤트 2 CURRENT_TIME : EVENT_TYPE : video_watched, 사용자 정의 데이터를 {URL : VIDEO_LINK}, CURRENT_TIME 이벤트 3 : EVENT_TYPE : 지불 custom_data : {계획 : 라이트, 가격 : 35}

이 이벤트는 사용자 정의 및 정의 사용자가 확장 성은 관심사입니다.

은 일반적인 사용 사례입니다 :

  • 나에게 지난 7 일 가격 페이지에 와서 한 사용자의 목록을 제공
  • 나에게 비디오를 시청 등을 지불 한 사용자의 목록을 제공 (50)보다
  • 나에게 가격을 방문한 사용자, 감시 비디오의 목록을 제공하지만, 지불하지

내 테이블을 설계하는 가장 좋은 방법은 무엇입니까 적어도 20? 이 경우 내장 된 이벤트를 사용하는 것이 좋습니까? 데이터가 행/열 :)되지 않기 때문에

답변

0

는 몽고에서 그들은, 컬렉션이 아닌 테이블이라고

(1) 나는 이벤트 수집과 사용자 모음

(2) 할 것 사용자 ID가있는 이벤트 당 1 개의 문서를 작성합니다.

(3) 실시간 데이터가 필요한 경우 검색어를 표시 할 색인을 원할 것입니다. 즉 전체 컬렉션을 검색하지 마십시오.

(4)보고 용도로만 필요한 경우보고 노드 (즉, 다른 mongo 인스턴스)를 만들고 복제를 사용하여 해당 mongo 인스턴스에 데이터를 복사하는 것이 좋습니다. 해당 노드에 대한보고를 위해 추가 색인을 넣을 수 있습니다. 이렇게하면 추가 인덱스 및 값 비싼 쿼리가 프로덕션 성능에 영향을 미치지 않습니다. 당신의 이벤트 모음이 커질 것입니다 경우

샤딩에

주 - 당신은 샤딩을 고려할 필요가있다. 아마도 사용자 ID에 의한 샤딩 일 수도 있습니다. 그러나 장기적인 해결책이 될 수 있으며 필요할 때까지 잠수 할 필요는 없습니다.

한 가지주의 할 점은 mongo가 (2.6) 데이터베이스 레벨 쓰기 잠금 구현을 현재 갖고 있다는 것입니다. 즉, 한 번에 한 번만 쓸 수 있습니다. 그것은 많은 읽기를 허용합니다. 즉, 높은 쓰기 시스템을 원하고 많은 사용자가있는 경우 어떤 시점에서 샤딩을 조사해야합니다. 그러나, 지금까지 나의 경험에 비추어 볼 때, 보조 노드 (보고 노드)가있는 1 개의 주 노드는 관리하기 쉽도록 설정되었습니다. 현재이 설정으로 초당 약 10,000 개의 작업을 처리 할 수 ​​있습니다.

그러나 사용자가 시스템에 접속하는 데 문제가 있습니다.인덱스에 충분한 메모리가 있는지 확인해야합니다. 그리고 SSD가 권장 될 것입니다. 사용자의 급상승으로 인해 캐시 미스 (즉, 메모리에 색인이 없음)가 발생하여 하드 디스크에서 읽을 수 있습니다.

최종 메모 - NoSQL DB가 많이 있으며 장단점이 있습니다. 나는 개인적으로 높은 쓰기, 낮은 읽기, 그리고 많은 데이터의 실시간 분석이 실제로 mongo의 힘이 아니라는 것을 발견했다. 그래서 그것은 당신이하는 일에 달려 있습니다. 당신은 여전히 ​​펀더멘탈을 배우는 것처럼 들립니다. 올바른 작업에 적합한 도구를 선택하기 위해 사용 가능한 모든 유형을 읽을 가치가있을 수 있습니다.

+0

메모 해 주셔서 감사합니다. 높은 쓰기, 낮은 읽기 및 실시간 분석을 위해 당신은 무엇을 제안하겠습니까? – cloudpre

+0

AWS를 사용하는 경우 DynamoDB가 빠르며 이벤트 요구 사항 (기본 키 userId, 날짜 또는 이벤트 유형의 범위 포함)을 충족시킬 수 있습니다. 카산드라는 (웹과 내가 일하는 사람들과) 긍정적 인 평가를하고있다. 몇 가지 다른 NoSQL DB를 조사 중입니다. 대부분 제거 할 수 있습니다. 조사를 통해 아직 중도에 있지만 Riak 또는 Couchbase에 적합하지 않을 수도 있습니다. (하지만 지금은 DynamoDB 또는 Cassandra에 기대고 있습니다.) –

+0

DynamoDB는 중첩 JSON 검색을 지원하지 않습니다. 맞춤 데이터는 고객마다 완전히 다르며 맞춤 데이터를 작성합니다. – cloudpre