2013-07-29 1 views
0

MongoDB를 사용하여 서비스의 모든 사용자의 활동 기록을 기록하고 싶습니다.지속적으로 증가하는 문서 삽입하기

{ 
    '_id' : 'user_id', 
    'activites' : [ 
     {time : blah blah, action : blah blah, ...}, 
     {time : blah blah, action : blah blah, ...}, 
     {time : blah blah, action : blah blah, ...}, 
    ] 
} 

을하지만 우리는 업데이트 성능의 둔화에 포함 된 문서 결과의 성장을 발견 다음과 같이

현재, 우리는 구조를 가지고있다.

이제 데이터 스키마가 변경되었습니다. 이는 삽입 된 문서를 별도의 컬렉션으로 마이그레이션하고 참조 모델을 사용하는 것입니다.

그러나 구조를 변경하면 여전히 문제가 있습니다.

(1) 참조 수가 계속 증가합니다. 성능 문제를 피할 수 있습니까? (2) 참조 사용을 중지하면 선택 성능이 저하됩니다.

좋은 아이디어가 있습니까?

답변

0

문서의 크기가 16MB로 제한되어 있기 때문에 단일 문서에 저장된 데이터가 크게 증가하는 것은 항상 잘못된 것입니다. 당신은 항상 {USER_ID 같은 여러 분야에 쿼리하는 경우

{ 
    '_id': 'activity_id', 
    'user_id': 'user_id', 
    'time': ..., 
    'action: ..., 
    ... 
} 

하는 인덱스가 "USER_ID"추가 있는지 확인하고 :

난 당신처럼하는 행동이 컬렉션 USER_ID를 참조하는 것이 좋습니다 USER_ID를 , 시간 : {$ gt : blah blah}}, 질의의 순서 다음의 모든 필드에 대한 색인을 만듭니다.이 경우에는 (user_id : 1, time : -1) (항상 DESCENDING으로 시간을 정렬하는 경우)

관련 문제