1. 문서(Document) : 하나의 레코드
: 몽고 DB의 핵심은 정렬된 키와 연결된 값의 집합으로 이루어진 문서
; 문서는 RDBMS에서는 테이블의 하나의 행(JSON)이라고 생각하면 됨
Ex1) { "userid" : "idkhs04"}
Ex2) { "userid" : "idkhs04",
"username" : "김아무개",
"country" :"South Korea"
"tags" : ["mongo", "db"]
}
위의 예를 보면 그냥 일반적인 JSON 데이터 일 뿐입니다.
하지만 아래의 경우는 몇가지 규칙이 있으니 천천히 살펴 보셔야 겠습니다.
가. 문서의 키-쌍은 정렬 되어 있으므로 아래의 문서는 다른 문서임
- {"userid" : "idkhs04", "username" : "김아무개"} != { "username" : "김아무개", "userid" : "idkhs04"}
나. 문서의 키는 문자열의 형
- 키는 \0(null 문자)을 포함하지 않습니다. 이 문자는 키의 끝을 나타내는데 쓰이기 때문.
- ‘.’ 과 ‘$’ 문자는 몇 가지 특별한 속성을 가지고 있으며 특정 상황에서만 사용해야 함.
이 문자들은 보통 예약어로 취급해야 하며, 부적절하게 사용하는 경우 드라이버에서 경고가 발생 됨.
- 엄격하게 지켜지는 것은 아니지만 ‘_’로 시작하는 키는 예약어로 생각하는 편이 좋음
다. 대소문자 구분
라. 쉘 내의 모든 숫자는 64bit 부동소수점형
마. 모든 문자는 utf-8
바. boolean 형 : true, false
사. null 지원 ex) {"x" : null}
아. 날짜형 지원 ex) {"write_date" : new Data()} // 표준시간대는 저장 하지 않음
자. 정규표현식 지원 : 문서내 자바스크립트 문법의 정규표현식 포함 가능
ex) {"x" : /footbar/i}
차. 문서는 자바스크립트 코드 포함 가능
ex) {"x" : function(){/**/}}
위의 예를 본다면
하나의 문서(Document)를 구조적으로 나타낸것입니다.
하나의 JSON 데이터로 나타내면 위와 같으며,
주의깊게 볼점은 커맨트수가 많아진다고 어떠한 행(레코드)가 늘어나는것이 아니라
JSON의 배열형태로 저장되는것을 볼 수 있습니다. "comment" : [{.....}, {.....}]
그렇기 때문에 COMMENT 의 INSERT가 나오는게 아니라 COMMENT의 업데이트로
데이터가 저장되게 됩니다. 물론 구조적으로는 삽입이 맞지만 DB관점에서 그렇다(update)는 것이죠
여기서 흥미로운점은 RDMBS에서 하나의 컬럼을 추가 및 수정하기 위해서 어떠한 막대한 지출을 감수했지만
몽고DB는 전혀 고민 안해도 된다는 것..
DB중심적이 아니라 애플리케이션 중심의 non-scheme db이므로 어찌보면 두말하면 잔소리인거죠
그렇지만 생각없이 난잡하게 하는건 자제 해야겠죠.
2. 컬렉션(Collection) : 하나의 (문서)테이블
: 문서(Document)(의 모음으로서 RDBMS에서는 하나의 테이블로 생각하면 됨
; 단계적으로 봤을때 테이블이지만 RDBMS에서의 정규화된 테이블로 생각하면 안됨
--> 스키마가 없음(scheme-free)
+ JSON으로 이루어진 문서(행)의 모음이라고 생각하는게 좀 더 정확함
+ 내부적으로는 BSON을 사용(BSON : Binary JSON)
--> system으로 시작하는 이름은 사용불가(예약어)
ex) db.컬렉션이름.명령어
가. 생성 : db.createCollection("myTestCollection")
-> db.myTestCollections.insert({ number : 1}) : 동시에 생성 및 문서값 저장
나. 보기 : show collections ; 현재 db에 존재하는 모든 콜렉션들을 보여줍니다.
-> mysql의 show tables 와 유사
다. 삭제 : db.myTestCollection.drop()
- 스키마 삭제, 데이터 삭제
라. 데이터만 삭제 : db.myTestCollection.delete();
- 이부분 또한 일반적인 T-SQL 문법과 유사합니다.
여러 NoSQL이 있지만 특히나 MongoDB는 데이터를 Binary 형태로 변환되어 저장됩니다.
그래서 BSON 데이터라고 부릅니다.
3. 데이터베이스(DataBase)
: 몽고디비는 문서를 컬렉션으로 모아두고, 여러 컬렉션들을 데이터베이스에 모아둠
- 하나의 데이터베이스는 따로 분리된 파일로 디스크에 저장됨
- 데이터베이스 이름은 모두 소문자로 지정
- 이름은 최대 64바이트
- use myDB ; T-SQL문법이 같습니다.
-> myDB를 사용하겠다
몽고 DB는 지금까지 배우고 사용해왔던 SQL과는 개념이 많이 다르면서도
참신하거 같다는 생각이 듭니다. 복잡한 데이터 화면 설계를 어떻게 해야하나 란 걱정을 단번에 떨쳐버린 느낌입니다.
이래서 복잡한 조인 연산이나, DB 정규화 등등에 대해서 자유로울수가 있구나 란 생각이 들었습니다.
문법적인 측에서도 기존의 개발자들이 JavaScript 및 JSON 에 대해서 무리 없이 사용하고 있으므로
도입에 대한 부분에 대해서는 아주 낙관적인 생각이 드네요
'IT > Database' 카테고리의 다른 글
관계형 데이터 모델 (0) | 2018.05.18 |
---|---|
[Oracle] MSSQL을 Oracle로 컨버전 작업 시 참조 (0) | 2018.04.30 |
[MSSQL] MS-SQL 달력만들기 SQL 문 (0) | 2018.04.27 |
[NoSQL] MongoDB 아키텍쳐 (0) | 2018.04.26 |
[NoSQL] Mongo DB 설치 법입니다 (0) | 2018.04.26 |
[DB] 데이터모델링이란 (0) | 2018.04.21 |
[DB] 개발방법론과 정보공학 (0) | 2018.04.20 |
[DB] 소프트웨어 개발 프로세스 (0) | 2018.04.19 |