NoSQL
Last updated
Last updated
Not Only SQL ์ ๋จ์ด ๋ป์ผ๋ก SQL๋ง์ ์ฌ์ฉํ์ง ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ์ ์ง์นญํ๋ ๋ง์ด๋ค.
๋๋ถ๋ถ cluster์์ ์คํํ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ ๊ด๊ณํ ๋ชจ๋ธ์ ์ฌ์ฉํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ cluster์์ ์คํ๋๋๋ก ๋ง์ถฐ์ง ๊ฒ์ ์๋๋ค. NoSQL ๋ชจ๋ธ ์ค ํ๋์ธ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๋น์ทํ ๋ถ์ฐ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค.
์คํ์์ค์ด๋ค.
์คํค๋ง ์์ด ๋์ํ๋ฉฐ, ๊ตฌ์กฐ์ ๋ํ ์ ์๋ฅผ ๋ณ๊ฒฝํ ํ์ ์์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ์ฝ๋์ ์์ ๋กญ๊ฒ ํ๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
cluster : ์ฌ๋ฌ ๋์ ์ผ๋ฐ ์ํฌ์คํ ์ด์ ์ ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐํ์ฌ ํ๋์ PC์ฒ๋ผ ์๋ํ๊ฒ ํ๋ ๊ธฐ์ ์ ๋งํ๋ค.
์ถ์ฒ: https://jw3461.tistory.com/6 [์ฐ์ฐ!! ]
๊ธฐ์กด์๋ ํธ๋์ญ์ ์ ํตํ ์์ ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ๊ฐ ๊ฐ์ฅ ์ค์ํ ์ด์์๊ธฐ๋๋ฌธ์ RDBMS๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง ๋ฐ์ดํฐ์ ํธ๋ํฝ ์์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ํ์ํ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค.
NoSQL์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ฝ๊ฐ ํฌ๊ธฐํ ๋์ ์ฌ๋ฌ ๋์ ์ปดํจํฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐํ์ฌ ์ ์ฅํ๋ ๊ฒ(scale-out : ์ํ์ ํ์ฅ)์ ๋ชฉํ๋ก ๋ฑ์ฅํ๋ค.
Key - Value
Document
Column-Family
Graph
๊ทธ๋ํ ๋ชจ๋ธ์ ์ ์ธํ ๋๋จธ์ง ๋ชจ๋ธ์ ์งํฉ ์งํฅ(Aggregate-Oriented) ๋ชจ๋ธ์ด๋ค.
์งํฉ์ด๋ ์ฐ์ฐ์ ํ ๋จ์๋ก ์ทจ๊ธ๋๋ ์ฐ๊ด๋ ๊ฐ์ฒด๋ค์ ์งํฉ์ด๋ค. Aggregate-Oriented Database๋ ์ฌ๋ฌ ๋์ผ ใ ฃํด๋ฌ์คํฐ๋ก ์ด๋ฃจ์ด์ง ์์คํ ์์ ์ฌ์ฉํ๊ธฐ ์ ํฉํ๋ค. ์ฆ, ์ํ์ ํ์ฅ์ด ์ฉ์ดํ๋ค. ์ด๋ RDBMS์๋ ๋ฌ๋ฆฌ ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ค์ด ํจ๊ป ์์ง์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์๋ฃ๊ตฌ์กฐ์ ์งํฉ ๊ฐ ๋ฐ์ดํฐ๊ฐ ์ ์ผ์นํ๋ฏ๋ก, RDBMS์ฒ๋ผ ๊ฐ์ฒด-๊ด๊ณ ๋งคํ ํ๋ ์์ํฌ๊ฐ ํ์ํ์ง ์๋ค. ๋ฐ์ดํฐ์ ๊ฒ์๋ key๋ id๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
Aggregate-Oriented ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์กฐ์ธ ์ฐ์ฐ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด MongoDB๋ Cassandra ๋ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ MapReduce๊ธฐ๋ฅ์ ์ ๊ณตํจ์ผ๋ก์จ ์กฐ์ธ๊ณผ ์ ์ฌํ ์ฐ์ฐ์ ๊ฐ๋ฅํ๋๋ก ์ค๊ณํ๋ค.
Key-Value ์ ์ฅ์๋ ๊ฐ์ฅ ๋จ์ํ ํํ์ NoSQL์ผ๋ก, ์ํ์ ํ์ฅ(scale-out)์ด ์ฉ์ดํ๋ค. Key-Value ์์ผ๋ก ์ ์ฅ๋๋ฉฐ, key๋ value์ ์ ๊ทผํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉํ๋ค. value๋ ์ด๋ ํ ํํ์ ๋ฐ์ดํฐ๋ผ๋ ๋ด์ ์ ์๋ค.
์์ฃผ ๊ฐ๋จํ API๋ง์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ง์์ ์๋๊ฐ ๊ต์ฅํ ๋น ๋ฅธ ํธ์ด๋ค.
์ข ๋ฅ
Memcached
Riak
Redis
Amazone Dynamo DB
LevelDB
RDBMS์ ๋ฐ์ดํฐ ํํ ๋น๊ต
RDBMS
Key-Value ๋ชจ๋ธ
Key-Value ๋ชจ๋ธ์์ ํ์ธต ์งํํ ๋ชจ๋ธ๋ก ์๊ฐํ ์ ์๋ค. ๋ฐ์ดํฐ๋ Key์ Document์ ํํ๋ก ์ ์ฅ๋๋ค. (Document๋ Value์ ๊ณ์ธต์ ํํ) ๊ฐ์ฒด ์งํฅ์ ๊ฐ์ฒด์ ์ ์ฌํ๋ฉฐ, ์ด๋ค์ ํ๋์ ๋จ์๋ก ์ทจ๊ธ๋์ด ์ ์ฅ๋๋ค. ์ฆ, ํ๋์ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ์ ํ ์ด๋ธ์ ๋๋ ์ ์ฅํ ํ์๊ฐ ์์ด์ง๋ค.
์ฃผ์ํ ํน์ง
๊ฐ์ฒด-๊ด๊ณ ๋งคํ์ด ํ์ํ์ง ์๋ค. ๊ฐ์ฒด๋ฅผ Document ํํ๋ก ๋ฐ๋ก ์ ์ฅ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒ์์ ์ต์ ํ ๋์ด์๋ค.
์ฌ์ฉ์ด ๋ฒ๊ฑฐ๋ฝ๊ณ SQL๊ณผ ์ฟผ๋ฆฌ๊ฐ ๋ค๋ฅด๋ค.
JSON์ด๋ xml ํํ๋ก ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ค.
์ข ๋ฅ
MongoDB
CouchDB
MarkLogic
์์ ๋๊ฐ์ ๋ชจ๋ธ์ ๊ฐ(Value or Document)์ ์ด์ฉํด ํ๋๋ฅผ ๊ฒฐ์ ํ๋ค๋ฉด, Column ๋ชจ๋ธ์ ํค์์ ํ๋๋ฅผ ๊ฒฐ์ ํ๋ค.
ํค๋ ROW(ํค ๊ฐ)์ Column-Family, Column-Name์ ๊ฐ์ง๋ค. ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ column-family์์ ์ํด์์ผ๋ฉฐ, ๊ฐ์์ column-name์ ๊ฐ์ง๋ค.
์ด๋ฌํ ํน์ง๋๋ฌธ์ column-family ๋ชจ๋ธ์ ํด๋ฌ์คํฐ๋ง์ด ์ฝ๊ฒ ์ด๋ค์ง๋ฉฐ, timestamp๊ฐ ์กด์ฌํด ๊ฐ์ด ์์ ๋ ํ์คํ ๋ฆฌ๋ฅผ ์ ์ ์๋ค. ๋ํ ๊ฐ๋ค์ ์ผ๋ จ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ ํ ํํ์ ๋ฐ์ดํฐ๋ผ๋ ์ ์ฅํ ์ ์๋ค. ์์ ๋ ๋ชจ๋ธ๊ณผ๋ ๋ค๋ฅด๊ฒ Bolb๋จ์์ ์ฟผ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฉฐ, Schema-less์ด๊ธด ํ์ง๋ง ์๋ก์ด ํ๋๋ฅผ ๋ง๋๋๋ฐ ๋๋ ๋น์ฉ์ด ํฌ๊ธฐ๋๋ฌธ์ ์ฌ์ค์ ๊ฒฐ์ ๋ ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ด๋ ต๋ค. ๋ํ Keyspace๋ table์ ๊ณผ๋ํ๊ฒ ์์ฑํ ๊ฒฝ์ฐ memory overflow๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ข ๋ฅ
Cassandra
HBase
Hypertable
RDBMS
์นผ๋ผ ํจ๋ฐ๋ฆฌ(Column Family) ๊ธฐ๋ณธ ๋ชจ๋ธ
์ ์ฐ์ฑ์ ์ ๊ทน ํ์ฉํด ์ ์ฌํ ์ปฌ๋ผ๋ฟ๋ง ์๋๋ผ, ์ปฌ๋ผ๋ช ์ด columns ์์ฑ์ ๋ฐ์ดํฐ๋ก ์ ์ฅ๋๊ณ , value์๋ ํด๋น ์ปฌ๋ผ์ ๊ฐ๋ง ์กด์ฌํ๋ค.
๊ด๊ณํ ๋ชจ๋ธ์์๋ ์๋ก์ด ์ปฌ๋ผ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํด์ผํ๊ณ , ํน์ํ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๋ ์๋ก ์ ์ฌํด์ผํ๋ค. Column-Family ๋ชจ๋ธ์ ์ ๊ท ๋ฐ์ดํฐ๋ฅผ ์์ ์ด๋ฏธ์ง ์ฒ๋ผ ์ ๋ ฅํ๊ธฐ๋ง ํ๋ฉด๋๋ค. ์ฆ, ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ผ๋ฉฐ, ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์์ ํ ํ์๋ ์๋ค.
Column Family DB๊ฐ ์ฌ์ฉํ๊ธฐ์ ๋ ์ ์ฐํ๋ค. ํ์ง๋ง ๋จ์ ์ ํ ํ ์ด๋ธ๊ณผ์ ์กฐ์ธ์ด ์๋๋ค๋ ์ ์ด๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต๋ ์ฅ์ ์ธ SQL ๋ฌธ์ผ๋ก ํ ํ ์ด๋ธ๊ณผ ์กฐ์ธํ์ฌ ๋ค์ํ ์ ๋ณด๋ฅผ ์ถ์ถํ ์ ์๋ค๋ ์ ์ธ ๋ฐ๋ฉด NoSQL DB๋ ์ด ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ ๊ฒ์ด ๋จ์ ์ด๋ค. ๊ทธ๋์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์กฐ์ธ์ด ํ์ํ ๋ฐ์ดํฐ๋ ํ๋์ ํ ์ด๋ธ์ ์ค๋ณต์ผ๋ก ๊ด๋ฆฌํด ์ฒ๋ฆฌ ์๋๋ฅผ ํฅ์ ์ํจ๋ค. ๋์ผํ ๋ฐ์ดํฐ๋ค์ด ์ฌ๋ฌ ํ ์ด๋ธ์ ์กด์ฌํ๊ฒ ๋๋๋ฐ ์ด๊ฒ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๊ฐ์ฅ ์ด๋ ค์ด ์ ์ด๊ณ ๊ฐ์ฅ ์ค์ํ ํน์ง์ด๋ค.
๊ทธ๋ํ ๋ชจ๋ธ์ ์งํฉ ์งํฅ ๋ชจ๋ธ๋ณด๋ค๋ ๊ด๊ณํ ๋ชจ๋ธ์ ๊ฐ๊น๋ค. ์ค์ ์ธ๊ณ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๊ณ์ ํจ๊ป ํํํ๊ธฐ ์ํด ๋์์ธ๋ ๋ชจ๋ธ๋ก์จ, ๋ฐ์ดํฐ๋ ์ฐ์์ ์ธ ๋ ธ๋, ๊ด๊ณ, ํน์ฑ์ ํํ๋ก ์ ์ฅ๋๋ค.
๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ๊ฐ ํ์์ ํค์ผ ๊ฒฝ์ฐ์ ์ ํฉํ๋ค. ์๋ฅผ ๋ค์ด, ํ์ด์ค๋ถ์ด๋ ํธ์ํฐ ๊ฐ์ ์์ ๋คํธ์ํฌ์์ ์ ํฉํ๊ณ , ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ฒํด์ฃผ๋ ์ถ์ฒ ์์ง์ด๋ ํจํด ์ธ์ ๋ฑ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ก๋ ์ ํฉํ๋ค. ๋ํ Aggregate-Oriendted ๋ชจ๋ธ๊ณผ๋ ๋ค๋ฅด๊ฒ ๊ฐ์ฒด์ ACID ํธ๋์ญ์ ์ ์ง์ํ๋ค.
๋ค๋ง, ๊ทธ๋ํ ๋ชจ๋ธ์ ํด๋ฌ์คํฐ๋ง์ ์ ํฉํ์ง ์์ผ๋ฉฐ, ์ง์์ด๋ ํนํ๋์ด ์์ด ์ด๋ ต๋ค.
Scale-up - ์๋ฒ ํ๋ ์ค์ฌ์ผ๋ก ํ์ฅ
Scale-out - ์ฌ๋ฌ๋์ ์๋ฒ๋ฅผ ์ค์ฌ์ผ๋ก ํ์ฅ
๋ฌด๊ฒฐ์ฑ
์ ์ฐ์ฑ
๋ฐ์ดํฐ ์ค๋ณต ์ ๊ฑฐ
๋ฐ์ดํฐ ์ค๋ณต ํ์ฉ
ํธ๋์ญ์
๋น ๋ฅธ ์ฐ๊ธฐ, ์ฝ๊ธฐ
Architecture
Wide Column Store
Document Store
Wide Column Store
Distributed System Consistency
Eventual and Immediate Consistency
Eventual and Immediate Consistency
Immediate Consistency
Owner and developer
Apache Software Foundation
MongoDB, Inc.
Apache Software Foundation
Replication
Masterless Ring
Master-Slave Replication
Master-Slave Replication
Base Code
Java
C++
Java
Popular Use Cases
Sensor Data, Messaging Systems, E-commerce Websites, Always-On Applications, Fraud Detection for Banks
Operational Intelligence, Product Data Management, Content Management Systems, IoT, Real-Time Analytics
Online Log Analytics, Hadoop, Write Heavy Applications, MapReduce