λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» DEV/Database

[Database] DB νŒ¨λŸ¬λ‹€μž„ (Paradigm) μ΄λž€?

by vodkassi 2021. 7. 8.
728x90

✨ DB νŒ¨λŸ¬λ‹€μž„μ˜ ν•„μš”μ„±

DB νŒ¨λŸ¬λ‹€μž„μ΄λž€ DB λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” λ°©λ²•μ„ μ˜λ―Έν•œλ‹€.  
각 νŒ¨λŸ¬λ‹€μž„λ§ˆλ‹€ 졜적의 μ‚¬μš© ν™˜κ²½κ³Ό 쑰건이 μ‘΄μž¬ν•œλ‹€.

 

μ°¨λ‘€λ‘œ μ—¬λŸ¬ DB νŒ¨λŸ¬λ‹€μž„μ„ μ†Œκ°œν•΄λ³Έλ‹€. 

 

✨ 1. Key-Value DB

DBMS: Redis, Memcached, Etcd λ“±

 

νŠΉμ§•:

  Javascript 의 object λ˜λŠ” python 의 dictionary 데이터 νƒ€μž…κ³Ό λΉ„μŠ·ν•˜λ‹€.
  μœ μΌν•œ key 값이 μ‘΄μž¬ν•˜λ©°, 각 key에 μƒμ‘ν•˜λŠ” value λ₯Ό 가진 데이터 ꡬ쑰이닀.

 
μž₯점:
  λŒ€λΆ€λΆ„μ˜ λ‹€λ₯Έ DB λŠ” λ””μŠ€ν¬μ— μ €μž₯λ˜μ§€λ§Œ, Key-Value DB λ©”λͺ¨λ¦¬μ— μ €μž₯λœλ‹€.

  λͺ¨λ“  μž‘μ—…λ§ˆλ‹€ λ””μŠ€ν¬μ— μ ‘κ·Όν•˜μ§€ μ•Šμ•„λ„ 되기 λ•Œλ¬Έμ— 속도가 ꡉμž₯히 λΉ λ₯΄λ‹€.


단점:
  μ €μž₯ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ μš©λŸ‰μ— ν•œκ³„κ°€ μžˆλ‹€. 
  쿼리λ₯Ό μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ†λ„λŠ” λΉ λ₯΄μ§€λ§Œ 데이터 λͺ¨λΈλ§μ˜ ν•œκ³„κ°€ μ‘΄μž¬ν•œλ‹€. 


μ‚¬μš© μΌ€μ΄μŠ€: μΊμ‹œ

 

key-value

 

✨ 2. Wide-Column DB

 

DBMS: Cassandra, Apache HBase λ“±

 

νŠΉμ§•:

  Key-value DB 에 차원을 ν•˜λ‚˜ 더 μΆ”κ°€ν•œ 것과 μœ μ‚¬ν•˜λ‹€. 
  Key ν•˜λ‚˜λ‹Ή ν•œ 개 μ΄μƒμ˜ column 을 λ³΄μœ ν•˜λ©°, column 에 맞좰 μ •λ ¬λœ μ—¬λŸ¬ 개의 행이 μ‘΄μž¬ν•œλ‹€. (μ΄λŠ” 관계가 μžˆλŠ” 데이터끼리 묢음 처리λ₯Ό ν•  수 μžˆλ„λ‘ ν•œλ‹€.)
  RDB μ™€λŠ” 달리 μŠ€ν‚€λ§ˆλ₯Ό μ μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ ꡬ쑰가 μ—†λŠ” λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ΄€λ¦¬ν•˜κΈ°μ— μš©μ΄ν•˜λ‹€.
  SQL κ³Ό μœ μ‚¬ν•œ CQL μ΄λΌλŠ” μ–Έμ–΄λ₯Ό ν™œμš©ν•œλ‹€.

 
μž₯점:
  μˆ˜ν‰μ  ν™•μž₯에 μš©μ΄ν•˜λ©°, λ°μ΄ν„° λ³΅μ œλ₯Ό κ°„νŽΈν•˜κ²Œ ν•  μˆ˜ μžˆλ‹€.


단점:
  CQL은 μ‘°μΈμ΄λ‚˜ λ³΅μž‘ν•œ μΏΌλ¦¬λ₯Ό μ‹€ν–‰ν•˜μ§€ λͺ»ν•œλ‹€. 


