NoSQL
- non-SQL, non-Relational DB ์ข ๋ฅ๋ฅผ ์ง์นญํ๊ธฐ ์ํด ์๊ธด ์ฉ์ด.
- ํ์ง๋ง NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์คํ๋ ค SQL์ ์ง์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง๊ณ ์๋ค -> Not-only SQL์ ์๋ฏธ๋ก ์ฐ์ด๋ ๊ฒจ์ฐ๋ ์์.
NoSQL์ ํน์ง
- RDBMS์ ๋น๊ตํ์ฌ ๋ฐ์ดํฐ ํ์์ด ์์ ๋กญ๋ค. (๋ฐ์ดํฐ์ ํ์ , ๊ธธ์ด, ํฌ๊ธฐ)
- RDBMS์์๋ ๋ฐ์ดํฐ์ ํ์์ด ํ
์ด๋ธ๋ก ์ ํด์ ธ ์๊ธฐ์ ํํํ๊ธฐ ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
-> Object๋ฅผ ํํํ ์ ์๋ ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์ ์๋ค.
- SQLํ์์ ๋ง์ถ์ง ์๋๋ผ๋, ์ ์ฉ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํจ์๋ก ์กฐํํ ์ ์๋ค.
- ๋น ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ์ NoSQL DB์ ๊ฒฝ์ฐ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋ค.
- ๊ธฐ๋ฅ์ด๋ ํ์์ ํ์ค์ด ์๋ค. ์ฌ์ฉํ๋ DB๋ณ๋ก ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- ๋ค๋ฅธ ๋ฐ์ดํฐ ์งํฉ์ ๋ํด FK ๊ฐ ์๊ฑฐ๋, ์๋๋ผ๋ cascading ์ต์
์ด ์๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ์งํฉ์ ๋ฐ์ดํฐ ์ฌ์ด์ ์ ํฉ์ฑ์
๋ณด์ฅํ์ง ๋ชปํ๋ค.
- Transaction์ ACID ํน์ฑ์ ๋ชจ๋ ์ ๊ณตํ์ง ๋ชปํ๋ค.
NoSQL ์ข ๋ฅ
1. MongoDB
- ๋ฒ์ฉ์ ์ผ๋ก ๋ง์ ๊ธฐ๋ฅ์ ๋ด๊ณ ์๋ DB
- ๋จ์ผ Collection์ document๋จ์๋ก Atomicity์ Transaction ๊ธฐ๋ฅ์ ์ ๊ณต
- sharding์ผ๋ก ํ์ฅ์ฑ๋ ์ ๊ณต
2. Redis
- ์ธ๋ฉ๋ชจ๋ฆฌ DB
- ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋จผ์ ์ ํ๊ณ ์ฌ์ฉํ๋ค
- ์ฑ๊ธ์ค๋ ๋๋ก lock์ ์ ๊ณตํ์ง ์์ผ๋ฉด์๋ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ ์ฅ์
3. Apache HBase
- ๋น ๋ฐ์ดํฐ์ฉ DB
- ๋จ์ผ Key๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์กฐํํ๋ค
- ๋ฐ์ดํฐ๊ฐ ๋ง์์ ธ๋ ๋จ์ผ key์ ๋ํ ์กฐํ ์๋๋ ๊ฑฐ์ ๋๋ ค์ง์ง ์์
4. Apache Druid
- Cubeํ DB
- ์ง๊ณ ์ฐ์ฐ์ ์ต์ ํ๋์ด์๋ค
- ๋์ฉ๋์ ๋ฐ์ดํฐ์ ๋ํ ํ, ์นด์ดํธ ๋ฑ์ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ํํ ์ ์๋ค
- ์ง๊ณํ ์กฐ๊ฑด์ ๋ง์ถฐ Cube modeling์ ๋ฏธ๋ฆฌ ํด๋์์ผ ํ๋ค
MongoDB์ ๊ฐ๋
Document
- MongoDB์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋จ์
- ํ์์ ๋ฏธ๋ฆฌ ์ง์ ๋์ด ์์ง ์๊ณ ์์ฑ ์์ ์ ์ด๋ค ํ์์ ๋ด์์ด ์๋ ๋๋ค
- ๊ฐ์ Collection์ ์ํ Document๋ผ๊ณ ํด์ ๋ชจ๋ ๊ฐ์ ํ์์ ๋ฐ๋ฅผ ํ์๋ ์๋ค
- Document์ ๊ฐ์ง๋ ํ๋๋ ๊ฐ์ BSON Type์ ๋ฐ๋ฅธ๋ค
- _id ํ๋๋ ๊ฐ Document์ PK๋ก์ ๋ฐ๋์ ๊ฐ์ ธ์ผ ํ๋ค
(์ง์ ์ง์ ํ ์ ์๊ณ , ์ง์ ํ์ง ์์ผ๋ฉด ObjectId ํ์์ ๋ฐ์ดํฐ๊ฐ ์๋ ์์ฑ, ์ฝ์
๋๋ค)
*ObjectId
- ๋ชจ๋ Document๋ ๊ณ ์ ๊ฐ์ ๋ปํ๋ _id ํ๋๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค
- ObjectId๋ 12๋ฐ์ดํธ๋ก ๋ค์์ ๋ฐ์ดํฐ์ ์กฐํฉ๋๋ค.
- 4 - byte timestamp : ๋ฐ์ดํฐ ์์ฑ ์ํ์ unix epoch timestamp ๊ฐ
- 5 - byte random value : ํ๋ก์ธ์ค ๋น ์ ๋ํฌํจ์ ๋ณด์ฅํ๋ ๋๋ค ๊ฐ
- 3 - byte incrementing counter : 1์ฉ ์ฆ๊ฐํด์ ํ ๋น๋๋ counter. ์์ randome value์ ์ํด ์ด๊ธฐํ ํ๋ค
- objectId.getTimestamp() ๋ฅผ ํตํด ์์ฑ ์์ ์ ๊ฐ์ ธ์ฌ ์ ์๋ค
Collection
- Document๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ ผ๋ฆฌ์ ์ธ ๋ฌถ์์ Collection์ด๋ผ๊ณ ํ๋ค (RDBMS์ Table๊ณผ ์ ์ฌํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค)
- Document์ ํ์์ ์ ์ฝ์ด ์์ง๋ง, Collection ๋จ์์์ ๊ฐ์ ํ์(ํ๋ ์ด๋ฆ, ๊ฐ์ ๋ฐ์ดํฐ ํ์ ๋ฑ)๋ฅผ ๊ฐ์ง๋๋ก ์ ์ฝ์ ๊ฑธ ์ ์๋ค
Database
- ํ๋์ MongoDB ์๋ฒ ํน์ ํด๋ฌ์คํฐ์์ ๋ ผ๋ฆฌ์ ์ผ๋ก Database๋ฅผ ๊ตฌ๋ถํ ์ ์๋ค
- ์ฃผ๋ก ์๋น์ค, Client user ๋ฑ์ ๊ตฌ๋ถํ๊ณ ์ ์์ ์ ํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค
MongoDB ํน์ง
- Bson ํ์์ ๋ฐ๋ผ ํ๋์ ํ๋๊ฐ Bson Object(Json Object)๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ฆ ํ๋ ์์ ๋ ํ๋๊ฐ ์์ ์ ์๋ค.
(ํ๋ ์์ ์๋ ํ๋ ์ค๋ธ์ ํธ์ ๋ํด์๋ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค)
- ๊ณ์ Inner filed๋ฅผ ๊ฐ์ง๋ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด ๊ฒ์, ์ง๊ณ ์ฐ์ฐ์์ ์๋๊ฐ ๋๋ ค์ง๋ค.
Transaction
- MongoDB์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ Document์ ๋ํด ํ๋์ operation๋ง Atomic operatioin์ ์ ๊ณตํ๋ค.
- Transaction์ ์ด์ฉํ๋ฉด ํ๋ ์ด์์ document์ ๋ํด์, ๋ ๋ฒ ์ด์์ operation์ ๋ํด Atomicity๋ฅผ ์ ๊ณตํ ์ ์๋ค.
- ํ์ง๋ง ๋๋ฌด ๋ง์ Transaction ์ฌ์ฉ ์ ์ฑ๋ฅ์ ํ๊ฐ ์์ ์ ์๋ค
(๋ฐ๋ผ์, ํ๊ฒฝ๊ณผ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ฌ์ฉํด์ผํ๋ค)