RDB์ NoSQL
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค (RDB; Relational Database) |
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDB)๋ ์ฌ์ ์ ์๊ฒฉํ๊ฒ ์ ์๋ DB schema๋ฅผ ์๊ตฌํ๋ table ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ต๋๋ค. |
๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค (NoSQL; Not only SQL) |
table ํ์์ด ์๋ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. |
RDB๋ ์๊ฒฉํ schema๋ก ์ธํด ๋ฐ์ดํฐ ์ค๋ณต์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ Update๊ฐ ๋ง์ ๋ ์ ๋ฆฌํฉ๋๋ค.
NoSQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ณต์ผ๋ก ์ธํด ๋ฐ์ดํฐ update ์ ๋ชจ๋ ์ปฌ๋ ์ ์์ ์์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ update๊ฐ ์ ๊ณ ์กฐํ๊ฐ ๋ง์ ๋ ์ ๋ฆฌํฉ๋๋ค.
* ๋น์ ํ ๋ฐ์ดํฐ๋?
๋น์ ํ ๋ฐ์ดํฐ๋ ํ์ด ์กํ์์ง ์๊ณ ์ฌ์ ์ ์๊ฐ ์๋ ๋ฐ์ดํฐ์ ๋๋ค.
๋ค์ํ๊ณ ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ์ด๋ฉฐ ๋ณ๋์ ๋ถ์ ์ฒ๋ฆฌ ๊ธฐ์ ์ด ํ์ํฉ๋๋ค.
์ฆ, ๋ฏธ๋ฆฌ ์ ํด์ ธ์ ๊ณ ์ ๋์ด ์๋ ํ๋์ ์ ์ฅ๋์ด ์์ง ์์ ๋ฐ์ดํฐ์ ๋๋ค.
์๋ฅผ๋ค์ด, ํ์ด์ค๋ถ, ํธ์ํฐ, ์ ํ๋ธ ๋ฑ์ผ๋ก ์์ฑ๋๋ ์์ ๋ฐ์ดํฐ & Iot ํ๊ฒฝ์์ ์์ฑ๋๋ ์์น ์ ๋ณด ๋๋ ์ผ์ ๋ฐ์ดํฐ์ ๊ฐ์ ์ฌ๋ฌผ ๋ฐ์ดํฐ
Key-value storage system (NoSQL)์ด๋?
๊ธฐ์กด์ ๊ด๊ณํ database์ ๊ฒฝ์ฐ์๋ ๋จ์ผ ๊ธฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ต์ ํ ๋์ด ์์ต๋๋ค.
ํ์ง๋ง ์ต์ ๋ฐ์ดํฐ๋ค์ ๊ผญ ๊ด๊ณํ์ผ๋ก ์ฒ๋ฆฌ๋ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๋ง๊ณ , ๋ค๋ค์ผ ํ๋ ๋ฐ์ดํฐ์ ์๋ ํจ์ฌ ์ปค์ก์ต๋๋ค.
์ฆ, Big data๋ผ๊ณ ์ผ๊ฑธ์ด์ง๋ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์ํ ํด๊ฒฐ์ฑ ์ค ํ๋์ ๋ฐฉ๋ฒ์ด Key-value storage system์ ๋๋ค.
MongoDB๋ก ๋ณด๋ NoSQL ์์
NoSQL์ ์ข ๋ฅ๋ Bigtable, DynamoDB, Cassandra, MongoDB ๋ฑ์ด ์์ต๋๋ค.
๊ทธ ์ค MongoDB์ ์์๋ฅผ ๋ณด๋ฉด์ NoSQL์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๊ฐ๋จํ๊ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
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์ NoSQL ์ฐจ์ด
RDB(SQL) | NoSQL | |
๋ฐ์ดํฐ ์ ์ฅ ๋ชจ๋ธ | table | json document / key-value / ๊ทธ๋ํ ๋ฑ |
๊ฐ๋ฐ ๋ชฉ์ | ๋ฐ์ดํฐ ์ค๋ณต ๊ฐ์ | ์ ์์ผ / ํ์ฅ๊ฐ๋ฅ์ฑ / ์ ์ฐ์ฑ |
์์ | Oracle, MySQL, PostgreSQL ๋ฑ | MongoDB, DynamoDB ๋ฑ |
Schema | ์๊ฒฉํ ๋ฐ์ดํฐ ๊ตฌ์กฐ | ์ ์ฐํ ๋ฐ์ดํฐ ๊ตฌ์กฐ |
โญ์ฅ์ โญ | - ๋ช
ํํ ๋ฐ์ดํฐ๊ตฌ์กฐ ๋ณด์ฅ - ๋ฐ์ดํฐ ์ค๋ณต ์์ด ํ๋ฒ๋ง ์ ์ฅ (๋ฌด๊ฒฐ์ฑ) - ๋ฐ์ดํฐ ์ค๋ณต์ด ์์ด์ ๋ฐ์ดํฐ update ์ฉ์ด |
- ์ฐ์ฐํ๊ณ ์์ ๋ก์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ - ์๋ก์ด ํ๋ ์ถ๊ฐ ์์ ๋ก์ - ์ํ์ ํ์ฅ(scale out) ์ฉ์ด |
โญ๋จ์ โญ | - ์์คํ
์ด ์ปค์ง๋ฉด join๋ฌธ์ด ๋ง์ ๋ณต์กํ query๊ฐ ํ์ - ์ํ์ ํ์ฅ์ด ๊น๋ค๋ก์ ๋น์ฉ์ด ํฐ ์์ง์ ํ์ฅ(Scale up)์ด ์ฃผ๋ก ์ฌ์ฉ๋จ - ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์ ์ฐํ์ง ๋ชปํจ |
- ๋ฐ์ดํฐ ์ค๋ณต ๋ฐ์ ๊ฐ๋ฅ - ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ชจ๋ ์ปฌ๋ ์ ์์ ์์ ์ด ํ์ํจ - ๋ช ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ณด์ฅ ์๋จ |
โญ์ฌ์ฉโญ | - ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋ ์ฌ์ง๊ฐ ์์ด ๋ช
ํํ ๊ฒฝ์ฐ - ๋ฐ์ดํฐ update๊ฐ ์ฆ์ ์์คํ (์ค๋ณต ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฏ๋ก ๋ณ๊ฒฝ์ ์ ๋ฆฌ) |
- ์ ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์ ํด์ง์ง ์์ ๊ฒฝ์ฐ - Update๊ฐ ์์ฃผ ์ด๋ฃจ์ด์ง์ง ์๋ ๊ฒฝ์ฐ (์กฐํ๊ฐ ๋ง์ ๊ฒฝ์ฐ) - ๋ฐ์ดํฐ ์์ด ๋งค์ฐ ๋ง์ ๊ฒฝ์ฐ (scale out ๊ฐ๋ฅ ) |
์์ง์ ํ์ฅ(Scale up)๊ณผ ์ํ์ ํ์ฅ(Scale out) ์ฐจ์ด
DB์ ๋น๊ตํ์ฌ NoSQL์ ํน์ง์ ACID, Transaction์ ์ง์ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
RDB๋ ACID์ Transaction์ ๋ณด์ฅํ๊ธฐ ์ํด ์ํ์ ํ์ฅ์ด ์ฝ์ง๊ฐ ์์ต๋๋ค.
๋ํ, RDB ๊ฐ์ ๊ฒฝ์ฐ์๋ multiple server๋ก ์ํ์ ํ์ฅ์ ํ๊ฒ ๋๋ฉด join์ ํ๊ธฐ ์ํด ๊ต์ฅํ ๋ณต์กํ ๊ณผ์ ์ด ํ์ํฉ๋๋ค.
RDB๋ ์ํ์ ํ์ฅ์ด ๊ฐ๋ฅํ์ง๋ง NoSQL์ ๋นํด ํจ์ฌ ๋ณต์กํฉ๋๋ค.
RDB๋ฅผ ์ํ์ ํ์ฅํ๋ ค๋ฉด ์ค๋ฉ(sharding, ๋ฐ์ดํฐ๊ฐ ์ํ์ ์ผ๋ก ๋ถํ ๋๊ณ ๊ธฐ๊ธฐ์ ๋ชจ์ ์ ๋ฐ์ ๊ฑธ์ณ ๋ถ์ฐ๋๋ ๊ฒฝ์ฐ)์ด ํ์ํฉ๋๋ค.
ACID ์ค์๋ฅผ ์ ์งํ๋ฉด์ RDB๋ฅผ ์ค๋ฉํ๋ ๊ฒ์ ๋งค์ฐ ๊น๋ค๋ก์ด ์์ ์ ๋๋ค.
์ ๋ฆฌํ๋ฉด
NoSQL์ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
NoSQL์ ์ ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์ ํด์ง์ง ์์ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ update๊ฐ ์์ฃผ ์ด๋ฃจ์ด์ง์ง ์๊ณ ์กฐํ๊ฐ ๋ง์ ๊ฒฝ์ฐ, ๋ scale out์ด ๊ฐ๋ฅํ๋ฏ๋ก ๋ฐ์ดํฐ ์์ด ๋งค์ฐ ๋ง์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
RDB๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
RDB๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ช ํํ์ฌ ๋ณ๊ฒฝ๋ ์ฌ์ง๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ ๋ฐ์ดํฐ ์ค๋ณต์ด ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ update๊ฐ ์ฆ์ ์์คํ ์์ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
์ฐธ๊ณ