컬렉션이란?
컬렉션은 문서 리스트라 할 수 있다. 문서 데이터베이스 설계자들은 문서를 빠르게 추가, 제거, 갱신, 검색할 수 있도록 문서 데이터베이스를 최적화한다. 또한, 확장성도 고려해서 문서 컬렉션이 커지면 클러스터에 더 많은 서버를 추가하여 데이터베이스 요구 사항을 처리하도록 설계했다.
알아둘 것은 같은 컬렉션에 있는 문서가 똑같은 구조일 필요는 없지만, 공통 구조를 일부 공유해야 한다는 것이다. 예를 들어 코드 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%에 굳이 사용하지 않는 필드를 넣어 어수선하게 만들 필요는 없지 않을까? 문서 데이터베이스를 사용하면 그럴 필요가 없다. 다음 내용에서 이 문제를 더 자세히 다루겠다.