NoSQL Database
- NoSQL(Not Only SQL)์ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์นญํ ๋ ์ฌ์ฉ๋๋ฉฐ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ๋ํ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํ๊ฒฝ์์ ๋ง์ด ์ฌ์ฉ๋๋ค.
- ๋๊ท๋ชจ ํธ๋ํฝ ์ฒ๋ฆฌ
- ๋ถ์ฐ ์์คํ
- ๋น์ ํ ๋ฐ์ดํฐ ์ ์ฅ
- ๋น ๋ฅธ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฑ๋ฅ ์๊ตฌ
- ACID ์์น์ ์ถ๊ตฌํ๋ RDB์ ๋ฌ๋ฆฌ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ BASE ์์น์ ๋ฐ๋ฅธ๋ค.
- Basic Availability
- ์์คํ ์ด ๋ถ๋ถ์ ์ธ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ ์ฒด ์์คํ ์ด ์ค๋จ๋์ง ์๋๋ค.
- Soft state
- ๋ฐ์ดํฐ๊ฐ ์ผ์ ์๊ฐ ๋์ ์ผ๊ด๋์ง ์์ ์ ์๋ค.
- Eventual consistency
- ๋ฐ์ดํฐ๋ ๊ถ๊ทน์ ์ผ๋ก ์ผ๊ด๋ ์ํ๋ฅผ ๊ฐ์ง๋ค.
- Basic Availability
NoSQL Database์ ์ข ๋ฅ
Key-Value, Document, Wide-Column, Graph 4๊ฐ์ง ์ ํ์ผ๋ก ๋๋๋ค.
Key-Value
- ๊ณ ์ ํ Key-Value ์์ผ๋ก ๊ตฌ์ฑ๋๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค.
- Caching๊ณผ ์ธ์ ๊ด๋ฆฌ์ ์ฌ์ฉ๋๋ฉฐ ๊ตฌ์กฐ๊ฐ ๋จ์ํ๊ณ ์ฃผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์ฑ๋ฅ์ด ์ฐ์ํ๋ค.
- ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก
- Caching
- ์ฌ์ฉ์ ์ธ์ ๊ด๋ฆฌ
- ์ข
๋ฅ
- Redis
- Memcached
- Amazon DynamoDB
Document
- JSON, XML, BSON ๋ฑ์ ๋ฌธ์ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ์ ์ฐํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ ๊ณตํ์ฌ ๋ฐ์ ํ ๋ฐ์ดํฐ๋ ๋น์ ํ ๋ฐ์ดํฐ ์งํฉ์ ์ ํฉํ๋ค.
- ๋ฌธ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์์ ๋กญ๊ฒ ์ ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์คํค๋ง๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ์๋น์ค์ ์ ํฉํ๋ค.
- ์ฃผ์ ์ฉ๋
- CMS(Content Management System)
- ๋ก๊ทธ ๋ฐ์ดํฐ
- ์ฌ์ฉ์ ํ๋กํ ๊ด๋ฆฌ
- ์ข
๋ฅ
- MongoDB
- Couchbase
Wider-Column
- ๊ธฐ์กด SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌ๋ฆฌ ๊ณ ์ ๋ ์คํค๋ง ์์ด ์ปฌ๋ผ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฐํ๊ฒ ์ ์ฅํ๋ค.
- ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ํ์ ์ผ๋ก ํ์ฅ(Scale-out)ํ๊ธฐ ์ฉ์ดํ๋ฉฐ ๋ฐ์ด๋ ์ฐ๊ธฐ ์ฑ๋ฅ์ ์ ๊ณตํ๋ค.
- ์ฃผ์ ์ฉ๋
- ์๊ณ์ด ๋ฐ์ดํฐ
- ๋ก๊ทธ ๋ฐ์ดํฐ
- ์ค์๊ฐ ๋น ๋ฐ์ดํฐ ๋ถ์
- ์ข
๋ฅ
- Apache Cassandra
- HBase
Graph
- ๋ ธ๋์ ์ฃ์ง ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- ๋ ธ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋, ์ฅ์, ์ฌ๋ฌผ์ฒ๋ผ ๋ช ์ฌ์ ํด๋นํ๋ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ , ์ฃ์ง๋ ๋ ธ๋๋ค ์ฌ์ด์ ๊ด๊ณ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ์ฃผ์ ์ฉ๋
- SNS ์น๊ตฌ ์ถ์ฒ
- Fraud Detection(์ฌ๊ธฐ ํ์ง)
- ์ถ์ฒ ์์ง
- ๊ฒฝ๋ก ํ์
- ์ข
๋ฅ
- Neo4J
- Amazon Neptune
NoSQL vs RDB
- ์๋น์ค์ ํน์ฑ์ ๋ฐ๋ผ ์ ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ์ ์ ํํด์ผ ํ๋ค.
- ๊ธ์ต์ด๋ ์ฌ๊ณ ์ฒ๋ผ ์ผ๊ด์ฑ์ด ์ค์ํ ์๋น์ค๋ผ๋ฉด RDB SQL์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ํ๋ค.
- ์ด๋น ์๋ง~์์ญ๋ง ๊ฑด์ ์์ฒญ์ด๋ ์ ์ธ๊ณ ์ฌ์ฉ์๋ค์ด ๋์์ ์ ์ํ๋ ๊ฒ์์ด๋ ์คํธ๋ฆฌ๋ฐ ์๋น์ค๋ผ๋ฉด NoSQL์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ๋ค.
- ๊ท๋ชจ๊ฐ ์๋ ์๋น์ค์์๋ RDB์ NoSQL ๊ฐ์์ ๊ฐ์ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ ์ ํ ํผํฉํ์ฌ ๋ฐ์ดํฐ์ ํน์ฑ์ ๋ง๊ฒ ํ์ด๋ธ๋ฆฌ๋ ๊ตฌ์กฐ ๋๋ Polyglot Persistence ์ ๋ต์ ์ฑํํ๋ค.
| RDB | NoSQL | |
|---|---|---|
| ๋ฐ์ดํฐ ๊ตฌ์กฐ | ํ ์ด๋ธ(ํ๊ณผ ์ด)์ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ์ ์ ํฉ | ๋ค์ํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋น์ ํ ๋ฐ ๋ฐ์ ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ ํฉ |
| ํ์ฅ์ฑ | Scale-up(์์ง์ ํ์ฅ) | Scale-out(์ํ์ ํ์ฅ, ์ค๋ฉ) |
| ์์น | ACID | BASE(์ผ๋ถ ACID ์์น ์ค์ ๊ฐ๋ฅ) |
| ๋ฐ์ดํฐ ๊ด๊ณ | ๊ด๊ณ๋ ์ธ๋ํค๋ฅผ ํตํด ์ ์๋๊ณ JOIN์ ํตํด ์ ๊ทผ | ๊ด๊ณ๋ ์ค์ฒฉ ๊ตฌ์กฐ์ด๊ฑฐ๋ ๋ช ์์ ๋๋ ์๋ฌต์ ์ผ ์ ์์ |
| ์ฑ๋ฅ | ์ฝ๊ธฐ ์์ฃผ์ ์์ ๊ณผ ํธ๋์ญ์ ์ค์ฌ ์ํฌ๋ก๋์ ์ ํฉ | ์ค์๊ฐ ์ฒ๋ฆฌ, ๋น ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ๋ถ์ฐ ํ๊ฒฝ์ ์ ํฉ |
| ๋ฐ์ดํฐ ์ผ๊ด์ฑ | ๋์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ | ๊ถ๊ทน์ ์ผ๊ด์ฑ |
| ๋ฐ์ดํฐ ๋ถํ | ํ ์ด๋ธ ๊ธฐ๋ฐ ๋ถํ ๋๋ ํํฐ์ ํ๋ฃจ๋ ์ง์ | ์ค๋ฉ๊ณผ ๋ณต์ ๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ถํ |