5 주차 -mongodb 설치잠깐! CAP 이론 NoSQL이나온이유와 MongoDB NoSQL의데이터저장구조에따른세가지분류 RDBMS와 NoSQL특성비교 RDBMS와 NoSQL의사용시기 MongoDB 소개및특징 MongoDB와 RDBMS와의공통 MongoDB CRUD Data Modeling 참고 MongoDB CRUD Operations MongoDB 실습설치환경구동확인 & Shell 확인참고자료 설치 http://docs.mongodb.org/manual/installation/ 잠깐! CAP 이론 NoSQL 은분산형구조를띠고있기때문에분산시스템의특징을그대로반영하는데, 그특성중의하나가 CAP 이론이다. 이이론은 2002 년버클리대학의 Eric Brewer 교수에의해발표된분산컴퓨팅이론으로, 분산컴퓨팅환경은일관성 (Consistency), 가용성 (Availability), 분산가용성 (Partitioning) 세가지특징을가지고있으며, 이중두가지만만족할수있다는이론이다. 분산시스템이추구하는데이터의특성세가지 1. CA 분류 ( 시스템이죽을지언정메시지손실은방지하는강한신뢰형 ) 2. 3. 일관성 ( Consistency) : 각각의사용자가같은데이터를볼수있다 = 모든노드가같은시간에같은데이터를보여줘야한다. 가용성 ( Availability) : 모든사용자가항상읽고쓸수있다 = 몇몇노드가다운되어도다른노드들에게영향을주지않아야한다. 분산가용성 ( Partition Tolerance) : 물리적으로분리된분산환경에서도작동한다 = 일부메시지를손실하더라도시스템은정상동작을해야한다. 분산시스템이추구하는데이터의특성은세가지중두가지만보장할수있다. 전통적인 RDBMS 가여기에해당한다. 트랜잭션이필요한경우필수적. CP 분류 ( 모든노드가함께퍼포먼스를내야하는성능형 ) 구글의 BigTable 과 HBase, MongoDB, Redis 등 AP 분류 ( 비동기화된서비스스토어에적합 ) Dynamo, Apache Cassandra, CouchDB 등
NoSQL 이나온이유와 MongoDB 과거에비해저장해야할데이터가증가함에따라 ' 데이터베이스를어떻게확장할것인가? 와같은상황에직면하게되었다. 데이터베이스의확장은더큰장비로성능확장 (scale-up) 을하거나여러장비에데이터를나누어분산확장 (scale-out) 하는두갈림길에서게된다. 성능확장 : 대형장비는대체로가격이비싸고결국에는더이상확장할수없는물리적한계에부딪히고만다. 분산확장 : 저장공간또는성능향상을위해저렴한서버를구매해서클러스터에추가하는방법. 더경제적이고확장이용이. 하지만하나의장비만관리하는것에비해수천대의장비를운영해야하기때문에관리가더어려워진다. NoSQL 중문서지향데이터모델은데이터를여러서버에더쉽게분산할수있게해준다. 문서를자동적으로재배분하고사용자요청을올바른장비에라우팅함으로써클러스터내데이터양과부하를조절할수있기때문. 클러스터에용량이더필요하다면, 새로운장비에클러스터에추가하면 MongoDB 가새로운장비에기존데이터를적절하게분산할것이다. NoSQL 의데이터저장구조에따른세가지분류 Key/Value Store 가장기본적인패턴의 Key/Value 의개념을지원한다.
<Key/Value Store 데이터구조 > Value 는 String 이나 Integer 와같은 Primitive 타입이될수도있지만, 더확장된개념을사용하는데, 그것이바로 Column Family 라는개념이다. Key 안에 (Column, Value) 조합으로된여러개의필드를갖는데이를 Column Family 라고한다. <Column Family 기반의데이터구조 > Ordered Key/Value Store Key/Value Store 의확장된형태로 Key/Value Store 와데이터저장방식은동일하나, 데이터가내부적으로 Key 순서로 Sorting 되어저장된다. NoSQL 은 RDBMS 의 Order By 와같은기능을제공하지않기때문에결과값을업데이트날짜등으로 Sorting 해서보여주는것은이 Ordered Key/Value Store 가절대적으로유리하다. 대표적인제품으로는아파치 (Apache) 의 HBase, Cassandra 등이있다. Document Key/Value Store Document 타입은 XML, JSON, YAML 과같이구조화된데이터타입으로, 복잡한계층구조를표현할수있다. Document Store 기반의 NoSQL 은제품에따라다르기는하지만대부분추가적인기능 (Sorting, Join, Grouping 등 ) 을제공한다. 대표적인제품으로는 MongoDB, CouchDB 등이있다.
Nosql 주요 5 가지관심도 (2012 년 1 월 ~2014 년 8 월현재 ) 막대그래프차례대로 : MongoDB, Apache Cassandra, Redis, Apache Hadoop, CouchDB 관심도는 MongoDB 가가장높고, 근소한차이로 Apache Hadoop 로 NoSQL 계열중가장큰관심을받고있고, 그다음은 Redis, Apache Cassandra, CouchDB 등은상대적으로큰관심을받진못하고있다. RDBMS 와 NoSQL 특성비교 RDBMS 장점 : 데이터무결성과정합성보장, 정규화된테이블지원, 트랜잭션지원단점 : 확장성에한계존재, 클라우드분산환경에적합하지않음. NoSQL 장점 : 웹환경에서다양한정보를검색하고저장할수있음단점 : 데이터에대한무결성과정합성을보장하지않음. 데이터쓰기동작을기준으로볼때의차이 NoSQL 은데이터를먼저로그에저장하고, 그다음에메모리로이동시킨다. 그러고나서어느순간저장해야할시기가오면이를데이터베이스에저장한다.( 백그라운드스레드를통해디스크에기록한다 ) RDBMS 는 NoSQL 과반대로데이터베이스에저장한데이터를메모리에옮기고이를다시로그로저장하는순서를가진다. RDBMS 와 NoSQL 의사용시기 RDBMS 중대형데이터베이스 (10~100GB), ACID 특성을엄격히만족, 데이터가밀접하게연관, 높은사양의하드웨어사용 NoSQL 높은확장성을지원해야하고, 동시에접근이일어날수있는경우, 반드시 ACID 가보장될필요는없음. 낮은예산을가지고있지만, 확장성이높은경우를고려할때필요 ( 웹사이트나소셜서비스구성등 ) MongoDB 소개및특징 MongoDB는 Humongos라는회사의제품명이었으며현재 10gen으로회사명이변경되어운영되고있는 C++ 로구현된오픈소스 document 데이터베이스. 기본적인인터페이스로 BSON(Binary JSON) 을이용해웹에서의접근성을높이면서도커서, 참조키등기존관계형데이터베이스의 SQL 과유사한개념을유지하고있어처음접하더라도쉽게적응할수있다.
JSON Type 의데이터저장구조를제공한다. CRUD(Create, Read, Update, Delete) 위주의다중트랜잭션처리도가능하며인덱스로빠른데이터검색이가능하다. MapReduce( 분산 / 병렬처리 ) 기능을제공한다. - ' 쿼리언어 ' 로자바스크립트사용. 복잡한로직을임의로표현할수있다. 느리기때문에실시간데이터분석에는적합하지않음. Sharding( 분산 )/Replica( 복제 ) 기능을제공한다. 큰크기의객체를다룰때에는 GridFS 를사용하고, 색인을다룰때는 B- 트리를사용한다. MongoDB 와 RDBMS 와의공통 주키와색인지원 ( 필요하면다중색인도지원 ) 정렬과제한을지원하는 query 와모델제공집합연산제공 Document Collection MongoDB CRUD CRUD Concepts Read Operations Query Interface MongoDB 의 Query 를아래의 SQL 문과비교
Query Behavior limits, skips, sort orders 의쿼리를이용하여수정할수있음. Query Statements Projections : 반환할필드. Write Operations Create
위에서의 MongoDB insert 의내용은아래의 SQL 문과동일하다. Update 위에서의 MongoDB 의 update 은아래의 SQL 문과동일하다. Delete 위에서의 MongoDB 의 delete 은아래의 SQL 문과동일하다. Data Modeling
MongoDB 는조인을지원하지않기때문에여러컬렉션에서문서를모으려면쿼리를여러번수행해야한다. 비정규화는모든데이터를하나의문서에내장하는것으로, 정규화의반대다. 최족데이터사본에대한참조를가지는문서대신에여러문서가데이터의사본을갖는다. 이는정보가변경되면여러문서가갱신되어야하지만모든관련데이터는하나의쿼리로가져올수있음을뜻한다. 일반적으로정규화는쓰기를빠르게만들고비정규화는읽기를빠르게만든다. 따라서애플리케이션에적합한타협점을찾을필요가있다. RDBMS 가데이터모델링에서부터시작해서정규화를통해 ( 중복제거 ) 테이블을만들어내고, 해당테이블을통해쿼리를수행해결과를뽑아낸다고하면, NoSQL 은이와정반대의접근이필요하다. 먼저수행할쿼리를정의하고이에맞춰데이터테이블을정의하고, 성능을높이기위해일부로중복을허용해테이블을정의해야한다. 설계주요특징 MongoDB 는데이터의중복을허용하며비정형화된설계를지향한다. MongoDB 는중첩데이터구조를설계할수있기때문에불필요한 JOIN 을최소화시킬수있다. MongoDB 는다대다관계구조를설계할수있고구축할수있다. MongoDB 는 Schema 중심으로설계하지않는다. NoSQL 은기본적으로 RDBMS 와다르다. 데이터저장방식도다르고기능도부족하기때문에, RDBMS 처럼데이터모델링을하면 100% 성능문제가생길수밖에없다. Document Structure 참조방식 (References) 내장방식 (Embedded Data)
내장방식과참조방식비교 내장방식이좋은경우 : 작은하위문서, 정기적으로변하지않는데이터, 결과적인일관성이허용될때, 증가량이적은문서, 조회하려는두번째쿼리를수행하기위해자주필요한데이터, 빠른읽기 참조방식이좋은경우 : 큰하위문서, 자주변하는데이터, 즉각적인일관성이필요할때, 증가량이많은문서, 결과에서자주제외되는데이터, 빠른쓰기 인덱스선택 데이터를모델링할때, 인덱스선택도중요한내용중하나이다. MongoDB 에서도원하는곳에색인을수행한다. _id 필드는자동으로색인찾고자하는키에대한필드는색인필요보통정렬하는필드는색인수행 인덱스생성 컬렉션당최대 64 개까지의인덱스를갖도록제한되어있다. 일반적으로주어진컬렉션에두세개이상의인덱스를갖지않는게좋다. 그러므로인덱스로어떤필드가적합한지신중히파악하는것이좋다. 복합인덱스생성 쿼리가여러정렬방향이나검색조건에여러키를가질때유리하다.
참고 MongoDB CRUD Operations Data Models CAP 정리 MongoDB - 제 13회한국자바개발자컨퍼런스책몽고디비핵심가이드책몽고디비완벽가이드 MongoDB 실습 설치 설치환경 Windows Server 2008 R2 edition Windows 64-bit Windows 32-bit ( newer than Windows XP ) Download ( http://www.mongodb.org/downloads ) 구동확인 & Shell 확인 구동확인 & Shell 확인 설치된폴더 C:\Program~~\MongoDB xx 에서편의상 C:\mongodb 로이동 Data 보관을위한폴더생성 c:\> md data
c:\> md data\db 실행시, Data 폴더지정옵션 C:\mongodb\bin> mongod.exe --dbpath c:\data\db Shell 실행 C:\mongodb\bin> mongo.exe java 에서의이용 mongodb java 에서의활용 maven dependency. <dependency> <groupid>org.mongodb</groupid> <artifactid>mongo-java-driver</artifactid> <version>2.12.3</version> </dependency> 실습및 java SRC : 몽고.txt 기타 URL https://university.mongodb.com/ https://github.com/spring-projects/spring-data-mongodb https://github.com/spring-projects/spring-data-book 참고자료 MongoDB 핵심가이드 ( 책 ) http://bcho.tistory.com/742