NoSQL
이전에 사용하던 데이터베이스들은 대부분 관계형 모델을 기반으로 SQL이라는 질의문을 통해 데이터베이스의 CRUD를 하였습니다. 그러나 최근에 앞서 언급한 관계형 데이터베이스 모델과는 다른 데이터베이스 관리 시스템이 생겨나고 있는데 이들은 일컬어 NoSQL(Not Only SQL)이라고 부릅니다.
빅데이터 시대가 열리면서 이러한 많은 양의 데이터를 다룰 때 RDBMS(관계형 데이터베이스)로만 트래픽을 감당하기 어려워졌고 해결책으로 NoSQL이 만들어졌습니다. NoSQL의 가장 큰 특징은 확장성, 기용성, 성능, 다양한 형태의 데이터를 수용한다는 점입니다.
NoSQL의 확장성을 위해 NoSQL 데이터베이스는 단순한 키와 값의 한쌍으로 이루어져 있습니다. 인덱스와 데이터는 분리되어있고 고정된 스키마도 없습니다. 이덕분에 다양한 형태의 데이터를 처리할 수도 있습니다. NoSQL은 분산형 구조이기 때문에 분산 시스템의 특징을 반영합니다.
mongoDB
momgoDB는 문서지향(Document-Oriented) 저장소를 제공하는 NoSQL 데이터베이스 시스템입니다.
스키마의 제약이 없어 자유로우며 BSON(Binary JSON) 형태로 문서(데이터)를 저장합니다. JOIN이 필요 없이 한 문서에 좀 더 이해하기 쉬운 형태 그대로 정보를 저장할 수 있습니다.
mongoDB는 객체지향 프로그래밍과 잘 맞고 JSON을 사용할 때 아주 유용합니다. Node.js에서 가장 많이 사용하고 있는 데이터베이스라고 합니다.
mongoDB는 Join이 없어 데이터 구조화가 필요하고 다양한 종류의 쿼리문을 지원합니다. 그리고 스키마가 없어 필드의 추가 제거가 간편하고 관리의 편의성, 쉬운 수평 확장성, 인덱싱 제공의 특징을 가집니다.
SQL과 NoSQL(mongoDB)을 비교 해보겠습니다.
MySQL 용어 | mongoDB 용어/개념 |
database | database |
table | collection |
index | index |
row | JSON document |
column | JSON field |
join | embedding and linking |
primary key | _id field |
group by | aggregation |
SQL 구문 | mongoDB 구문 |
CREATE TABLE USERS(a Number, b Number) | db.createCollection("mycoll") |
INSERT INTO USERS VALUES(3, 5) | db.users.insert({a:3, b:5}) |
SELECT * FROM users | db.users.find() |
SELECT a,b FROM users WHERE age=20 | db.users.find({age:20}, {a:1, b:1}) |
SELECT *FROM users WHERE age=20 ORDER BY name | db.users.find({age:20}).sort({name:1}) |
이러한 특징을 가진 NoSQL, 최근 들어 NoSQL을 지향하고 따르는 기업들도 많아지고 있는 것 같습니다. 저도 지금껏 RDBMS(관계형 데이터베이스)만 사용을 해왔었는데 이번에 알게 된 지식을 통해 NoSQL로도 개발을 진행해봐야겠습니다.
댓글