6. 전자상거래 웹사이트 예제 (집합 지향)
• 집합의 경계를 다르게 그려, 고객의 모든 주문을 고객 집합에 포함
// 고객
{
“customer”: { “shippingAddress”:[{“city”:”Chicago”}]
“id”:1, “orderPayment”:[
“name”:“Martin”, {
“billingAddress”:[{“city”:”Chicago”}] “ccinfo”:”1000-1000-1000-1000”,
“orders”: [ “txnId”:”abelif879rft”,
{ ““billingAddress”:{“city”:”Chicago”}
“id”:99, }],
“customerId”:1, }]
“orderItems”:[ }
{ }
“productId”:27,
“price”:32.45,
“productName”:”NoSQL Distilled”
}
],
7. 집합지향의 결과
• 관계형 모델에서는 데이터 요소 관계를 외래키로 표현가능하지만, 집합지향
에서는 관계간의 구분이 되지 않음
• 관계형 데이터베이스는 데이터 모델에 집합 개념이 없어 집합 무지라 부른다.
(NoSQL의 그래프 데이터베이스 포함)
• 다양한 데이터 조작방법이 필요할 경우 집합 무지 모델이 더 좋은 선택
• 집합지향이 중요한 이유는 클러스터에서 동작하기 수월하기 때문
8. 집합지향의 결과
• 집합은 트랜잭션에도 중요한 영향을 미침
• 관계형 데이터베이스는 단일 트랜잭션 안에서 어떤 테이블의 어떤 행이든 조
작 가능
• NoSQL 데이터베이스는 ACID(원자성, 일관성, 격리성, 영속성)를 지원하지 않아
데이터 일관성 희생
• NoSQL 데이터베이스는 한번에 한 집합에 대한 원자적 조작 지원
• 집합 여러 개를 원자적 방법으로 조작할 시, 코드에서 직접 관리 (일관성 부분
은 5장에서 더 자세히…)
10. 칼럼 패밀리 데이터베이스
• 빅테이블 형식의 데이터 모델을 가진 데이터베이스를 흔히 칼럼 저장소라 부
름
• 관계형 데이터 모델과 다른점은 물리적 저장 방식
• 모든 행에 대한 칼럼 그룹을 저장단위로 사용
• 칼럼 그룹을 함께 저장, 관계형 모델과 SQL은 배제한 데이터 베이스를 칼럼 패
밀리 데이터베이스라 칭함
• 두 단계의 집합구조로 생각, 첫번째 키는 행 ID, 두번째 값은 칼럼 – get(„1234‟,
„name‟)
11. 칼럼 패밀리 데이터베이스
• 특정 칼럼 패밀리에 대한 데이터는 함께 접근된다는 가정하에, 각 칼럼은 칼럼
패밀리 하나의 일부가 되어야 하고, 칼럼은 접근 단위로 동작
• 행-지향 : 각 행은 집합(아이디가 „1234인
고객)이고, 칼럼 패밀리는 그 집한안의 유
용한 데이터 덩이리(프로파일, 주문내역)
• 열(칼럼)-지향 : 각 칼럼 패밀리는 각 레코
드의 행으로 레코드 타입(고객 프로파일)
을 정의 행은 모든 칼럼 패밀리의 레코드
연결
12. 칼럼 패밀리 데이터베이스
• 데이터베이스가 데이터의 공통 그룹에 대해 알고 있으므로, 데이터를 작성하
거나 접근할 때 이용 가능
• 어떤 행에는 칼럼을 추가할 수 있고, 행은 완전히 다른 칼럼 키를 가질수 있다.
• 카산드라의 좁은행 : 많은 행에 걸쳐 몇 개 안되는 동일한 컬럼을 사용, 레코드
타입을 정의, 각행=레코드 / 각칼럼=필드
넓은행 : 많은 (수천개) 칼럼을 가지며, 행마다 아주 다른 칼럼을 가짐,
각 칼럼이 리스트의 요소
• 넓은 칼럼 패밀리는 칼럼 정렬 순서를 정의 가능, 정렬 키를 통해 순서에 접근
가능, 키로 순서의 범위에 접근 가능
(예 : 날짜와 아이디를 붙여서 키를 만든 경우 „20130324-1111‟)
13. 요약
• 세 형태 모두 집합이란 개념을 공유, 검색할 수 있도록 키로 색인
• 집합은 클러스터에서 실행되는 데 가장 중요한 개념, 한집합으로 구성된 데이
터는 한 노드에 저장
• 제한적이지만 유용한 정도의 트랙잭션 제어를 제공
• 키-값 데이터 모델은 집합을 불투명한 덩이리로 취급, 집합을 키로 검색, 집합
의 일부를 질의 및 추출 불가
• 문서 모델은 집합이 투명하고 일부 질의 및 추출 가능
• 칼럼-패밀리 모델은 집합을 칼럼 패밀리로 분류, 약간의 구조를 강제하지만
접근성 향상