μ‚¬μš© μΌ€μ΄μŠ€: μ‹œκ³„μ—΄ 데이터 (λ„·ν”Œλ¦­μŠ€μ˜ μ‹œμ²­ 기둝 데이터), 데이터가 자주 μž…λ ₯λ˜μ§€λ§Œ μ½κ±°λ‚˜ μˆ˜μ •λ˜μ§€λŠ” μ•ŠλŠ” 경우

 

wide-column

✨ 3. Document Oriented DB

 

DBMS: MongoDB, Firestore, CouchDB λ“±


νŠΉμ§•:
  각 Document 별 key-value pair κ°€ μ‘΄μž¬ν•˜λ©°, 비ꡬ쑰적이고 μŠ€ν‚€λ§ˆλ₯Ό μš”κ΅¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

  Document 듀끼리 λ‹€μ‹œ ν•˜λ‚˜μ˜ collection 으둜 λ¬Άμ΄λŠ”λ°, collection κ°„ μ„œμ—΄ν™”κ°€ κ°€λŠ₯ν•˜λ‹€.
  쑰인을 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ‚˜, 데이터λ₯Ό λͺ¨μ•„ ν•˜λ‚˜μ˜ document 둜 λ³‘ν•©ν•¨μœΌλ‘œμ¨ κ΄€κ³„ν˜• 데이터λ₯Ό 일정 μˆ˜μ€€κΉŒμ§€ λ‹€λ£° 수 있게 λœλ‹€. 

 

μž₯점:
  데이터 좜λ ₯ (read) μ†λ„λŠ” RDBMS 보닀 λΉ λ₯΄λ‹€.
  객체지ν–₯적이기 λ•Œλ¬Έμ— 개발자 μΉœν™”μ μ΄λ‹€.

 

단점:

  데이터 μˆ˜μ • λ˜λŠ” μž…λ ₯은 λ³΅μž‘ν•˜κΈ° λ•Œλ¬Έμ— 속도가 λŠλ¦¬λ‹€. 

 

μ‚¬μš© μΌ€μ΄μŠ€:  iot, 컨텐츠 관리, λͺ¨λ°”일 κ²Œμž„

* SNS 와 같이 무수히 많으며 관계 섀정이 ν•„μš”ν•œ 데이터가 μ‘΄μž¬ν•  κ²½μš°μ— λΆ€μ ν•©ν•˜λ‹€. 

 

document

 

✨ 4. Relational DB

 

DMBS: MySQL, Postgres, SQL Server, CockroachDB λ“± 


νŠΉμ§•:
  κ°€μž₯ μ˜€λž˜λ˜μ—ˆμœΌλ©° 자주 μ‚¬μš©λ˜λŠ” DB 의 μœ ν˜• 쀑 ν•˜λ‚˜μ΄λ‹€. 
  SQL 을 ν™œμš©ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜κ³  좜λ ₯ν•œλ‹€. 
  ν…Œμ΄λΈ”μ˜ λ°μ΄λ³„λ‘œ primary key κ°€ λΆ€μ—¬λ˜λ©°, primary key듀을 ν™œμš©(쑰인)ν•˜μ—¬ ν…Œμ΄λΈ” κ°„μ˜ 관계 섀정을 ν•  수 μžˆλ‹€. 


μž₯점:
  λ³΅μž‘ν•œ 쿼리 μž‘μ—…μ΄ κ°€λŠ₯ν•˜λ‹€. 

 

단점:
  μŠ€ν‚€λ§ˆ(데이터와 κ΄€κ³„μ˜ ꡬ쑰)κ°€ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— ꡬ성에 였래 κ±Έλ¦°λ‹€.

 

μ‚¬μš© μΌ€μ΄μŠ€: 데이터 κ°„μ˜ 관계가 μ€‘μš”ν•œ μ„œλΉ„μŠ€

 

RDB

 

✨ 5. Graph DB

 

DBMS: Neo4j, DGraph, Janus Graph λ“±

 

