2013-04-25 4 views
0

우리는 매일 일정한 견해를 가진 비디오를 가지고 있습니다.구조 데이터 MongoDB에 대한 데이터

내가하고 생각했다 :

{ 
    video_name: "Blabla" 
} 

{day: x, views: 342, video_id: y} 
{day: x, views: 342, video_id: y} 
: 내가 분석/데이터 물건 온라인 읽은 것과,

{ 
    video_name: "Blabla" 
    stats: [ 
     {day: x, views: 342} 
     {day: x, views: 342} 
    ] 
} 

그러나, 사람들은이 같은 분리 수집, 그래서 뭔가 더 선호하는 경향이

의견은 무엇입니까?

+0

사용자에게 필요한 것은 무엇이며 쿼리는 어떻게 구성됩니까? 하나의 문서/비디오에 통계를 넣으려면 16MB의 MongoDB 문서 한도에 도달해야합니다. – WiredPrairie

답변

1

이 작업은 통합 프레임 워크의 고전 : 첫 번째 변종에 대한 http://docs.mongodb.org/manual/core/aggregation/ 당신은 다음과 같이 사용될 수 있습니다

test> db.video.aggregate([{$unwind:'$stats'}, {$group:{_id:{name:'$video_name', day:'$stats.day'}, views:{$sum:'$stats.views'}}}]) 
{ 
    "result" : [ 
     { 
      "_id" : { 
       "name" : "Blabla2", 
       "day" : 3 
      }, 
      "views" : 344 
     }, 
     { 
      "_id" : { 
       "name" : "Blabla2", 
       "day" : 1 
      }, 
      "views" : 684 
     }, 
     { 
      "_id" : { 
       "name" : "Blabla", 
       "day" : 2 
      }, 
      "views" : 342 
     }, 
     { 
      "_id" : { 
       "name" : "Blabla2", 
       "day" : 2 
      }, 
      "views" : 342 
     }, 
     { 
      "_id" : { 
       "name" : "Blabla", 
       "day" : 1 
      }, 
      "views" : 342 
     } 
    ], 
    "ok" : 1 

을하지만, 영상의 당신의 횟수가 눈사태처럼 증가 될 경우 당신은 미래의 문제가 있었다 수 있습니다. help $ match 작업으로 특정 날짜의 통계를 정확하게 계산할 수 있지만 이는 일시적인 해결책입니다. 이 모델

{ 
    video_name: "Blabla", 
    day: x, 
    views: 342} 
} 

, 당신이 만드는 실험 실용 도움이 문서와 통합 프레임 워크의 크기에 의존하지 않는 :

좋은 생각은 (만약 당신이 할 수있는) 더 간단 할 수있는 변경 데이터 모델입니다 전망 :;

)

db.video.aggregate([{$group:{_id:{name:'$video_name', day:'$day'}, views:{$sum:'$views'}}}]) 

당신은 간단하게 당신이 그룹 비디오 또는 비디오와 일의 이름으로, 당신은 당신이 원하는대로 어떤 통계를 계산 확보 할 수 있고, 하루 하루 간격 중 하나를 선택할 수 있습니다

+0

및 다른 좋은 아이디어 : 다른 수집에 일부 병합 통계를 저장하고 정기적으로이를 분석 목적으로 업데이트하십시오. oltp와 analitics를 분리해야합니다. –

+0

정확한 방법을 얻으려면 분리 된 모음을 사용하고 집계 프레임 워크는 물건을 할? – Hartator

+0

네, 가장 좋은 방법입니다. 통계와 데이터를 섞은 경우 업데이트가 항상 어려울 것입니다. 상상해보십시오. 조회수를 업데이트하는 방법과 필요한 코드는 –