SQL vs NoSQL
What is NoSQL?
NoSQL์ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐฉ์
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
๋ฐ์ดํฐ๊ฐ ๋ณ๋์ ํ ์ด๋ธํ ๋์ด ๋ณด๊ด๋๋ค.
pk, fk ๋ฑ ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ์ ๊ด๊ณ๋ํ ์กด์ฌํ ๊ฒ์ด๋ค.
Book ํ ์ด๋ธ์๋
id
,title
,author(id)
๋ฑ์ ๊ฐ์ ๊ฐ์ง ์ ์์ ๊ฒ์ด๋ค.Author ํ ์ด๋ธ์๋
id
,์ ์์ด๋ฆ
๋ฑ ๊ฐ์ด ์์ ์ ์๋ค.
ํ ์ด๋ธ๊ณผ ํ ์ด๋ธ ์ฌ์ด์ โ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑโ์ ์งํค๋ ๊ฒ์ด ์ค์ํ๋ค.
์ ์ฅ๋๋ ๋ ์ฝ๋๊ฐ (๋น๊ต์ ) ๋ณ๊ฒฝ์ด ์์ด ์ ์ง๋ ๊ฒ์ด๋ผ ์์ํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถํ์๋ค.
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค
๋์ ๋ฐ์ดํฐ๊ฐ
JSON
ํ์์ผ๋ก ์ ์ฅ๋๋ค.
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ถ์ ์์์ โํน์ ํ ์ํฉโ์ ์ผ๋์ ๋๊ณ ์ค๊ณํด์ผ ํ๋ค๋ ์ ์ด๋ค.
๊ธฐ๋ณธ์ ์ธ ๋์ ๋ฐ์ดํฐ ์ด์ธ์๋ ํน์ ํ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ธ์ ๋ ํตํฉํ ์ ์์ด์ผ ํ๋ค.
ํน์ ๋์ ๋ฐ์ดํฐ์๋
series_number
๊ฐ์ด ์กด์ฌํ ์ ์๋ค.
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ
key-value
๊ฐ ํญ๋ชฉ์ key-value ์์ด ํฌํจ๋์ด ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ์ ํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค.
๋ณดํต key๋ฅผ ์ฐธ์กฐํ์ฌ ๊ฒ์์ด ๊ฐ๋ฅ โ ์ฟผ๋ฆฌ ์ํ์ด ๊ฐ๋จํจ
๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผํ์ง๋ง ๊ฒ์์ ์ํด ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ํ์ ์์ ๋ ์ ํฉ.
์ฅ๋ฐ๊ตฌ๋ ๊ฐ์ ์ผ์์ ์ธ ๋ฐ์ดํฐ ์ถ์ , ์ด๋ฏธ์ง๋ ์ค๋์ค ํ์ผ
Redis, DynanoDB, Berkely
document
JSON
๊ณผ ์ ์ฌ ํ์์ โ๋ฌธ์โ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅkey-value ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค์ํ ์ฐจ์ด๋ ๊ฐ์ โ๋ฌธ์โ๋ก ์ ์ฅํ๋ค๋ ๊ฒ
๋ฌธ์ == semi-structured entity (Json, XML ๋ฑ)
๊ฐ ๋ฌธ์๋ง๋ค ๋ค๋ฅธ field-value ์์ ๊ฐ์ง ์ ์์
value๋ number, string, boolean, array, object ๋ฑ ๋ค์ํ ์ ํ์ ๊ฐ์ง ์ ์์.
document ๋ชจ๋ธ ํ์์ ์ฌ์ฉํ๋ฉด RDBM ๋ณด๋ค ์ฝ๊ฒ ๋๋์ ๋ฐ์ดํฐ๋ฅผ โ์ํ์ โ์ผ๋ก ํ์ฅํ ์ ์์.
๋ค์ํ ์์ฑ์ด ์๋ ๋ฐ์ดํฐ, ๋น์ ๊ทํ๋ ์ค์ฒฉ ๊ตฌ์กฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ๋
MongoDB
์๋ ์ฒ๋ผ
articles
๋ผ๋ db๊ฐ ์กด์ฌํ๋ค๊ณ ํด๋ณด์mongoDB์์ ๋ชจ๋ article์ ์กฐํํ๊ธฐ โ
db.articles.find()
writer๊ฐ โ๋ฐ๋ช ์โ์ธ article ์กฐํ โ
db.articles.find( { โwriterโ: โ๋ฐ๋ช ์โ } )
graph
Node์ Edge์ ๋ฐ์ดํฐ ์ ์ฅ.
Node : ์ฌ๋, ์ฅ์, ์ฌ๋ฌผ์ ๋ํ ์ ๋ณด ๋ฑ์ด ์ ์ฅ
Edge : ๋ ธ๋ ๊ฐ์ ๊ด๊ณ์ ๋ํ ์ ๋ณด ์ ์ฅ
SNS, ์ถ์ฒ ์๋น์ค(์์ง), ์ฌ๊ธฐ ํ์ง ๋ฑ์ ์๋น์ค โ ๋งค์ฐ ๊ธด๋ฐํ๊ฒ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ์ ์ ๊ตฌ์ถํด์ผ ํ ๋ ์ ํฉ
Neo4j, Giraph, JanusGraph
Wide Column Store (Column Family)
Table, Row, Dynamic Column์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
์ปฌ๋ผ์๊ฐ ๋ง๋ค๋ฉด ๊ด๋ จ๋ ์ปฌ๋ผ์ ์ปฌ๋ ์ ์ผ๋ก ๋ฌถ์ ์ ์์
๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ ํฉํ๋ฉฐ, join์ ์ง์ํ์ง ์์์ ์ฟผ๋ฆฌ ํจํด์ ์์ธกํ ์ ์์
IoT ๋ฐ์ดํฐ(์ง๋ฆฌ์ ์ผ๋ก ๋ถ์ฐ), ์ฌ์ฉ์ ํ๋กํ ๋ฐ์ดํฐ ๋ฑ ๋์ ์ปฌ๋ผ์ ์ฒ๋ฆฌํ ๋, ์๋ฐฑ๋ง ํ ๋ผ๋ฐ์ดํธ ์ ๋์ ๋์ฉ๋ ๋ฐ์ดํฐ
Cassandra, HBase
์ธ์ NoSQL์ ์ฌ์ฉํ ๊น?
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค โ ๋ค์ํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค.
(์๊ตฌ์ฌํญ) ๋ณํ์ ๋น ๋ฅด๊ฒ ์ ์
์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ณด์ด๋ ๋ฐ์ดํฐ์ ๋น์ทํ ํ์์ผ๋ก ์ ์ฅ๋จ โ ์ง๊ด์ , ์ดํดํ๊ธฐ ์ฌ์
API๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ๋๋ ๊ฒ์ ์์ ๋ฐ์ดํฐ ๋ณํ์ด ์ค์ด๋ฌโจ
์ ์ฐ์ฑ
: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฐํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ ๊ณตํ์ฌ ๋ณด๋ค ๋น ๋ฅด๊ณ ๋ฐ๋ณต์ ์ธ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํด์ค โ ์์ ๋ก์ด ํ์์ผ๋ก ์ ์ฅ (๊ตฌ์กฐ์ , ๋ฐ๊ตฌ์กฐ์ , ๋น๊ตฌ์กฐ์ ๋ชจ๋ ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌ)ํ์ฅ์ฑ
: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๊ณ ๊ฐ์ ๊ฐ๋ ฅํ ์๋ฒ๋ฅผ ์ถ๊ฐํ๋ ๋์ , ๋ถ์ฐํ ํ๋์จ์ด ํด๋ฌ์คํฐ๋ฅผ ์ด์ฉํด ํ์ฅํ๋๋ก ์ค๊ณ๋์์. โ ํธ๋ํฝ ์ฆ๊ฐ์ ๋์ํ๊ณ ์ง์ฐ์๊ฐ์ ์ค์ผ ์ ์์๊ณ ์ฑ๋ฅ
: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ โ๋ฐ์ดํฐ ์์ด๋ ํธ๋ํฝ์ด ์ฆ๊ฐํ ๋โ ๋งค์ฐ ์ข์ ์ฑ๋ฅ์ ๋ณด์ฌ์ค!๊ณ ๊ธฐ๋ฅ์ฑ
: NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ง์ถฐ ํน๋ณํ ๊ตฌ์ถ๋ ๋ฐ์ด๋ ๊ธฐ๋ฅ์ API์ ๋ฐ์ดํฐ ์ ํ์ ์ ๊ณต.
NoSQL์ด ์ ํฉํ์ง ์์ ๊ฒฝ์ฐ
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ผ๋ฐ์ ์ผ๋ก ๋น์ ๊ทํ๋ ๋ฐ์ดํฐ์ ์์กด
๋ฐ์ดํฐ ๋ณํ ๋ฐ ๋ฐ์ดํฐ ์ค๋ณต์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ณ ๋๋ก ์ ๊ทํ๋ ๋ฐ์ดํฐ์ ์์กดํ๋ ์๋น์ค(๋ฐ์ดํฐ๊ฐ ๊ตฌ์กฐ์ ์ด๊ณ ์ผ๊ด์ ์ธ ๊ฒฝ์ฐ) โ NoSQL์ด ์ ํฉํ์ง ์์โผ๏ธ ex) ๊ธ์ต, ํ๊ณ ๋ฑ ๋น์ฆ๋์ค ์ ํ๋ฆฌ์ผ์ด์
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋จ์ผ ํ ์ด๋ธ์ ๋ํ ์ฟผ๋ฆฌ ์์ ์ ๋งค์ฐ ๋น ๋ฅด๊ณ ๊ฐ๋จํ๊ฒ ๋์ํจ.
๊ทธ๋ฌ๋ ์ฟผ๋ฆฌ์ ๋ณต์ก์ฑ์ด ๋์์ง๋ ๊ฒฝ์ฐ, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ ์ข๋ค. โผ๏ธ
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ณดํต ๋ณต์กํ join, ํ์ ์ฟผ๋ฆฌ ๋ฐ WHERE ์ ์์์ ์ค์ฒฉ ์ง์๋ฅผ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ.
์ด ๋ ์ค์ ๊ผญ ์ ํํ ํ์ ์์ด ๋ง์ ๊ฒฝ์ฐ์ ๊ด๊ณํ ๋ฐ ๋น๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ฒฐํฉํด ์ฌ์ฉํ๋ โํ์ด๋ธ๋ฆฌ๋โ ์ ๊ทผ ๋ฐฉ์ ์ฌ์ฉ
NoSQL๋ก ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ์ฒ๋ฆฌํ๋ ์ ์ฐ์ฑ์ ์ป๊ณ , RDBMS๋ก ์ผ๊ด์ ์ธ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๋ฅผ ๋ณด์ฅ ๊ฐ๋ฅ
SQL vs NoSQL
์ฐจ์ด์
RDBMS์ ๋ฐ์ดํฐ๋ ํ
์ด๋ธ
์ ์ ์ฅ๋์ด ์์.
์คํค๋ง๋ฅผ ์ฌ์ ์ ์ ์ํด์ผํจ == ๋ชจ๋ column๊ณผ ๋ฐ์ดํฐ ํ์ (number, string,,)์ด ์ฌ์ ์ ํ์ ๋์ด์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฑํ ์ ์๋ค๋ ๋ง.
๋ํ key๋ฅผ ์ฌ์ฉํด ์ฌ๋ฌ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์ ์ฅ โ ์ฌ๋ฌ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๊ฐ ํ์ฑ.
key๋ฅผ ํตํด ํน์ row๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์์ ํ ์๋ ์์
๋ฐ๋๋ก NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ ์ฌ์ ์ ์คํค๋ง๋ฅผ ์ ์ํ์ง ์์๋ ์ ์ฅ๋ ์ ์์. โจ
์์ ์ ์งํํ๋ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๋ ๋ฐฉ์์ผ๋ก ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ๋ฐ๋ณตํ ์ ์๋ค๋ ๋ป.
์ต๊ทผ๊น์ง๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ชจ๋ธ
๊ทธ๋ฌ๋ ๋ฐ์ดํฐ์ ๋ค์์ฑ, ์๋, ์์ ๊ฐ๋นํ๊ธฐ ์ํด์๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณด์ํ ์ ํ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์.
์ด์ ๊ฐ์ ์ํฉ ๋๋ฌธ์ ์ผ๋ถ ์์ญ์์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋์ โ '๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค'
์ ์ํ ์ํ์ ํ์ฅ ๋ฅ๋ ฅ ๋๋ถ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ์ ์๊ณ , ๊ณ ๋์ ์ ์๋ ฅ์ด ํน์ง
NoSQL๋ง์ ํน์ง
NoSQL์ ๊ตฌ์กฐํ๋์ง ์์ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ๋ค.
Sharding(์ค๋ฉ) ์ ๊ฑฐ์ณ์ โ์ํํ์ฅโ์ ์ง์ํ๋ค. (์ฌ๋ฌ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐํ์ฌ ์ ์ฅํ๋ ๋ฐฉ์)
SQL์ด ํ ์ด๋ธ๊ฐ์ ์ฐธ์กฐ๋ฅผ ํตํด ์์ง ํ์ฅํด ๋๊ฐ๋ค๋ฉด, NoSQL์ ๋ฌธ์ ์์ ๋ฌธ์,, ๋ ๋ฌธ์,, ๊ณ์ํด์ ์ํ ํ์ฅ์ด ๊ฐ๋ฅ
์์ง ํ์ฅ = ์ง ์์ ์๋ก์ด ๊ณ๋จ์ ์ถ๊ฐ, ์ํ ํ์ฅ = ๊ฑด๋ฌผ ์์ ์๋ก์ด ๊ฑด๋ฌผ์ ์ถ๊ฐ
์ฉ์ด
table
collection
table
row (ํ)
document
item
column (์ด)
field
attribute
primary key
objectId
primary key
index
index
secondary index
view
view
global secondary index
Nested table or object
Embedded document
map
Array
Array
list
์ฐธ๊ณ
๊ฐ๋ฐ์๊ฐ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํธํ๋ ์ด์
NoSQL์ด๋? | ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ ์ฐํ ์คํค๋ง ๋ฐ์ดํฐ ๋ชจ๋ธ | AWS
Last updated