MongoDB - basic

김혁·2024년 5월 28일

mongoDB

목록 보기
1/1

MongoDB

NoSQL

“Non Relational Operation Database SQL” 의 줄임말로써 “관계형 데이터베이스가 아닌 SQL”  입니다.  

일반적인 관계형 데이터베이스에서는 데이터의 중복을 제거하고 무결성을 보장하기 위해서 정규화를 하게 되는데 이러한 정규화가 과도한 JOIN으로 인해 성능 저하가 있을 수 있습니다. 

하지만 NoSQL은 아래의 그림 처럼 중첩데이터 형태를 띔으로써 불필요한 JOIN 을 최소화시킵니다.

NoSQL의 장점

1) 불필요한 Join의 최소화
2) 유연성있는 서버 구조 제공
3) 비정형 데이터 구조로 설계비용 감소
4) Read/Write가 빠르며 빅데이터 처리가 가능
5) 저렴한 비용으로 분산처리 및 병렬처리 가능

4번 장점의 경우는 반드시는 아닙니다. 일반적인 관계형 데이터베이스가 빠른 경우도 많습니다.
그리고 비정형 데이터로 인해  관계형 데이터베이스보다 1.5배정도 용량을 많이 차지 합니다.

NoSQL 종류

1) KEY-VALUE - Redis , Memcached
2) COLUMN - Hbase, Casandra
3) DOCUMENT - MongoDB, 
4) GRAPH - GraphDB

MongoDB

Json 타입의 Document 방식의 NoSQL 입니다. 특징은 다음과 같습니다.

JSON 형식의 데이터구조
CRUD위주의 다중 트랜잭션 처리 가능
Sharding(분산) / Replica(복제) 기능 제공
Memory Mapping기술을 기반으로 빅데이터 처리에 성능이 탁월

관계형데이터베이스가 가지는  여러 특징을 구현 할수 있는 것이 장점이지만, 그런방식을 구현할 시에는 성능적인 면도 고려해야합니다.

접속하기

mongosh를 사용해서 접속하자

mongosh "mongodb://$host:$port"

만약 local 이라면 host 주소, port를 입력하면 된다.

그 외의 connection 옵션들
--username: 접속하는 user name을 입력
--authenticationDatabase: 해당 user 가 권한을 가지고 있는 데이터베이스로 접속
—password: user 의 password 를 parameter로 입력

접속한 뒤 db.getMongo() 명령어로 접속이 제대로 되었는지 확인한다.

연결을 끊는 방법은 아래 방법들이 있다.

  • exit
  • quit
  • press ctrl + c

Mongosh로 DB 생성하기

use $databasename

use 명령어로 이미 존재하는 database에 접속할 수도, 새로운 이름의 database를 생성할 수 도 있다.

Mongosh로 Collection 생성하기

MongoDB에서 같은 종류의 데이터(document)의 묶음을 collection 이라고 한다. 보통
scheme 가 같은 document를 지칭하기 위해서 사용한다. RDBMS에서 테이블과 유사하다
고 생각하면 된다.
Collection을 생성하는 방법은 원하는 collection 이름에 데이터를 하나 입력하면 자동으로
생성된다.

Mongosh로 query하기

db.myCollection.insertOne( { x: 1 } );

mongosh는 javascript로 만들어졌기 때문에 사실상 MongoDB의 javascript client driver
에 있는 함수로 query를 한다.
대표적인 CRUD는 MongoDB의 드라이버의 함수로 수행할 수 있다. query 함수에 대한 자
세한 내용은 MongoDB 강의에서 다룬다.

데이터 생성하기

db.movies.insertOne(
{
title: "The Favourite",
genres: [ "Drama", "History" ],
runtime: 121,
rated: "R",
year: 2018,
directors: [ "Yorgos Lanthimos" ],
cast: [ "Olivia Colman", "Emma Stone", "Rachel Weisz" ],
type: "movie"
}
)

insertMany로 여러개 추가도 물론 가능하다.

데이터 가져오기

db.movies.find()

데이터 업데이트 하기

db.movies.updateOne( { title: "Tag" },
{
$set: {
plot: "One month every year, five highly competitive friends" +
"hit the ground running for a no-holds-barred game of tag"
},
$currentDate: { lastUpdated: true }
})

$set: { plot: "..." }

'set연산자를사용하plot필드의값을새로운내용으로업데이트합니다.영화의줄거리를"Onemontheveryyear,fivehighlycompetitivefriendshitthegroundrunningforanoholdsbarredgameoftag"로변경합니다.set' 연산자를 사용하여 'plot' 필드의 값을 새로운 내용으로 업데이트합니다. 영화의 줄거리를 "One month every year, five highly competitive friends hit the ground running for a no-holds-barred game of tag"로 변경합니다.currentDate: { lastUpdated: true }

'$currentDate' 연산자를 사용하여 'lastUpdated' 필드를 현재 날짜로 설정합니다.
이를 통해 해당 문서가 마지막으로 업데이트된 시간을 기록할 수 있습니다.
종합적으로 이 코드는 'movies' 컬렉션에서 'title'이 "Tag"인 문서를 찾아 'plot' 필드를 업데이트하고 'lastUpdated' 필드를 현재 날짜로 설정하는 것입니다.

데이터 삭제하기

db.movies.deleteMany({})

Studio3T를 이용하면 유료지만 워크벤치와 같은 툴로 쉽게 몽고디비에 접근이 가능하다

profile
군도리

0개의 댓글