Mongo DB
1. Mongo DB...?
- 몽고하면… 한 때, 아시아를 호령했던 징키스칸의… 몽고… ㅈ..ㅅ.. 아무튼 몽골과 전혀 상관없이 'Mongo DB'는 NoSQL DB 중에서 매우 중요한 위치에 있는 DB이다. 크로스 플랫폼이 지원되어 여러 플랫폼 다양화 시대에 딱 좋은, 즉 유연성을 갖춘 DB라고 이해하고 있다.
NoSQL SQL이 NO라고 오해할 수도 있지만 Not Only의 약자로 'SQL(RDB 언어) 말고 우리도 있다.'로 이해하면 좋을 것 같다.
2. RDBMS vs Mongo DB
- 개념적으로 큰 차이가 있는 것은 아니고, 디테일한 개념 차이로 인해 워딩이 다른 정도이다.
구분 | RDBMS | Mongo DB |
---|---|---|
테이블(table) | 컬렉션(collection) | |
튜플/로우 | 도큐먼트(document) | |
컬럼 | 필드 | |
컬럼 | embedded Documents | |
기본키 (Primary key) | 기본키 (Primary key) - Mongo DB는 자체적으로, _id라는 디폴트 키를 제공한다. |
Primary Key (기본키) a.k.a PK
이름만 보면 와일드카드(*)처럼 다 따고 들어갈 수 있는 마스터키 같은데… 알고 보면 전혀 그렇지 않다. 테이블(or 콜렉션)에서 로우(레코드) 고유 식별 번호라고 이해하면 된다. PK는 개체 무결성의 원칙을 적용하여 사용한다. 따라서 각 row는 고유의 인덱스를 갖게 되고, 이는 데이터에 빠른 접근을 가능케 도와준다.
Mongo DB의 Document data structure
- JSON와 매우 흡사한 데이터 구조를 지닌 몽고디비의 도큐먼트
- 몽고디비 만든 회사는 Binary + JSON 해서 BSON이라고 하는데…뭐 ㅇㅇ 기본 구조는 아래와 같다.
- 아래 도큐먼트 DS가 조금 복잡한 구조를 살펴보자. 객체, 배열 등 복합적인 데이터 타입들을 document에 저장할 수 있다. 이런 부분이 RDB에 비해 굉장히 편한 부분이다.
var mydoc = {
// _id는 pk이다.
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "Alan", last: "Turing" },
birth: new Date('Jun 23, 1912'),
death: new Date('Jun 07, 1954'),
contribs: [ "Turing machine", "Turing test", "Turingery" ],
views : NumberLong(1250000)
}
3. Mongo DB's Query
Mongo DB Query문을 공부하기에 앞서 Database들은 documents collections의 집합이라는 개념을 잊지 말자.
// 1. 데이터베이스가 생성될 물리적 경로생성
c:\>mkdir c:\MONGODB\test
// 2. mongoDB 버전 확인
>mongod --version
// 3. mongoDB 인스턴스 활성화
>mongod --dbpath c:\mongodb\test
-- mogodb shell프로그램 실행
>mongo
// 4.test 데이터베이스로 이동할때
>use test
// 5. 데이터베이스 목록 출력
>show dbs
// 6. 데이터베이스 상태확인
>db.stats()
// 7. 데이터베이스 shutdown
admin 영억으로 이동후에 셧다운 해야함.
>use admin
>db.shutdownServer()
// 8. 데이터베이스 로그아웃
>db.logout()
// 9.collection 생성
capped:true이면 해당 익스텐트를 모두 사용하게되면
처음부터 재 사용할 수 있는 데이터 구조를 생성할 때
size 해당 Collection의 최초 생성크기
>db.createCollection("emp",{capped:false, size:8192});
// 10. colection list보기
show collections
// 11. collection의 현재상태 및 정보분석
>db.emp.validate();
// 12.collection의 이름변경
>db.emp.renameCollection("employee")
// 13.Collection의 삭제
>db.employee.drop();
// 14.collection에 데이터 INSERT
>db.emp.insert({eno:1101,fname:"JIMMY"});
// 15.collection에 데이터 UPDATE
>db.emp.update({eno:1101},{$set:{fname:"JOO"}});
// 16.collection에 데이터 SELECT
>db.emp.find().sort({eno:-1});
// 17.도큐먼트(row)부터 정의하고 collection 생성
>m={ename : "smith"}
>n={ename : 1101}
>db.things.save(m)
>db.things.save(n)
>db.things.find()
>db.things.insert({ empno : 1102, ename:"king"})
// 18.for문을 이용한 증감된 값을 Collection에 insert
>for(var n=1103; n<=1120; n++) db.things.save({n:n, m:"test"+n})
// 19.db.things.find()로 조회시 리스트가 20 row가 넘는 경우 다음 페이지를 보고싶을때
>it
'개발 공부' 카테고리의 다른 글
[취직/이직/퇴사] 1년이 채 안되는 시간동안 취직/이직/퇴사를 모두 겪다. (0) | 2018.07.08 |
---|---|
[SQL] query syntax (0) | 2018.07.04 |
[Firebase] Clouding message와 Node.js 연동 (0) | 2018.07.04 |
[REST API] RESTFUL API와 URL (0) | 2018.07.04 |
[데이터베이스] 데이터베이스와 네트워크 (0) | 2018.07.04 |