- 맛있는 MongoDB 를 바탕으로 정리하였습니다.
몽고DB란?
- 크로스 플랫폼 Document 지향 DBMS
- 빠른 속도와 확장성
- NoSQL (비관계) DBMS
- 기존 R(관계)DBMS의 규칙을 포기하는 대신, 뛰어난 확장성이나 성능을 발전시키는 방향
- 대표적인 NoSQL DBMS
종류 |
관련 언어 |
Key-Value Store |
Redis, Dynamo |
Column 지향 언어 |
HBase, Cassandra |
Document 지향 언어 |
MongoDB |
Graph Database |
Neo4J |
- 친숙함
- JSON과 유사항 형태로 저장하는 방식
- Javascript를 활용할 수 있음
- Document 지향 스토어 (Schemaless)
- 다양한 인덱스를 지원
- 쉽고 빠른 분산 컴퓨팅 환경 구성 (신뢰성-Reliability / 확장성-Scalability)
- Replication(HA) , Sharding(분산 저장) 제공하여 쉽게 구성이 가능
신뢰성(Reliability) |
|
확장성(Scalability) |
|
유연성(Flexibility) |
|
Index 지원 |
|
MongoDB 구조
- MongoDB에 여러 개의 Database 가 존재
- create 문이 존재 하지 않으며, 원하는 DB명을 생성이 아닌 선택 후 document를 insert하면 생성 됨
- 하나의 Database 내에 여러 개의 Collection 이 존재
- DB와 동일하게 별도의 create 문이 존재 하지 않으며, document를 생성하면 자동으로 collection이 생성
- 하나의 Collection에는 여러 Document가 존재
- 실질적인 데이터
- BSON
- Binary JSON 구조
- 필드 뒤에 값이 오는 형태
- 필드와 필드는 쉼표로 구분
- Document 하나는 중괄호로 감싸져 존재
- 필드에는 문자열만 들어가며, 값에는 배열, 숫자, 3차원 위치 좌표, 또 다른 필드와 값을 가진 오프젝트도 값으로 가질 수 있음 (유연성-Flexibility)
- 그 외 다른 정보를 모두 표현할 수 있도록 다양한 값의 형식을 지원
- 그 중 중요한 ObjectID 만 정리
- ObjectID
- Document 생성 시 PK로 "_id" 필드가 자동으로 생성
- _id 는 서로 겹치지 않는 ObjectID 타입으로 값을 할당
- 동시에 생성되어도 서로 다른 값이 생성되어 유일 값
- ObjectID 값은 "유닉스시간+기기id+프로세스id+카운터" 로 구성
- 앞에 4byte는 유닉스 시간
- 다음 3byte는 기기의 id 값
- 다음 2byte는 프로세스 id 값
- 마지막 3byte는 랜덤 값부터 시작하는 카운터로 구성
- ObjectId.getTimestamp() 하면 생성된 시점을 알아낼 수 있음. (ObjectID를 이용하면 시간 range 로 검색이 가능)
> ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()
ISODate("2012-10-15T21:26:17Z")
use database1 // database 선택
db.collection1.insert({ // collection.명령어 document
"name" : "Rouis.Kim" // field : value
, "age" : 37 // field : integer value
, "role" : "DBA" // field : string value
, "exp" : [{"Dev" : 5, "DBA" : 6}, {"Game": 3, "Ecommercail":2, "Enginner":3,"etc":3}] // field : Object value
, "loc" : [37.504997827623406, 127.02381255144938] // field : geomentry
, "etc" : ["2 daughters","프로이직러"] // field : array value
})
// document가 생성되지만, collection 이 존재하지 않으면 collection, database가 존재 하지않으면 database 까지 생성 됨
// schemaless (스키마 유연성)
언제 어떻게 써야 할까?
- Schema가 자주 바뀌는 환경
- Document 지향 스토어 방식
- 스키마의 변경이 자유로운 편
- 추가될 기능이 확실하지 않고 상황에 다라 App에 저장될 자료가 지속적으로 달라지는 환경(개발 방법론으로 개발 하는 곳)
- 애자일 개발 방법론 / 나선형 모델에 최적 (미주 추가)
- 분산 컴퓨팅 환경
- 샤딩과 복제를 지원하기 때문에 여러 대의 컴퓨터에 구성이 용이하기 때문에 빠른 분산 컴퓨팅 환경이 구축 필요한 경우
RDBMS |
NoSQL |
Schema
|
Schemaless
|
ACID / BASE 관련 좋은 글
https://embian.wordpress.com/2013/06/27/nosql-2/
https://velog.io/@qoik11/MongoDB-3rk4z5de3r
버전 관리
- MongoDB는 두 번째 자리 숫자가 짝수인 버전이 안정화 버전이며, 홀수인 버전이 개발 중인 버전
- 서비스를 하는 것이라면 두 번째 자리가 짝수인 버전을 사용하는 것 추천
- Postgresql 도 비슷한 것으로...
애자일 개발 방법론
- 신속한 반복 작업을 통해 실제 작동 가능한 소프트웨어를 개발하여 지속적으로 제공하기 위한 소프트웨어 개발 방식
- 지속적으로 요구 사항을 반영하며, 의사소통이 많으며 지속적인 테스트 가 특징
- 명세화 부족하며 잦은 변경으로 테스트 증가. 개발자 위주라 사업 관리 부분 미흡(유지보수 비용 증가)
나선형 모델
- 시스템 개발 시 위험을 최소화 하기 위해 점진적으로 완벽한 시스템으로 개발해 나가는 나선형 모델로 ,계속 목표설정-위험분석-개발검증-고객평가를 계속하며 점진적으로 개발
- 리스크를 최소화 하기 위하여 "위험 분석 단계"를 추가하여 위험 부담이 큰 대형 시스템 구축에 적합.
- 프로젝트 기간이 길며, 관리가 어려움. 위험 관리에서는 해당 전문가가 필요
반응형
'MongoDB > MongoDB-Study_완료' 카테고리의 다른 글
[MongoDB][Study-4] MongoDB 기본 명령어 익히기 (0) | 2021.03.27 |
---|---|
[MongoDB][Study-3] Sharding (0) | 2021.03.27 |
[MongoDB] [Study-2-2] P-S-A 구성 (0) | 2021.03.27 |
[MongoDB] [Study-2-1] Wired Tiger (WT엔진) (0) | 2021.03.27 |
[MongoDB-Study] Intro (0) | 2021.03.27 |