2013년 8월 27일 화요일

몽고 db 교육 2일차

1. 맵리듀스

- 맵에 데이터를 수집, KEY-VALUE로 저장하므로 그룹바이가 가능함. 리듀스일때 사용할 연산을 코딩.
- 자바스크립트 2 문법과 동일함.
- 결과값은 out옵션으로 지정한 콜렉션에 저장됨.(저장형 함수)
- 생성한 배열이나 변수는 this문법으로 전역적으로 사용 가능.


--- 문법 ---

db.내가 처리할 콜렉션.mapReduce(
 map함수(또는 함수가 저장된 변수),
 reduce함수(또는 함수가 저장된 변수),
  {(옵션...)
   out (필수옵션),
   quert (where절),
   sort,
   limit,
   finalize, (finally 문법과 동일. 변수 가능),
   scope,
   jsMode,
   verbose
  }
)

--- 문법 끝 ---


1) 저장형 함수 - 함수를 컬렉션에 저장
2) 비저장형 함수 - 코딩한 함수를 직접 사용.

3) 툴
 - mongovue
 - Tadpole-SR12-3




2. 트랜젝션
 - 기본 Auto commit 
 - 트랜젝션을 위해 만들어진 것은 아님 - Read uncommitted
 - 로직을 통해 트랜젝션과 유사항 기능을 수행
 - 상세로직
   1) 트랜젝션 컬렉션 추가, 하나의 도큐먼트 생성, 값은 initial
   2) 대상 데이터에 트랜젝션 필드 추가
   3) 트랜젝션 도큐먼트의 값을 pending으로 변경
   4) 대상 데이터의 트랜젝션 필드에 트랜젝션 도큐먼트의 아이디로 변경
   5) 데이터 업데이트
   6) 트랜젝션 도큐먼트의 값을 committed로 변경
   7) 데이터의 트랜젝션 필드값을 제거
   8) 트랜젝션 도큐먼트의 값을 done로 변경. 완료.



3. Index
 - db.employees.ensureIndex({empno:1}, {options...}) -> empno로 asc인덱스, -1일 경우 desc
 - find 명령어로 사용가능.
 - hint 명령어로 강제로 인덱스 서치를 사용하도록 할 수 있음.
 - sort 명령어로 소팅
 - option 
  1) unique : true => 유니크하게 인덱스를 부여.
  2) dropDups : true => 유니크하지 않을경우 데이터 삭제
  3) sparse : true => 빅데이터 중 극소수의 경우 좋은 퍼포먼스, 지정한 필드를 가지고 있는 데이터가 소수여야 함.
  4) covered 인덱스 - 인덱스만 가지고 find를 수행한다. 즉, 컬렉션과 연계하지 않고 인덱스만 이용하므로 I/O의 비용을 줄인다.
  5) background : true -> 우선순위를 낮춘다.
  6) TTL - Time to Live. 인덱싱에 해당하는 도큐먼트는 일정시간이 흐른뒤 삭제됨.
 db.employees.ensureIndex({ename:-1}, {expireAfterSeconds:30}) ==> 30초뒤 remove..
  7) GeoSpatial 인덱스 - 2d 위치기반 거리측정시 사용


4. 사용자 인증
mongod --dbpath C:\mongodb\test --journal --auth


5. 데이터 모델링
 1) Nested table - 테이블 안의 테이블. 서브 테이블.
 2) 테이블 안에 배열. (약한 관계의 테이블, 3만5천건의 배열정보가 한계)
  -- 여까지 RDBMS
 3) Rich Document
   a) Embedded Document - 도큐먼트 안에 서브 도큐먼트가 배열로 존재함.
   b) Extend Document - UPDATE를 통해 서브 도큐먼트가 추가됨.
   - 서브정보는 16MB에 제한됨.
4) DBRef - _id값을 이용하여 포린키 형식으로 저장
5) n:m 관계패턴 - 다대다 구조
6) 상속패턴 - 뭔소린지 모르겠음. 논리적인 상속구조?

댓글 없음:

댓글 쓰기