더북(TheBook)

컬렉션이란?

컬렉션은 문서 리스트라 할 수 있다. 문서 데이터베이스 설계자들은 문서를 빠르게 추가, 제거, 갱신, 검색할 수 있도록 문서 데이터베이스를 최적화한다. 또한, 확장성도 고려해서 문서 컬렉션이 커지면 클러스터에 더 많은 서버를 추가하여 데이터베이스 요구 사항을 처리하도록 설계했다.

알아둘 것은 같은 컬렉션에 있는 문서가 똑같은 구조일 필요는 없지만, 공통 구조를 일부 공유해야 한다는 것이다. 예를 들어 코드 6-2에 있는 컬렉션은 비슷한 구조로 된 문서 네 개로 이루어져 있다.

코드 6-2 비슷한 구조로 된 문서들

{
  {
  "customer_id":187693,
  "name": "Kiera Brown"
  "address" : {
                      "street" : "1232 Sandy Blvd.",
                      "city" : "Vancouver",
                      "state" : "WA",
                      "zip" : "99121"
                      },
  "first_order" : "01/15/2013",
  "last_order" : " 06/27/2014"
  }
  {
  "customer_id":187694,
  "name": "Bob Brown",
  "address" : {
                      "street" : "1232 Sandy Blvd.",
                      "city" : "Vancouver",
                      "state" : "WA",
                      "zip" : "99121"
                      },
  "first_order" : "02/25/2013",
  "last_order" : " 05/12/2014"
  }
  {
  "customer_id":179336,
  "name": "Hui Li",
  "address" : {
                      "street" : "4904 Main St.",
                      "city" : "St Louis",
                      "state" : "MO",
                      "zip" : "99121"
                      },
  "first_order" : "05/29/2012",
  "last_order" : " 08/31/2014",
  "loyalty_level" : "Gold",
  "large_purchase_discount" : 0.05,
  "large_purchase_amount" : 250.00
  }

  {
  "customer_id":290981,
  "name": "Lucas Lambert",
  "address" : {
                      "street" : "974 Circle Dr.",
                      "city" : "Boston",
                      "state" : "MA",
                      "zip" : "02150"
                      },
  "first_order" : "02/14/2014",
  "last_order" : " 02/14/2014",
  "number_of_orders" : 1,
  "number_of_returns" : 1
  }
}

첫 번째, 두 번째 문서는 구조가 같지만 세 번째, 네 번째 문서에는 속성이 더 추가되어 있다는 점에 주목하자. 세 번째 문서에는 loyalty_level, large_purchase_discount, large_purchase_amount라는 새로운 필드 3개가 있다. 세 속성은 이 고객이 250달러가 넘는 주문 건은 모두 5% 할인을 받아야 하는 우량 고객임을 나타낸다. 네 번째 문서에는 number_of_orders와 number_of_returns라는 새로운 필드 2개가 있다. 두 속성은 해당 고객이 2014년 2월 14일에 구매를 했다가 반품했다는 사실을 나타낸다.

문서 데이터베이스는 문서 구조를 유연하게 만들 수 있다는 장점이 있다. 만약 여러 문서 중 10%만 로열티와 할인 정보를 기록해야 한다면 나머지 90%에 굳이 사용하지 않는 필드를 넣어 어수선하게 만들 필요는 없지 않을까? 문서 데이터베이스를 사용하면 그럴 필요가 없다. 다음 내용에서 이 문제를 더 자세히 다루겠다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.