mongoDB_01

MogoDB(NoSQL) 기초01

공부한 강의

근데 강의가 오래 전 것 같고, 아예 nosql을 처음 접하는 나로는 조금 어려운 부분이 있어서(group, map-reduce 등) 이번 것만 듣고 다른 강의 찾아 들어볼 생각


NoSQL

관계형 DB로 처리하기에는 약간 부족한 부분들을 매꿔줄 수 있는 DB.

  • KEY VALUE 형
  • 문서형 (MongoDB)
  • 컬럼 제한형
  • 그래프 기반형

몽고 DB 데이터 구성

  • 데이터 베이스 : 컬렉션들의 집합
  • 컬렉션 : 테이블과 유사
  • BSON : 스키마에 맞춰 저장하는 유형

BSON

: JSON의 바이너리 형태라는 뜻

몽고 DB 특징

  • 조인을 지원하지 않는다(대부분의 NOSQL이 그러함)
  • 스키마가 존재하지 않는다
  • create DB 구문이 존재하지 않는다(하지만 drop절은 있다)

몽고 DB 첫걸음

몽고디비가 제공하는 자바스크립트 쉘 인터페이스로 몽고디비에 접속을 하게 되면

use 데이터베이스명

구문을 사용하면 데이터베이스가 자동으로 생성된다.
but 파일이 자동으로 생성은 안된다. (컬렉션을 생성해야함)

db.stats();

해당 DB 설정 상황 확인

db.createCollection(“컬렉션명”);

컬렉션 생성 명령어

db.help

어떠한 명령어가 있는지 확인하는 명령

db.getCollectionNames();

실제로 컬렉션이 만들어져있는지를 확인하는 메서드

몽고 DB의 파일들

  • mongod.lock : 실제 서버를 실행시키는 프로세스 id 저장
  • .ns : 몽고디비는 컬렉션, 인덱스를 생성하게 되면 각각에 네임스페이스 필드를 만들게 되어 있음. 해당 값들을 저장하는 파일
  • 0 또는 1 : 실제 데이터를 저장하는 파일들 (파일의 크기 0은 64메가, 1은 128메가가 초기 할당된 상태로, 이후 메모리 증가가 필요한 경우 숫자 크기가 늘어난다, 메모리는 2기가가 될 때까지 2배씩 늘어난다.)

몽고 DB의 컬렉션 종류

일반적인 용도의 컬렉션

캡드 컬렉션

  • 고정된 크기 이상 증가하지 않음
  • 만약 크기 이상 데이터가 들어갈 경우 가장 오래된 도큐먼트를 덮음
  • 개별 도큐먼트 삭제가 불가능함
  • 기본적으로 몽고 디비에서 자신의 데이터를 관리하기 위한 시스템 컬렉션들이 두 개 생성되어 있음 (system.index, system.namespaces)
  • 복제를 위한 컬렉션

insert

db.컬렉션명.insert({“컬럼1”:”value1”, “컬럼2”:”value2”})

db.컬렉션명.find({“컬럼1”:”value1”}) – find할 조건, select와 비슷

{“_id” : ObjectId(“명시적으로 쓰지 않았다면 몽고 디비가 임의로 붙였을 id 값, 이 id는 내부적으로 관리를 위해 생성”), “컬럼1” : “value1”, “컬럼2” : “value2”} – find 결과

update

db.컬렉션명.update({“기존 컬럼명”:”기존 value”}, {“치환할 컬럼명”:”치환할 value”}})

db.컬렉션명.update({“기존 컬럼명”:”기존 value”}, {$set{“덮어씌울 컬럼명”:”덮어씌울 value”}})

첫번째 매개변수는 update 대상이 될 것을 찾는 조건이되며 두번째 매개변수는 치환할 데이터 매개변수.
관계형 DB와 다르게 몽고 디비는 만들어진 도큐멘트를 치환하는 방식으로 update가 이루어진다.
치환의 경우 오버헤드가 발생할 수도 있기 때문에 $set이라는 명령어를 사용하여 문서를 치환하지 않고 원하는 부분만 바꿀 수 있다.

remove

db.컬렉션명.remove({“삭제할 컬럼명”:”삭제할 value”})

select

find

  • 검색 조건이 참일 때 커서가 반환

db.컬렉션명.find();

{“_id” : ObjectId(“-“), “칼럼1” : value1}

{“_id” : ObjectId(“-“), “칼럼2” : value2}

{“_id” : ObjectId(“-“), “칼럼3” : value3}

findOne (= find.limit(1);)

  • 검색 조건에 해당하는 문서가 여러 개라도 하나만 반환

{“_id” : ObjectId(“-“), “칼럼1” : value1}

정규표현식(대표적인 지시자)

범위 지시자

  • $gt
  • $gte
  • $lt
  • $lte

    집합 지시자

  • $in
  • $all
  • $nin

    부울 지시자

  • $ne
  • $not
  • $or
  • $exists

    기타

  • $mod
  • $type
  • $where

group

개발자가 원하는 함수를 만들어 쓸 수 있으나 결과가 16메가가 넘으면 처리가 되지 않음

map-reduce

개발자가 원하는 함수를 만들어 쓸 수 있음

  • map : 그룹화, 리듀스 계산을 위한 데이터 전달
  • reduce : 실제 연산

인덱스

  • system.namespaces : 색인의 이름 정보 데이터 저장되어있음
  • system.indexs : 색인의 상세 정보 데이터 저장되어있음
  • ensureIndex : 색인 생성
  • dropIndex : 색인 삭제

db.컬렉션명.ensureIndex({“칼럼”:1}) // 1은 임의로 준 값
db.system.indexs.find() // 상세 정보 데이터들이 출력됨