MongoDB의 도큐먼트 형식은 임의의 데이터 구조를 저장하는 스키마로 잘 알려진 JSON에기반한다.
1.1 인터넷에서 태어나다.
1.2 MongoDB의 핵심 기능
1.2.1 도큐먼트 데이터 모델
MongoDB는 도큐먼트 지향적인 데이터베이스이다.
컬렉션 :
정규화 : 한 객체의 데이터를 여러개의 테이블로 나누어 표현하는 기법
스키마가 없는 장점:
1.2.2 애드혹 쿼리 ad hoc query를 지원
1.2.3 인덱스
B-트리
1.2.4 복제
1.2.5 속도와 내구성
1.2.6 확장
1.3 MongoDB코어 서버와 툴
1.3.1 코어 서버
1.3.2 자바스크립트 셀
1.3.3 데이터베이스 드라이버
1.3.4 커맨드라인 툴
1.4 MongoDB를 사용하는 이유
1.4.1 MongoDB와 다른 데이터베이스 비교
간단한 키-값 저장 시스템
정교한 키-값 저장 시스템
관계데이터베이스
도큐먼스 데이터베이스
1.4.2 사용예와 배포
웹 애플리케이션
애자일 개발
분석과 로깅
캐싱
가변적인 스키마
1.5 팁과 한계
MongoDB로 실제 애플리케이션을 개발하고 실제 서비스 되는 시스템은 배포하기 전에 미리 알고 있어야만 하는 한계점이 있습니다.
첫번째로 , MongoDB는 보통 64비트 시스템에서 실행되어야 합니다.
가상 메모리 매핑을 사용해서 발생하는 두 번째 결과는 MongoDB가 필요한 경우에 메모리를 자동으로 할당한다는 점이다.
마지막으로 언급할 만한 것은 비록 MongoDB가 단일 노드의 로컬에서 실행해 보기에 매우 단순한 데이터베이스 중 하나이지만 , 대규모의 클래스터를 운영하기 위한 유지비용이 발생할 수 있다.
1.6 MongoDB역사
1.8.x 더이상 공식적으로 지원하지 않음
2.0.x 더이상 공식적으로 지원하지 않음
2.2.x 더이상 공식적으로 지원하지 않음
2.4.x 가장 오래된 안정화 버전
2.6.x 안정화 버전
3.0.x 새로운 안정화 버전
1.7 추가적인 자료
1.8 요약
02. 자바스크립트 셸을 통한 MongoDB
2.1 MongoDB 셸 검험하기
2.1.1 셸 시작하기
mongo
2.1.2 데이터베이스 , 컬렉션, 도큐먼트
JSON형태로 표현하는 도큐먼트에 저장한다.
MongoDB가 RDBMS의 테이블과 같이 도큐먼트들을 그루핑 할 수 있는 방법이 필요함을 뜻하며 , 이를 컬렉션이라 부른다.
use tutorial
tutorial =>namespace
db.users.find()
MongDB의 ID필드
db.users.insert({username:"jones:})
질의 술어 넘겨주기
db.users.find()
dictionary 형태로 한다.
2.1.4 도큐먼트 업데이트
연산자 업데이트
db.users.update({username:""},{contry:""})
필드를 추가하거나 값을 설정하기를 원한다면 반드시 $set연산자를 상용
db.users.update({username:""},{$set:{contry:""}})
$unset
$push:
$addToSet:두가지 연산자 모두 배열에 아이템을 추가하는데
2.1.5 데이터 삭제
db.foo.remove({})
db.users.remove({:""})
2.1.6 기타 셸 특징
help
db.help()
2.2 인덱스 생성과 질의
2.2.1 대용량 컬렉션 생성
db.numbers.count()
범위 쿼리
db.numbers.find({num:{"$gt":1995}})
2.2.2인덱싱과 explain()
explain는 쿼리가 사용한 인덱스가 있을 경우에 어떤 인덱스를 사용했는지를 찾아서 쿼리 경로에 대한 정보를 제공해
줌으로써 개발자로 하여금 시간이 많이 소용되는 연산을 찾아내도록 도와준다.
db.numbers.find({num:{"$gt":1995}}).explain("executionStats")
2.3 기본적인 관리
2.3.1 데이터베이스 정보 얻기
show dbs
show collections
db.stats()
2.3.2 명령어가 작동하는 방식
db.runCommand({dbstats:1})
db.runcommand({collstats:"numbers"})
db.runcommand()
db.$cmd.findOne({collstats:"numbers"})
stats()는 데이터베이스 명령어를 어떻게 호출했는지 기억해보기 바란다.
2.4 도움말 얻기
db.help()
db.numbers.help()
save()가 단지 insert()와 update()의 wrapper임을 알 수 있다.
2.5 요약