2013-07-22 2 views
0

MongoDB를 데이터베이스로 사용하는 응용 프로그램을 만들고 있습니다. 제품이 많아서 사용자가 어떤 제품을 보는지 사용자의 데이터베이스 항목에 기록하려고합니다. 예를 들어 사용자 프로필은 다음과 같습니다.MongoDB - 데이터의 양이 너무 많습니까?

{ 
    "email" : "[email protected]", 
    "name" : "John Snow", 
    "_id" : ObjectId("51ecbcc6896652a008000001"), 
    "productsViewed" : [ 
      product1, 
      product2, 
      product3, 
      product4 
    ] 
} 

두 가지 옵션이 있습니다. 나는 각 제품의 _id만을 기록 할 수 있으며 제품을 대표하는 전체 개체 (이름, 가격, ~ 100 단어 설명, 범주, 그 종류의 것)를 기록 할 수 있습니다. 객체 크기의 차이는 제품 당 텍스트 한 줄과 제품 당 약 30 줄입니다.

나는 이것이 사소한 양의 데이터 일 수 있다는 것을 알고 있지만, 사용자가 10,000 개의 productsViewed 항목을 가지고 있다면, ~ 30x 큰 차이가 영향을 미칠 것인가? 더 많은 데이터 로깅은 내 목적에 훨씬 더 유용하지만 사용자 프로필이 상당히 커지면 데이터베이스 호출이 지연되는 것을 피하고 싶습니다.

질문 : 질문 : 어떤 시점에서 (문자 길이로 생각하세요?) 하나의 MongoDB 레코드로 저장할 데이터가 너무 많습니까?

답변

2

16 메가는 전체 문서에 대한 제한 사항입니다. 즉, 모든 문자열 등은 16 메가 이내에 맞아야합니다. 그러나 그 전에 스키마에 대한 제한이 더 있습니다.

사용자가 10,000 개의 productsViewed 항목이있는 경우 ~ 30x 큰 차이가 영향을 미칩니 까?

그리고 대답은 '예'입니다. 우선 root 사용자의 추가 된 데이터로 16 메가 바이트를 넘을 것입니다. 그러나 메모리 내 $pull, $push 및 기타 하위 문서 운영자는 성능을 유지하는 데 어려움을 겪을 수 있습니다. 하위 문서를 100 개 그룹으로 일괄 처리하여 문제를 완화 할 수 있습니다.

그러나 더 큰 문제가 있습니다. 단편화입니다. MongoDB는 디스크의 한 공간에 레코드를 저장하기 때문에 패딩과 같은 설정을 가지고 있기 때문에 여기에서 재사용되지 않는 이상한 크기의 레코드 오브젝트로부터 상당한 분열을 볼 수 있습니다.

개인적으로이 관계를 별도의 컬렉션으로 제외해야한다고 개인적으로 말합니다.

+0

흥미 롭습니다. "전체 문서"가 의미하는 바를 설명 할 수 있습니까? 나는 어떤 데이터베이스, 수집 물 및 기록이'MongoDB'와 관련이 있는지를 알고 있지만 '문서'가 무엇을 가리키는 지 모르겠습니다. – Jascination

+0

@Jascination이 경우 문서 = 레코드와 레코드 개체 = MongoDB 레코드의 내부 표현 – Sammaye

관련 문제