2. 문서 데이터베이스란?
• 문서 데이터베이스는 키-값 저장소의 값 부분에 문서를 저장
• 문서의 종류는 XML, JSON, BSON 등
• 값을 검사할 수 있는 키-값 저장소
3. 오라클과 몽고DB 용어 비교
오라클 몽고DB
데이터베이스 인스턴스 몽고DB 인스턴스
스키마 데이터베이스
테이블 컬렉션
로우(=행) 문서
rowid _id
조인 DBRef
4. 문서 데이터베이스란?
{ “firstname” : “Martin”, { “firstname” : “Pramod”,
“likes” : [ “Biking”, “citiesvisited” : [ “Chicago”, “London”,
“Photography” ], “Pune”, “Bangalore” ],
“lastcity” : “Boston”, “addresses” : [
“lastVisited” : } { “state” : “AK”,
“city”: “DILLINGHAM”,
“type” : “R” },
{ “state” : “MH”,
“city”: “PUNE”,
“type” : “R” }, ],
“lastcity” : “Chicago” }
• 테이블의 모든 행이 같은 스키마를 따를 필요가 없다. 모든 칼럼을 정의할 필요가 없으며, 새로
운 속성을 자유롭게 추가 가능
5. 몽고DB의 특징 - 일관성
• 복제본 집합(replica set)을 사용해 일관성 수준을 설정
db.runCommand({getlasterror : 1, w : “majority”})
서버가 1대 있고 w를 majority로 설정하면, 노드가 하나이므로 즉시 Return
• slaveOk를 설정해 슬레이브로부터의 읽기 허용 설정
Mongo mongo = new Mongo(“localhost:27017”); mongo.slaveOk();
• 특정 쓰기는 WriteConcern을 REPLICAS_SAFE로 설정해 마스터와 일부 슬레이브
에 쓰이도록 설정
DBCollection shopping = database.getCollection(“shopping”);
Shopping.setWriteConcern(REPLICAS_SAFE);
6. 몽고DB의 특징 – 트랜잭션, 가용성
• 단일 문서 수준에서 트랜잭션은 원자적 트랜잭션
• WriteConcern을 사용해 쓰기에 대한 안전성 수준 조정 가능
• 문서 데이터베이스는 마스터-슬레이브 설정으로 데이터를 복제해 가용성을
높임
• 몽고DB는 복제를 수행하고 복제본 집합을 사용해 고가용성을 제공
• 우선순위에 따라 주(마스터) 노드를 선정, 사용자가 임의로 우선순위 부여 가
능
• 모든 요청은 마스터 노드로 전달되며 슬레이브로 복제, 마스터 노드가 다운되
면 우선순위에 따라 새로운 마스터 선정
• 그림 9.1 참조 (111 Page)
7. 몽고DB의 특징 – 조회 기능
• JSON으로 표현하는 질의어를 사용
관계형 데이터베이스 몽고DB
SELECT * FROM order db.order.find()
SELECT * FROM order WHERE customerId = db.order.find({“customerId”:”883c2c5
„883c2c5b4e5b‟ b4e5b”})
SELECT orderId, orderDate FROM order WHERE db.order.find({customerId:”883c2c5b
customerId = „883c2c5b4e5b‟ 4e5b”}, {orderId:1, orderDate:1})
SELECT * FROM customerOrder, orderItem, prodect db.orders.find({“items.product.name” :
WHERE customerorder.orderId = orderItem.customerOrderId
AND orderItem.productId = product.productId
/Refactoring/})
AND product.name LIKE „%Refactoring%‟
8. 몽고DB의 특징 – 확장성
• 더 좋은 장비로 데이터베이스를 이관하는것이 아닌 노드를 추가하거나, 데이
터 스토리지를 변경하는 것
• 읽기 부하에 대한 확장성은 슬레이브를 추가해 읽기 요청을 슬레이브에서 처
리하도록 설정 (그림 9.2 – 114Page)
• rs.add(“mongod:27017”);
• 새로운 노드가 추가되면 기존 노드와 동기화 되며, 다른 노드를 재식할 필
요 없음, 애플리케이션 중단 시간 미발생
• 쓰기 확장성은 데이터 샤딩을 이용
• db.runCommand( {shardcollection : “ecommerce.customer”, key : {firstname:1}} )
• 클러스터에 노드를 추가해 쓰기 가능한 노드수를 늘려 수평 확장 가능, 리
팩터링이 발생하는 동안 애플리케이션 중단 시간 미발생, 샤드 간 균형을
유지하는 동안 최상의 상태로 동작하지 못함
• 샤드 키의 역할이 매우 중요 (고객의 성으로 분할, 사용자 위치를 이용해
9. 문서 데이터베이스의 적절한 사용처
• 이벤트 로깅
• 모든 종류의 이벤트를 저장하는 중앙 데이터 저장소 역할 가능, 데이터 형
태가 지속적으로 변경되도 사용 가능
• 콘첸츠 관리 시스템, 블로깅 플랫폼
• 미리 정의한 스키마가 없고 보통 JSON을 이해 가능
• 웹 분석 또는 실시간 분석
• 실시간 분석을 위한 데이터 저장 가능, 문서의 일부 업데이트 가능
• 전자상거래 애플리케이션
• 비용이 많이 드는 데이터베이스 리펙터링이나 데이터 전환 없이 데이터
모델을 발전시켜 나갈 수 있는 능력 필요
10. 문서 데이터베이스의 부적절한 사용처
• 여러 연산에 걸친 복잡한 트랜잭션
• 여러 문서에 걸친 트랜잭션 동작은 부적절, 다만 레이븐DB처럼 지원가능
한 DB도 존재
• 변화하는 집합 구조에 대한 쿼리
• 유연한 스키마란 데이터베이스가 스키마에 어떤 제한도 강제하지 않는다
는뜻
• 여러 테이블을 조인하는데 조인하는 테이블이 계속 변경되는 집합에서
부적절
• 즉, 집합 구조의 설계가 계속 변경되는 구조에서 부적절