MongoDB Trends and Introduction 우정웅연구원 Dec. 02, 2014
Contents 1. MongoDB? 2. MongoDB 주요특징 3. MongoDB 구조 4. Performance c2014 rockplace 2
rockplace MongoDB? c2014 rockplace 3
MongoDB? NoSQL(Not Only SQL) - wikipedia 에따르면, 1988년카를로스트로지에의해처음사용된용어로, 표준 SQL 인터페이스를사용하지않는경량의오픈소스관계형데이터베이스를지칭 - 하지만, 최근에는대용량의데이터를처리하거나다양한요구사항에따라확장성을고려하여출시되는제품들을 Not Only SQL, 즉 NoSQL 이라고부르게됐다. c2014 rockplace 4
MongoDB? NoSQL List (http://nosql-database.org/) Wide Column Store / Column Families - Cassandra, HBase Document Store - MongoDB, CouchDB Key-Value / Tuple Store - DynamoDB, Redis Graph Databases - InfoGrid, Titan c2014 rockplace 5
MongoDB? DB-Engines Ranking (http://db-engines.com/en/ranking, October 2014) c2014 rockplace 6
MongoDB? Cassandra vs. HBase vs. MongoDB (http://db-engines.com/en/system, October 2014) c2014 rockplace 7
MongoDB? Cassandra vs. HBase vs. MongoDB (http://db-engines.com/en/ranking_trend, October 2014) c2014 rockplace 8
MongoDB? Cassandra vs. HBase vs. MongoDB (http://www.google.com/trends, October 2014) c2014 rockplace 9
MongoDB? NoSQL Job Trends (http://regulargeek.com/2014/09/01/nosqljob-trends-august-2014/) c2014 rockplace 10
MongoDB? 적용사례 (http://www.mongodb.com/use-cases) c2014 rockplace 11
MongoDB? NoSQL DB 중하나이며, NoSQL 제품군중가장많이 활용되고있는오픈소스기반의 DBMS Collection 으로이루어진각각의데이터베이스들의집합으로구성 Document 방식이기때문에유연한스키마를지원 - Dynamic schema - 구조적이지않기때문에, 다양한스키마를쉽게생성 할수있다. - Embedded document 와 array 를통해 join 에대한 필요성을줄일수있다. c2014 rockplace 12
MongoDB? 높은성능및가용성 - Embedding으로인해빠른 read/write 가능 - 인덱싱을통한빠른검색이가능 (Memory mapping 기술 ) - 복제서버간 failover 기능을지원 확장성 - Automatic sharding을통해 collection 데이터를분산 - 복제된서버를통해분산된 read가가능 빠르고사용하기쉽다. CAP 이론중 C(consistency) 와 P(Partition tolerance) c2014 rockplace 13
rockplace MongoDB 주요특징 c2014 rockplace 14
MongoDB 주요특징 Sharding( 분산 ) / Replication( 복제 ) 기능제공 - Automatic Sharding 매커니즘을이용하여수평으로확장 - 이와같은매커니즘을이용하여 Auto load balancing 이이루어지고, 자동장애복구기능과더불어이론상으로는 MongoDB의구성을수백 ~ 수천개의노드까지확장가능 - 이러한구성환경에서, 클라이언트는 Query를분석해서해당하는노드들로리다이렉트시켜주는 mongos 라는특별한구성요소 ( 노드 ) 에연결 c2014 rockplace 15
MongoDB 주요특징 Sharding( 분산 ) - http://docs.mongodb.org/manual/ c2014 rockplace 16
MongoDB 주요특징 Sharding( 분산 ) - 데이터의손실을피하기위해, 모든 logical 노드들은 replica set 역할을하는다수의물리적서버로구성 - 이러한인프라를구축하면 Map/Reduce를이용하여좋은성능의데이터셋을사용하는것이가능 - 메타데이터를저장하고있는 Config 서버가 1개또는 3개의노드가별도로필요로하며, 다른노드들과물리적으로별도의구성을권장 c2014 rockplace 17
MongoDB 주요특징 Sharding( 분산 ) - http://docs.mongodb.org/manual/ c2014 rockplace 18
MongoDB 주요특징 Sharding( 분산 ) / Replication( 복제 ) 기능제공 - MongoDB는 2가지타입의 replication을제공 - 장애복구와복제를구현하기위해 MySQL과마찬가지로 Master-Slave 구성의복제기능을제공하며, 이기능은노드간의일관성을높은수준으로보장 - Replica Set을제공하며기본적으로 Master-Slave와똑같은동작방식을보여주지만, Arbiter 를이용하여사용자임의로새로운 primary를정하는것이가능 c2014 rockplace 19
MongoDB 주요특징 Replication( 복제 ) 기능제공 - http://docs.mongodb.org/manual/ c2014 rockplace 20
MongoDB 주요특징 Replication( 복제 ) 기능제공 - failover 기능제공 (- http://docs.mongodb.org/manual/) c2014 rockplace 21
MongoDB 주요특징 Map/Reduce 기능제공 - 분산된데이터를효율적으로처리 - R-DB에서사용했던복잡한 query 지원 ( join, sub query, union 등 ) Memory Mapping 기반기술, 빅데이터를처리하는데효율적인성능을제공 - 메모리상의가상 Address에대한디스크의물리적 Address를매핑시켜불필요한작업을최소화 JSON & BSON Type을제공 c2014 rockplace 22
MongoDB 주요특징 JSON & BSON Type 을제공 - JSON(JavaScript Object Notation) - 데이터를표현하며, field 와 value 로구성 - String, Number, Boolean, Arrays, Null, Objects/Document c2014 rockplace 23
MongoDB 주요특징 JSON & BSON Type을제공 - BSON(Binary JSON) - DB에저장될때는 Binary 형태로저장 - JSON, DATE, TIMESTAMP, OBJECT ID 등현재까지 19가지데이터타입을지원한다. - 각프로그래밍언어에대한드라이버가 BSON과 JSON으로상호변환시켜주기때문에, 실제로사용자가이진형식으로만들어진 BSON Dcoument 를사용할일은없다. c2014 rockplace 24
MongoDB 주요특징 GridFS 이용한대용량데이터저장기술제공 Full Index 지원 R-DB와비슷한구조의 Query를제공 hint, explain, profiling 등을이용하여최적화가능 Fast In-Place Updates Aggregation pipeline을제공 - 데이터수집모델을위한프레임워크 - Map/Reduce에대한대체기능을제공하고, 복잡성에대한솔루션을제공 - Application code와요구되는리소스를단순화 c2014 rockplace 25
rockplace MongoDB 구조 c2014 rockplace 26
Mongo Shell Mongo Shell은 JavaScript shell 이다. 접속한후, MongoDB query 및 Map/Reduce, Aggregate, Index 생성및관리등을사용 db.help() 를통해 database 관련 query(javascript method) 를확인가능 db.collection.help() 를통해 collection 단위에서사용가능한 query(javascript method) 를확인가능 Mongo Shell에서사용가능한 JavaScript API는다음 url을참조 - http://docs.mongodb.org/manual/reference/method/ c2014 rockplace 27
MongoDB 용어 - http://docs.mongodb.org/manual/ c2014 rockplace 28
MongoDB Query - http://docs.mongodb.org/manual/ c2014 rockplace 29
MongoDB Query - http://docs.mongodb.org/manual/ c2014 rockplace 30
MongoDB Query - http://docs.mongodb.org/manual/ c2014 rockplace 31
MongoDB Query - http://tech.it168.com/a2011/0905/1242/000001242540.shtml c2014 rockplace 32
rockplace Performance c2014 rockplace 33
Performance(Index Concepts) MongoDB의모든 index 데이터구조는 B-Tree 방식 Index type은 field나 embedded field, 그리고 sub document 등에대해서 index 생성을지원하며, 다음과같은 type 들이있다. - Single Field Indexes - Compound Indexes - Multikey Indexes - Geospatial Indexes and Queries - Text Indexes - Hashed Index c2014 rockplace 34
Performance(Index Concepts) - Single Field indexes - http://docs.mongodb.org/manual/ c2014 rockplace 35
Performance(Index Concepts) - Compound Indexes - http://docs.mongodb.org/manual/ c2014 rockplace 36
Performance(Index Concepts) - Multikey indexes - http://docs.mongodb.org/manual/ c2014 rockplace 37
Performance(Index Concepts) - Geospatial Indexes and Queries * 지리정보를처리하기위해제공되며, 그리고이를처리하기위한 query 메커니즘이제공 - Text Indexes * Document 내에서텍스트검색을지원하기위해제공 - Hashed Index * Hashed index는 index를생성한필드값의 hash 항목들을유지, 관리하기위해제공 c2014 rockplace 38
Performance(Index Concepts) Default - db.collection.ensureindex(<key>, <option>) { unique : true } - unique index를생성할때사용 { sparse : true } - 해당필드의값이존재하는 document 들만으로인덱스가생성, 검색대상필드의값이전체컬렉션에서차지하는밀도가낮은경우, 쿼리최적화에도움 c2014 rockplace 39
Performance(Index Concepts) { dropdups : true } - 동일한값이여러개저장되어있는필드에 dropdups 옵션을사용하면최초입력된 document만남고나머지 document는제거된다. { background : true } - 일반적으로 index 생성시데이터베이스전체의성능지연현상을유발시킬수있다. 이에따라 index 생성시 background의옵션을사용하면다른데이터베이스의활동들을 block 하지않는다. c2014 rockplace 40
Performance(Index Concepts) Index를생성한경우 insert는항상느리다. Update, delete 에는상황에따라달라진다. Delete에서많은 document들을삭제할때는 index로부터해당하는모든 key들을삭제해야되기때문에속도가느리다. 하지만, 하나의 document만을삭제할때는삭제할 document를바로찾기때문에빠르다. 일반적으로, update 역시 delete와같다. c2014 rockplace 41
Performance(Index Concepts) Index 생성후에는, read가 write보다항상빠르다. 일반적으로 index가많을수록빠른읽기작업을수행하지만, 반대로 index가많을수록쓰기속도는느려지는것을의미한다. Index를생성할때는데이터베이스의다른작업들을차단할수있기때문에항상 collection의 size와시스템자원등을충분히고려 c2014 rockplace 42
Performance(Index Concepts) 주의사항 - index는물리적공간을차지하기때문에, 성능상의이유가아닌한적절하게사용하는것이중요 - _id index는자동으로생성되며, 필요하지않다면명시적으로 index를설정할필요가없다. c2014 rockplace 43
Performance(Explain & hint) Explain() 은 query에대한수행계획을보여준다. Explain(true) 와같이사용할경우, 기본정보보다더자세한설명을보여준다. Hint() 는 query를수행할때특정 index를사용하도록하여 query의최적화프로세스를보장한다. c2014 rockplace 44
Performance(Explain & hint) Explain c2014 rockplace 45
Performance Covered Query - 여러개의 field로생성된 index를검색할때, index의검색만으로조건에만족하는 document들이추출될수있다. - db.collection.find(~).explain.indexonly의값은 true 또는 false의값을가지는데, 값이 true인경우조건을만족하는데이터를검색하기위해오직 index만을검색한것이다. c2014 rockplace 46
Performance Covered Query - 이러한방법은 collection 에대한추가검색을피할수있기 때문에성능을개선시킬수있다. c2014 rockplace 47
Performance(currentOp & killop) currentop는 mongod나 mongos에서현재수행되고있는 operation들을확인할수있다. - currentop() 반대로 killop는현재수행되고있는 operation들을중단시킬수있다. - killop(<opid>) - <opid> 는 currentop() 로확인가능하다. c2014 rockplace 48
Performance(currentOp & killop) currentop & killop 실행결과 c2014 rockplace 49
Performance(profile) Mongod 단위로실행 read나 write operation, cursor operation 또는 database command에대한데이터정보를저장 사용자가실행하는모든문장들에대한로그정보를저장하기때문에, query 문장에대한성능지연현상이발생하는경우에는 profile을통해해당문장을추출하고분석할수있는기능 profile은기본적으로 off 상태 임계값 (threshold) 을설정할수있으며, 단위는 ms. c2014 rockplace 50
Performance(profile) { profile : <level> } - -1 = No change, Returns the current profile level. - 0 = Off, No profiling. - 1 = On, Only includes slow operations. - 2 = On, Includes all operations. { profile : 1, slowms : 200 } - slowms 옵션을통해서임계값을설정할수있다. - 위와같은경우, profile이활성화되어있으면서 200ms 보다느린연산에대한로그를저장한다. c2014 rockplace 51
Performance(profile) system.profile collection 에저장 c2014 rockplace 52
Performance(mongostat&mongotop) 두명령어모두 OS shell에서실행가능하며, --help 를통해관련도움말을확인가능 Mongostat는 MongoDB 내에서발생하는다양한작업 (insert, query, update, delete 등 ) 의상태정보와메모리상태 (mapped, vsize, res, faults, locked 등 ) 및기타시스템상태정보를출력해주는유틸리티 c2014 rockplace 53
Performance(mongostat&mongotop) vsize : 프로세스의가상크기 ( 단위 MB) faults : 초당발생하는 pagesfault 수 c2014 rockplace 54
Performance(mongostat&mongotop) repl - M : Master - SEC : Secondary - REC : Recovering - UNK : Unknown - SLV : Slave Set : Replica Set 명 c2014 rockplace 55
Performance(mongostat&mongotop) Mongotop 은 MongoDB 내의모든 collection 에대해서 read/write 의상태정보를제공하는유틸리티 c2014 rockplace 56
Performance(MMS) MMS(MongoDB Management Service) MMS에는몇가지구성요소가있으며, 대표적으로 monitoring과 backup module이있다. 제품이나서비스는 MongoDB와별개의 project 이지만, MongoDB 기반의시스템관리나운영에있어서확실하게도움을줄수있다. MongoDB와관련된모든프로세스목록들을확인가능하다. c2014 rockplace 57
Performance(MMS) Sharding 환경구성도확인가능 각노드에대한서버의설정이나 ReplicaSet의서버에대해서도 on/off가가능 Deployment, Servers, Activity, Backup, Dashboard, Administration 탭을통해다양한정보를확인가능 Chart도사용할수있다. - 단, database 기반의데이터일뿐 database 내의실질적인데이터가아니다. c2014 rockplace 58
Performance(MMS) c2014 rockplace 59
rockplace Sharding c2014 rockplace 60
Sharding Range based partitioning 기법 Sharding을구성하기위해서는반드시 shard key가필요하며, 각각의 collection에대해서로다른 shard key를가질수있다. Automatic Sharding 메커니즘을통한 Scale Out - Write Scalability 증가 Shard key는 2가지에사용 - sort를위한방법으로사용 c2014 rockplace 61
Sharding Shard key는 2가지에사용 - key range 기반에따라데이터를분배 * [k1, k2] -> S2 è k1 <= x <= k2 è x = S2 * [a,b) -> S1 è a <= x < b è x = S1 - http://docs.mongodb.org/manual/ c2014 rockplace 62
Sharding 기본적으로 MongoDB의 sharding은 2가지활동이존재 - split( 분할 ) - migrate( 이동 ) Split( 분할 ) - 분할작업은큰 size의 chunk가있는지확인하는작업 - 해당 chunk의 size가지정된 chunk size 이상으로커지면, MongoDB는 chunk를반으로분할한다. - 기본적으로, chunk size는 64MB이다. c2014 rockplace 63
Sharding Split( 분할 ) - http://docs.mongodb.org/manual/ c2014 rockplace 64
Sharding Migrate( 이동 ) - shard 간데이터의 balance를맞추는역할 - 따라서, shard 간데이터 size가불균형할경우 shard에서다른 shard로데이터를이동하는역할 - 기본적으로복제된데이터가이동하고, 이동이끝나면기존의데이터는삭제 - http://docs.mongodb.org/manual/ c2014 rockplace 65
Sharding Migrate( 이동 ) - 새로운 shard 번호및 chunk를가리키도록시스템의메타데이터를 update - 실제로는 cost가많이드는작업이며, 시스템의과부하를줄이기위해한번에많은작업을하지않는것을권장 - 이러한 migrate 중에도데이터에대한 read/write 가능 - 개념적구성요소가아니라, 실제로는 balancer 라는독립형프로세스를통해작업이이루어짐 c2014 rockplace 66
Sharding Balancer Process - Balancer는 chunk migration을관리하기위한 background 프로세스 - 정확한 byte 혹은 document, chunk의수를맞춰서 balancing이이루어지는것은아님 - 더정교한 balancing을위한부분은앞으로의버전을통해지속적으로업데이트예정 c2014 rockplace 67
Sharding Shard에서구동되는또다른프로세스 - 각 shard 에서는실제로데이터가저장되는 mongod 프로세스가존재 - config는 cluster의메타데이터를저장하기때문에 mongod 프로세스보다훨씬가볍다. - 데이터및구성요소들을규합하고, 일종의 router 역할을하기위한구성요소로 mongos 프로세스가존재 * 즉, client와 shard를연결할수있으며 mongos는영속성상태가아니기때문에데이터파일이없다. c2014 rockplace 68
Sharding Structure - http://docs.mongodb.org/manual/ c2014 rockplace 69
Sharding Structure - http://docs.mongodb.org/manual/ c2014 rockplace 70
rockplace Replica set c2014 rockplace 71
Replica set 기본적으로 Master/Slave 구성을하나의 set라한다. Primary와 secondary로구성되며, secondary 노드는오로지 read 기능밖에없다. Client에설치된드라이버를통해사용자는 replica set의어떠한노드라도접근이가능 - 장애발생시다른노드가 primary가되고, 변경된노드로접근을할수있어야되기때문 장애현상이일어났을경우, 일반적으로 10초이내에다른노드가 primary 서버로선택된다. c2014 rockplace 72
Replica set 이는사용자가개입하여원하는노드로선택되도록할수있으며, 또는 arbiter 에의해자동으로처리가능 우선순위를설정해둔경우에는가장높은값을부여받은서버가 primary 서버로된다. ( 단, 우선순위값은 0~1000) 이와같이, 장애조치와복구는 replica set의중요한개념 Replica set을구축할때 replica set의이름은관리하기쉽고, 단순하게정하는것이좋다. ( 내부적으로사용될일이거의없다.) c2014 rockplace 73
Replica set(slaveok) 일반적으로 primary에서기존의데이터및새로운데이터에대한정보를읽을수있지만, secondary 에서도데이터를읽을수있다. - primary의작업량을줄이기위해 (analytics server) - Read Scalability 증가 - Automatic failover를사용하여높은가용성을제공 Secondary 멤버에서 read operation을실행할수있도록허용 c2014 rockplace 74
Replica set(configuration) c2014 rockplace 75
Replica set(configuration) 가장일반적으로사용되는것이 arbiter - primary 노드가다운됐을경우 arbiter가자동으로적절한서버를선택하여 primary 서버로바꾼다. - 그후, 복구된이전의 primary는 secondary 서버 - 데이터가저장되지않으며오직장애발생시새로운 primary 서버를선출하기위해투표시에만사용 - arbiteronly:true 을추가하여사용 c2014 rockplace 76
Replica set(configuration) priority : <value> - 사용자가임의로지정해놓은대로새로운 primary 서버가될노드를표시하기위해사용된다. - 즉, 우선순위를이용하여장애발생시예정된서버가새로운 primary 서버로선출되도록하기위한방식 - 값이클수록높은우선순위를가짐 - 단, 값이 0 일경우절대해당노드는절대 primary 서버가될수없는 Only Secondary 서버를의미한다. c2014 rockplace 77
Replica set(configuration) Hidden Member - 기본적인복제이외의트래픽을수신하지않기때문에주로데이터의 backup 이나 reporting 을위한노드로사용된다. - client 로부터 replicate set 의멤버를숨길수있다. * MongoDB 드라이버나 client 는 replica set 의멤버상태를판별하기위해 db.ismaster() 메소드를사용하는데 hidden 멤버는 ismaster() 메소드에서출력이되지않는다. - hidden:true 를추가하여사용 c2014 rockplace 78
Replica set(configuration) Hidden Member - 사용시, 반드시 priority = 0 과함께사용해야된다. - 따라서, primary 노드에서장애가일어나도 hidden이포함된노드는절대로 primary가될수없다. - Delayed 멤버는반드시 hidden 옵션이필요하다. - http://docs.mongodb.org/manual/ c2014 rockplace 79
Replica set(configuration) slavedelay(delayed) Member - primary 서버의 oplog 정보를 secondary 서버에바로적용하지않고정의된시간동안 delay 시킨후적용시켜주는멤버 - slavedelay:3600 - 수치 1당 1초 - 따라서, delay 시간동안저장된데이터는읽을수없다. - hidden:true 옵션과같이사용 c2014 rockplace 80
Http Admin UI Mongod process의상태정보를확인할수있다. Http 기반으로사용되며, 기본포트 number에 1000을더하여 web으로접근할수있다. - 기본 port가 27017이면, web admin page를위한연결 port는 28017이된다. - 따라서, localhost:28017 로접근 Mongo shell에서실행되는 rs.status 와많은부분이비슷 c2014 rockplace 81
Http Admin UI Mongod process 의상태정보를제공해준다. c2014 rockplace 82
MongoDB 환경구성도 ( 예시 ) http://www.cumulogic.com/mongodb-as-a-service-on-cumulogic/ c2014 rockplace 83
MongoDB on cloud 기본적으로다양한클라우드플랫폼을지원 - Amazon Web Services EC2 - dotcloud - Joyent Cloud - Rackspace Cloud - Red Hat OpenShift - VMware Cloud Foundry - Windows Azure - Google Compute Engine c2014 rockplace 84