mongodb2.2와 2.4의 신 기능 소개

21
MongoDB 2.2~2.4 티쓰리엔터테인먼트 모바일 1팀 공통 기술 개발팀 최흥배 과장

Upload: -

Post on 18-Jun-2015

1.807 views

Category:

Technology


5 download

DESCRIPTION

어딘가에서 자료를 가져와서 짜집기 한 것입니다^^;

TRANSCRIPT

Page 1: Mongodb2.2와 2.4의 신 기능 소개

MongoDB 2.2~2.4

티쓰리엔터테인먼트 모바일 1팀 공통 기술 개발팀 최흥배 과장

Page 2: Mongodb2.2와 2.4의 신 기능 소개

Version 2.2

Page 3: Mongodb2.2와 2.4의 신 기능 소개

병렬 처리 강화

Global 락을 없애고, DB 레벨 락으로. 이후에도 계속 락의 단위를 좁힐 예정. 락 상태는 아래의 명렬어를 확인 가능 db.currentOp() db.serverStatus()

Page 4: Mongodb2.2와 2.4의 신 기능 소개

Page fault 아키텍처 개선

락 중에 PageFault가 발생하여 락이 연장되는 것을 피하도록. if 쓰기 오퍼렌이션에서 - 접근 하는 곳이 메모리 상이 아니면 mutation이 일어난다 - Page fault 하려고 할 때 Then - PageFaultException을 발생 시킨다 - 락을 해제하고 page을 메모리로 올린다 - 쓰기 오러페이션을 재 실행

Page 6: Mongodb2.2와 2.4의 신 기능 소개

Aggregation Framework

SQL의 GROUP BY 기능과 비슷하다. 저장된 데이터에 대해 다양한 처리나 조작을 하여 이전에는 JavaScript로 실해하고 있던 집계 처리를 MongoDB 명령어로 할 수 있다. - $match //집계 처리 조건을 지정하고 매칭한다(SQL의 WHERE 또는 HAVING) - $project //집계 처리를 할 필드를 선택/삭제, 리네임(SQL의 AS), 집계 결과를 insert 한다 - $unwind //배열을 지정하고 전개해서 반환한다 - $group //$sum, $avg 등을 사용하여 집계 처리를 한다 - $sort // 지정된 sort 키에 의한 소트 - $skip //지정된 숫자 만큼 skip 한다 - $limit //지정된 문자 만큼 집계 결과를 반환한다

Page 9: Mongodb2.2와 2.4의 신 기능 소개

Tag를 사용한 Sharding 가능하도록

Tag 베이스로 레플리케이션 - sharding key에 의한 쓸 곳을 제어 - uid=1~100은 A 데이터 센터의 노드, uid=101~200은 B 데이터 센터의 노드 라는 설정이 가능

Page 10: Mongodb2.2와 2.4의 신 기능 소개

TTL(Time To Live) Collections

기한 있는 컬렉션을 만들 수 있다. date-type 필드가 필요. capped collection으로는 사용할 수 없다.

//events 컬렉션 데이터를 status 필드를 기점으로 30초 후에 삭제하도록 설정 db.events.ensureIndex( { "status": 1 }, { expireAfterSeconds: 30 } ) //status에는 date-type information을 넣는다. new Date()로 OK. db.events.insert( { "status" : new Date(), "value" : 1 } ); db.events.insert( { "status" : new Date(), "value" : 2 } ); db.events.insert( { "status" : "not Date", "value" : 3 } ); db.events.insert( { "no-status" : "blank", "value" : 4 } ); db.events.find(); //30초 후에 db.events.find();

Page 11: Mongodb2.2와 2.4의 신 기능 소개

Server-side Function을 load 가능

db.system.js에 보존한 function을 db.loadServerScripts()에서 load 할 수 있다.

Page 12: Mongodb2.2와 2.4의 신 기능 소개

기타 등등....

Page 13: Mongodb2.2와 2.4의 신 기능 소개

Version 2.4

Page 14: Mongodb2.2와 2.4의 신 기능 소개

전문 검색 기능

인덱스가 있는 전문 검색 기능 지원. 영어만 지원 -_- 크게 3 부분으로 나누어 처리 - Tokenizer로 형태소 분석 - Stop Word Fultering로 불 필요한 단어를 제거 - Stemming 처리

Page 15: Mongodb2.2와 2.4의 신 기능 소개

Kerberos 인증 지원

서브 스크립션 판만 지원. mongod 인증으로 이용 가능. mongod 기동 시에 파라미터로 지정한다.

Page 16: Mongodb2.2와 2.4의 신 기능 소개

권한에 의한 접근 룰

roles(권한) 내용

read 모든 컬렉션 데이터를 읽기 가능

readWrite 모든 컬렉션 데이터를 읽기, 쓰기 가능

dbAdmin 인덱스 작성, DB 통계 정보 취득 등 데이터 베이스 관리자 조작 가능

userAdmin system.users에 대해서 읽기 쓰기 가능, 유저 작성이나 권한 변경 등 관리 가능

clusterAdmin 레플리케이션이나 샤딩 관리자 조작 가능

readAnyDatabase admin 데이터 베이스를 포함한 모든 논리 데이터 베이스를 읽기 가능

readWriteAnyDatabase admin 데이터 베이스를 포함한 모든 논리 데이터 베이스를 읽기 쓰기 가능

userAdminAnyDatabase userAdmin으로서 유저 관리를 하고, 모든 논리 데이터 베이스를 읽기, 쓰기 가능

dbAdminAnyDatabase dbAdmin으로서 데이터 베이스를 관리하고, 모든 논리 데이터 베이스를 읽기, 쓰기 가능

권한은 데이터 베이스 마다 설정 가능. {database}.system.users 컬렉션에 저장.

Page 17: Mongodb2.2와 2.4의 신 기능 소개

JavaScript 엔진을 V8로 변경

기본 JavaScript 엔진을 SpiderMonkey에서 V8로 변경. mongo shell 에서 db.serverBuildInfo()로 확인할 수 있다. 또는 interpreterVersion()으로 확인 할 수 있다.

Page 18: Mongodb2.2와 2.4의 신 기능 소개

GeoJSON을 사용한 구면지리 공간 인덱스 2.4 에서 구면지리공간(Spherical Geospatial) 인덱스의 index type가 2dsphere로 되었다.

Page 19: Mongodb2.2와 2.4의 신 기능 소개

인덱스 구축 자동 재개 (resume 기능)

인덱스 구축 중에 mongod를 정지한 경우라도 다음 기동 후에 자동적으로 재개. 2.4 이전에는 mongod를 정지하기 전에 인덱스 구축을 끝내야 했다. noIndexBuildRetry 옵션으로 무효화 할 수 있다.

Page 20: Mongodb2.2와 2.4의 신 기능 소개

해쉬 도큐먼트 키를 이용한 샤딩

샤드 키를 해쉬화 하여 데이터 치우침을 막는다. 예를 들면 샤드 키가 메일 주소인 경우 알파벳에 의한 치우침이 생겨 균등한 범위 지정이 어렵게 된다.

Page 21: Mongodb2.2와 2.4의 신 기능 소개

(일어)https://github.com/syokenz/marunouchi-mongodb/tree/master/20120926/syokenz (일어) http://gihyo.jp/dev/serial/01/mongodb/0002 http://docs.mongodb.org/manual/release-notes/2.2/ (일어)http://jp.docs.mongodb.org/manual/release-notes/2.2/ http://docs.mongodb.org/manual/release-notes/2.4/ (일어) https://github.com/syokenz/marunouchi-mongodb/tree/master/20130219/syokenz