8. 관계형 데이터베이스의 한계
Scale up (수직 확장)
● 더 많은 프로세서, 메모리, 디스크 장착
● Scale up에는 한계가 존재
● 더 좋은 서버로 대체하려면 비용이 많이 비싸짐
Scale out (수평 확장)
● 저렴한 서버를 여러 대의 클러스터로 구성
● 비용이 훨씬 적게 듦
Scale up
Scale out
18. What is MongoDB?
Hu(mongo)us DB
● Document Database
● Key Features
○ Horizontal Scalability
○ High Performance
○ High Availability
○ Rich Query Language
19. What is MongoDB?
Hu(mongo)us DB
● Document Database
● Key Features
○ Horizontal Scalability
○ High Performance
○ High Availability
○ Rich Query Language
20. Document Database
문서를 (JSON, XML, BSON 등)을 저장하고 질의하도록 설계된 데이터베이스
● 문서
○ 키-값 쌍으로 집합
○ 키는 문자열, 값은 기본적인 데이터 타입(숫자, 문자열, 부울)이나 구조(배열, 객체)
24. Schema-less
Schema : 사전에 형식에 맞추어 데이터에 대한 구조를 정의한 것
● RDBMS는 스키마가 필요
● 스키마 예
○ 테이블
○ 컬럼
○ 기본 키
○ 외래 키
○ 제약 조건
25. Schema-less
Schema-less : 사전에 형식에 맞추어 데이터에 대한 구조를 정의하지 않아도 됨
● 더 많은 유연성(flexibility)
{
"author":"mino",
"text":"..."
}
{
"author":"kimmino",
"text":"...",
"tags":[ "mongodb" ]
}
26. Schema-less
Schema-less : 사전에 형식에 맞추어 데이터에 대한 구조를 정의하지 않아도 됨
● 더 많은 책임(responsibility)
○ 데이터에 관한 규칙을 강제 하지 않으므로 애플리케이션에서 데이터 구조에 관한
규칙 확인 필요
애플리케이션 코드
모든 필드가 있는지?
모든 값이 예상 범위에
있는지?
참조된 객체가 있는지?
MongoDB
27. What is MongoDB?
Hu(mongo)us DB
● Document Database
● Key Features
○ Horizontal Scalability
○ High Performance
○ High Availability
○ Rich Query Language
28. ● 데이터를 여러 서버에 분산해서 저장하고 처리하는 기술
● 대용량 데이터를 분산 처리하는 것이 목적
Sharding
Shard A
256GB
Shard B
256GB
Shard C
256GB
Shard D
256GB
Collection 1
1 TB
1 TB1 TB
1 TB
Collection 1
29. Sharded Cluster Components
● Config Server
○ 클러스터 메타데이터 저장
● Router (mongos)
○ 클라이언트 인터페이스
● Shard Server
○ 데이터가 저장
Sharding in MongoDB
Shard 1
(replica set)
Shard 2
(replica set)
Config Servers
(replica set)
Router
(mongos)
Router
(mongos)
30. 하나의 큰 컬렉션을 여러 조각으로 파티션하고
샤드 서버에 분산해서 저장하는데 이 때 나눠진 데이터 조각
● 논리적 단위
● 컬렉션의 도큐먼트를 파티션하는 개념
● 기본 64MB
Chunk
Shard 1
(replica set)
Shard 2
(replica set)
Config Server
Router
(mongos)
chunk-1 shard-1
chunk-2 shard-2
chunk-3 shard-1
chunk-4 shard-1
Chunks
chunk-1
chunk-3
chunk-4
Collection A
chunk-2
Collection A
31. 샤드 키의 값을 기준으로 범위를 나누고 사용자 데이터가 어느 청크에 포함될지 결정하는
알고리즘
● 샤드 키 값이 별도의 변형 과정을 거치지 않음
● 범위 검색 쿼리를 타겟 쿼리로 실행 가능
● 샤드 키 설계에 따라 데이터가 균형있게 분산되지 않을 가능성이 있음
Ranged Sharding
32. 샤드 키 값의 해시값을 이용해서 청크를 할당하는 샤딩 방식
● 해시 함수는 MD5를 사용
● 해시 샤딩도 Ranged Sharding의 일종
● 샤드 키 값이 비슷하더라도 균등하게 분포 가능
Hashed Sharding
33. What is MongoDB?
Hu(mongo)us DB
● Document Database
● Key Features
○ Horizontal Scalability
○ High Performance
○ High Availability
○ Rich Query Language
34. Index
MongoDB는 빠른 검색을 위해 인덱스 기능을 지원
● _id field는 기본으로 인덱스를 생성
● 지원 Index
○ Single Field : 하나의 필드에 대한 인덱스
○ Compound Index : 1개 필드 이상에 대한 인덱스
○ Multikey Index : 배열 필드에 대한 인덱스
○ Geospatial Index : 공간 검색 인덱스, 2d, 2dsphere 인덱스 지원
○ Text Index : 텍스트 검색을 위한 인덱스
○ Hashed Index : 해시 함수 기반의 인덱스
36. What is MongoDB?
Hu(mongo)us DB
● Document Database
● Key Features
○ Horizontal Scalability
○ High Performance
○ High Availability
○ Rich Query Language
38. Replication
● Secondary
○ 변경된 데이터를 실시간으로 가져와서 프라이머리와 동일한 데이터 셋 유지
○ 프라이머리가 응답 불능 상태가 되면 투표를 통해 세컨더리 멤버 중 하나가
프라이머리 멤버가 됨
○ 데이터 읽기 요청은 Read Preference를 통해 세컨더리 멤버로 요청 가능
39. Replication
● Arbiter
○ 실제 데이터는 전혀 갖지 않고 프라이머리 선출에만 관여하는 멤버
○ HA를 보장하기 위해 레플리카 셋은 최소 3개 이상의 멤버가 필요한데 비용을
절감하기 위해 아비터 사용
46. Summary
Key Features
● Horizontal Scalability
○ 샤딩을 통해 지원
● High Performance
○ 인덱스와 비정규화된 데이터 모델을 통해서 제공
● High Availability
○ 레플리카 셋을 통해 지원
● Rich Query Language
○ CRUD 뿐만 아니라 Data Aggregation과 Text search, Geospatial 쿼리도 제공
56. 문서 모델 (Document Model)
"user_id": 251,
"first_name": "Bill",
"last_name": "Gates",
"summary": "Co-chair of the Bill & Melinda Gates... Active blogger.",
"region_id": "us:91",
"industry_id": 131,
"photo_url": "/p/7/000/253/05b/308dd6e.jpg",
"positions": [
{
"job_title": "Co-chair",
"organization": "Bill & Melinda Gates Foundation"
},
{
"job_title": "Co-founder, Chairman",
"organization": "Microsoft"
}
],
"education": [
{
"school_name": "Harvard University",
"start": 1973,
"end": 1975
},
{
"school_name": "Lakeside School, Seattle",
"start": null,
"end": null
}
],
"contact_info": {
"blog": "http://thegatesnotes.com",
"twitter": "http://twitter.com/BillGates"
}
}
문서 데이터베이스 설계
● 비정규화(Denormalization)
○ 데이터 중복 저장
○ 조인에 대한 요구 사항 최소화
"user_id": 251,
"first_name": "Mark",
"last_name": "Zuckerberg",
"summary": "Co-founding and leading Facebook",
"region_id": "us:91",
"industry_id": 131,
"photo_url": "/p/7/000/253/05b/308dd6e.jpg",
"positions": [
{
"job_title": "The founder and CEO",
"organization": "Facebook"
}
],
"education": [
{
"school_name": "Harvard University",
"start": 2002,
"end": 2004
}
],
"contact_info": {
"facebook": "https://www.facebook.com/zuck"
}
}
57. 문서 모델 (Document Model)
비정규화는 어느 정도로?
● 애플리케이션의 질의 형태 파악
● 질의 성능을 향상시키기 위해 사용
● 쓰기와 저장공간을 더 사용하므로 남용은 금지
● 자주 사용하는 쿼리가 조인이 많이 필요한 경우
58. 문서 모델 (Document Model)
비정규화는 어느 정도로?
● 애플리케이션의 질의 형태 파악
● 질의 성능을 향상시키기 위해 사용
● 쓰기와 저장공간을 더 사용하므로 남용은 금지
● 자주 사용하는 쿼리가 조인이 많이 필요한 경우
59. 문서 모델 (Document Model)
비정규화 장단점
● 장점
○ 질의 성능 향상
○ 조인 연산의 감소
○ 더 적은 테이블 참조 (더 적은 버그 발생)
● 단점
○ 삽입과 갱신 비용이 비쌈
○ 삽입과 갱신을 위한 작성 코드양의 증가
○ 데이터의 일관성 문제가 발생할 수 있음
○ 더 많은 저장 공간 사용
60. 문서 모델 (Document Model)
일대다(one-to-many) 관계
● 예제
○ 하나의 고객이 여러 주소를
가지고 있는 경우
{
customer_id: 76123,
name: 'Acme Data Modeling Services',
person_or_business: 'business',
address : [
{ street: '276 North Amber St',
city: 'Vancouver',
state: 'WA',
zip: 99076} ,
{ street: '89 Morton St',
city: 'Salem',
state: 'NH',
zip: 01097}
]
}
61. 문서 모델 (Document Model)
다대다(many-to-many) 관계
● 예제
○ 학생은 여러 과목을 수강할 수 있고
과목은 여러 학생이 등록됨
과목 컬렉션
{
{ courseID: 'C1667',
title: 'Introduction to Anthropology',
instructor: 'Dr. Margret Austin',
credits: 3,
enrolledStudents: ['S1837', 'S3737', 'S9825' ...
'S1847'] },
{ courseID: 'C2873',
title: 'Algorithms and Data Structures',
instructor: 'Dr. Susan Johnson',
credits: 3,
enrolledStudents: ['S1837','S3737', 'S4321', 'S9825'
... 'S1847'] },
...
학생 컬렉션
{
{studentID:'S1837',
name: 'Brian Nelson',
gradYear: 2018,
courses: ['C1667', C2873,'C3876']},
{studentID: 'S3737',
name: 'Yolanda Deltor',
gradYear: 2017,
courses: [ 'C1667','C2873']},
...
}
62. Summary
● 데이터 모델링을 위해 애플리케이션 질의 유형 파악
● 정규화(Normalization)과 비정규화(Denormalization)
○ 정규화는 이상 현상을 줄여주고 데이터 중복을 최소화
○ 비정규화는 성능 향상
○ 문서 데이터베이스 모델링에서는 비정규화를 많이 사용
● 일대다, 다대다와 같은 관계를 모델링
○ 중첩 문서를 사용
○ 다른 문서 식별자 참조 사용
○ 애플리케이션의 특성에 맞게 사용