νŠΉμ§•:
  데이터 μžμ²΄λŠ” λ…Έλ“œλ‘œ(정점) ν‘œν˜„λ˜λ©°, 데이터 κ°„μ˜ κ΄€κ³„λŠ” μ—£μ§€λ‘œ(κ°„μ„ ) ν‘œν˜„λœλ‹€. 
  Cypher λΌλŠ” μ–Έμ–΄λ₯Ό ν™œμš©ν•˜μ—¬ 쿼리λ₯Ό λ‚ λ¦°λ‹€. 

 

μž₯점:
  μ‘°μΈν…Œμ΄λΈ” 없이 엣지λ₯Ό ν™œμš©ν•˜μ—¬ 관계λ₯Ό μ„€μ •ν•˜κΈ° λ•Œλ¬Έμ— 쿼리문이 훨씬 간결해진닀. 

 

μ‚¬μš© μΌ€μ΄μŠ€:  쑰인의 λΉˆλ²ˆν•œ ν™œμš©μœΌλ‘œ 인해 μ„±λŠ₯이 μ €ν•˜λ  λ•Œ, μΆ”μ²œ 엔진 (에어비앀비 λ“±)

 

graph

✨ 6. Search Engine DB

 

DBMS: ElasticSearch, Algolia, MeiliSearch, Solr λ“±

 

νŠΉμ§•:
  μž…λ ₯값에 μ•Œλ§žκ²Œ κ±°λŒ€ν•œ db μ—μ„œ μœ μ‚¬ν•œ 값을 μ°Ύμ•„ 좜λ ₯ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ— ν™œμš©λœλ‹€.
  document 와 μœ μ‚¬ν•˜κ²Œ, ν•˜λ‚˜μ˜ μΈλ±μŠ€μ— 데이터 객체 μ—¬λŸ¬ 개λ₯Ό μΆ”κ°€ν•œλ‹€.
  documnet 와 달리, λ¬Έμ„œ λ‚΄μ˜ λͺ¨λ“  ν…μŠ€νŠΈμ— 인덱슀 값을 λΆ€μ—¬ν•˜μ—¬ 검색 κ°€λŠ₯ν•œ λ‹¨μ–΄μ˜ 인덱슀λ₯Ό λ§Œλ“ λ‹€.


μ‚¬μš© μΌ€μ΄μŠ€: Search Engine 

se

 

✨ 7. Multi-model DB

 

DMBS: FaunaDB, CosmosDB λ“±

 

νŠΉμ§•:
  μ„œλ²„λ¦¬μŠ€ DB 이며, GUI λ₯Ό ν™œμš©ν•˜μ—¬ document ν˜• 데이터에 μ ‘κ·Όν•  수 μžˆλ‹€. 

 

μž₯점:
  μ—¬λŸ¬ ν˜•νƒœμ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μœ μ—°ν•˜κ²Œ λ‹€λ£° 수 μžˆλ‹€.
  μ„œλ²„λ₯Ό λ¬΄ν•œνžˆ ν™•μž₯ κ°€λŠ₯ν•˜λ‹€.

 

✨ 마무리 

μ„œλΉ„μŠ€λ₯Ό ꡬ상할 λ•Œ ν•œ 가지 λ°μ΄ν„°λ² μ΄μŠ€ μœ ν˜•μ— κ°‡ν˜€μ„œ 생각할 것이 μ•„λ‹ˆλΌ, μ„œλΉ„μŠ€μ˜ νŠΉμˆ˜μ„±μ„ κ³ λ €ν•˜μ—¬ ν•„μš”ν•œ λ°μ΄ν„°λ² μ΄μŠ€ νŒ¨λŸ¬λ‹€μž„μ„ 잘 배우고 ν™œμš©ν•΄μ•Ό ν•œλ‹€. 그리고 λ°μ΄ν„°λ² μ΄μŠ€ νŒ¨λŸ¬λ‹€μž„μ€ 계속 λ³€ν•˜λ©° λ°œμ „ν•΄κ°„λ‹€. 특히 데이터 μ‹œλŒ€μ— μ ‘μ–΄λ“€μ—ˆμœΌλ‹ˆ DB 파트의 μ€‘μš”μ„±μ„ κ°•μ‘°ν•˜λ©° κ³΅λΆ€ν•΄λ‚˜κ°€λŠ” 것이 쒋을 것이닀. 

 

✨참고자료

λŒ“κΈ€