RDB와 NoSQL
우리가 앞에서 배운 것들은 다 관계형 데이터베이스에 관한 설명이었다. 하지만, 요즘 NoSQL의 비중이 증가함에 따라 각각의 장단점을 잘 파악하고 있어야 적재적소에 맞게 사용할 수 있다. 두 개념을 비교하면서 알아보자!
RDB
우선 RDB가 어떤 특징을 갖고 있는지부터 알아보자.
RDB는 정형화된 틀을 통해 데이터를 저장하는 시스템이다. 철저히 구분된 틀이 있기 때문에 중복되는 값이 적다. 따라서 정보의 업데이트가 잦은 구조에 유리하다. 하지만, 너무 엄격한 틀이기 때문에 유연성이 적고, 확장성이 떨어진다. 단순히 수직적으로밖에 확장을 못한다. 따라서 변동성이 적은 정보에 유리하다. 많은 데이터를 처리하기 보단, 적은 데이터를 처리하는 데 유리하다.
NoSQL
NoSQL이 뭘까? Not Only SQL의 약자로, SQL만을 사용하지 않는다는 것을 의미한다. SQL 뿐만 아니라 다른 것들을 통해 구현하는 데이터베이스의 시스템이다. NoSQL이라는 것은 우리나라를 제외한 세상에 존재하는 수많은 나라들을 외국이라는 한 단어로 말하는 것과 비슷하다. NoSQL의 예시인 mongoDB와 couchDB가 사용하는 쿼리 언어는 전혀 다르지만, NoSQL이라는 범주로 묶을 수 있다.
또한, NoSQL은 key-value storage system이다. 이게 어떤 것이냐면, 데이터들을 저장하다 보니, 꼭 관계형 데이터베이스로 저장할 필요가 없는 경우도 많고, 특히 빅데이터와 같이 많은 양의 데이터를 다루어야 하는 경우가 점점 늘어났다. 이를 위해 잘 처리하는 방법이 key-value system이다.
NoSQL은 비정형 데이터를 마구 저장한다. 체계가 비교적 없다 보니, 중복되는 데이터가 많다. 그래서 업데이트가 잦은 정보에는 불리하다. 대신, 조회에는 유리하다.
또한, 엄격한 틀이 없다 보니 단순한 수직적 확장 뿐만 아니라, 수평적 확장이 용이하다. 그래서 변동 가능성이 높은 정보에 유리하다. 빅데이터를 다루는데 유리하기도 하다.
NoSQL의 예시로 mongoDB가 어떻게 작동되는지 코드를 살짝 봐보자
db.createCollection("student")
db.student.insert({"id": 2022394, "name": "Nossi", "class": ["Math", "Eng"]})
db.student.insert({"id": 2021921, "name": "Bob", "class": ["Eng"]})
db.student.find() // Fetch all students in JSON format
db.student.findOne({"id": 2022394}) // Find one matching student
db.student.remove({"name": "Nossi"}) // Delete matching students
db.student.drop() // Drops the entire collection
RDB vs NoSQL

'CS > 데이터베이스' 카테고리의 다른 글
| [CS - 데이터베이스] DB의 Index (0) | 2023.02.13 |
|---|---|
| [CS - 데이터베이스] Transaction과 Deadlock (0) | 2023.01.28 |
| [CS - 데이터베이스] RDB의 테이블 결합 (left outer join, inner join) (0) | 2023.01.26 |
| [CS - 데이터베이스] 관계형 데이터베이스의 관계 (1:1, 1:N, N:M) (0) | 2023.01.26 |
| [CS - 데이터베이스] 데이터베이스 테이블 용어 정리 (0) | 2023.01.25 |