1. SQL vs NoSQL
- SQL은 일정한 형식을 가지고 데이터 베이스에 데이터를 저장하지만, NoSQL은 그 형식을 없애어서 더 자유롭게 자료를 저장할 수 있다는 것에 가장 큰 차이점을 가진다.
- 그렇다고 한쪽이 무조건 좋다 라고 할 수 없다. 상황에 따라 맞는 방법을 사용하게 된다.
2. 둘의 차이점
- 수평적 확장성 vs 수직적 확장성 :
- 수평적 확장성 => NoSQL: 서버의 갯수를 늘리면 무한대로 저장공간이 늘어날 수 있고, 응답의 속도도 크게 떨어지지 않는다. 그래서 큰 프로젝트를 할 때 더욱 어울린다. 물론 그만큼 사용되는 비용도 많이 늘어난다.
- 수직적 확장성 => SQL: 하나의 노드에서 모든 것을 처리하게 된다. 그래서 계속 한 곳에 쌓인다고 표현하는 것 같다. 고성능의 장비 하나로 모든 것들을 처리하게 되기 때문에 비용은 적다. 하지만 처리속도에 그래도 무리가 간다.
- 쿼리 언어의 유무
- 기본적인 언어는 비슷하게 사용된다. 하지만 NoSQL같은 경우, Relation Data 즉, 다양한 행과 열로 이루어진 테이블들이 계속해서 JOIN 되어 조밀하게 연결되어 있는 경우, 정확한 틀이 없어서 유지보수를 하기 복잡해진다.
- 스키마의 유연성
- 앞에서도 말 했듯이, 정확한 형태의 스키마를 이용해 데이터를 저장하게 되는 SQL과 더 자유롭게 스키마를 형성할 수 있는 NoSQL의 스키마의 유연성이 가장 큰 차이를 보인다.
- 간단하게 말하면 NoSQL은 아무 JSON 문서도 다 데이터 베이스에 넣어버릴 수 있다. 모든 오브젝트 형식을 다 넣을 수 있기 때문이다. 이것이 자유다!
3. JSON vs BSON
- JSON형식은 우리가 알고 있는 그 형식이다. {}로 묶은 각각의 필드들이 문자열처럼 따옴표로 이루어져 있고, 그에 대한 값을 : 뒤에 적어주며, 쉼표로 각각의 필드들을 구분해 준다.
{
"id": 1,
"name": "Tom"
"age": 22
}
- BSON은 JSON 처럼 텍스트 형태가 아니라 여러 가지 다양한 데이터 타입도 다 사용이 가능한 형식이다. JSON보다 읽는 속도가 빠르다. 하지만 JSON처럼 인간이 읽어서 내용을 파악하는 것은 무리가 있다.
{"hello": "world"} →
\x16\x00\x00\x00 // total document size
\x02 // 0x02 = type String
hello\x00 // field name
\x06\x00\x00\x00world\x00 // field value
\x00 // 0x00 = type EOO ('end of object')
- MongoDB에서는 둘 다 데이터 베이스에 넣을 수 있다. 하지만 MongoDB 내부에서는 BSON 형식으로 사용 중이다.
4. MongoDB
- MongoDB는 NoSQL의 모델 중 하나이며, DOCUMET를 이용한 방식으로 데이터 베이스에 접근한다.
- mySQL처럼 비슷한 명령어들이 있으며, 몇 가지는 다르다.
5. MongoDB에서 주로 사용하는 명령어
- mongo : 인스턴스 활성화, 간단하게 시작할 때 사용한다고 생각하면 된다.
- use 데이터 베이스 이름 : 사용할 데이터 베이스를 결정한다.
- show dbs : 데이터 베이스의 목록을 본다.
- db.stats() : 데이터 베이스의 상태를 본다.
- db.shutdownServer() : 데이터 베이스를 끈다.
- db.logout() : 데이터 베이스에서 로그아웃 한다.
- db.createCollection(컬렉션 이름) : 컬렉션을 생성한다.
- db. 컬렉션 이름.insert({json형식의 데이터}): 컬렉션에 데이터를 넣는다. => 만약 컬렉션을 만들지 않았어도 상관없다. 없으면 만들어 넣는다!
- db. 컬렉션 이름.find(): 컬렉션을 확인한다.
- db. 컬렉션 이름.remove({json형식에 맞게 적은 삭제할 document의 내용})
- db.컬렉션 이름. drop():컬렉션을 지워버린다.
'Coding > Today I Learned' 카테고리의 다른 글
2021.09.09(Thu.) <취미로라도 알아두면 좋은 컴퓨터의 기초 이론> (0) | 2021.09.09 |
---|---|
2021.09.07(Mon.) <HTTPS와 친해지기> (0) | 2021.09.07 |
2021.09.01(Wen.) <MVC Design> (0) | 2021.09.01 |
2021.08.31(Tue.) <데이터 베이스를 이용한 데이터 저장과 팁> (0) | 2021.09.01 |
2021.08.30(Mon.) <Database JOIN을 알아보자> (0) | 2021.08.30 |