[DB] RDBMS vs NOSQL

ν—ŒμΉ˜Β·2022λ…„ 10μ›” 12일
0

DB

λͺ©λ‘ 보기
1/1
post-thumbnail

1. κ°œλ… 정리

πŸ€” Database

컴퓨터 μ‹œμŠ€ν…œμ— μ „μž λ°©μ‹μœΌλ‘œ μ €μž₯된 κ΅¬μ‘°ν™”λœ 정보 λ˜λŠ” λ°μ΄ν„°μ˜ 체계적인 집합

πŸ€” DBMS(DataBase Management System)

λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ •μ˜, 생성, μœ μ§€ν•˜λŠ” ν”„λ‘œκ·Έλž¨λ“€μ˜ 집합

πŸ€” RDB(Relational DataBase)

ν…Œμ΄λΈ”, ν–‰, μ—΄μ˜ 정보λ₯Ό 2차원 ν…Œμ΄λΈ” ν˜•νƒœλ‘œ κ΅¬μ‘°ν™”ν•˜λŠ” 방식.

  • ν…Œμ΄λΈ”μ„ Joinν•΄ 정보 κ°„ 관계 λ˜λŠ” 링크λ₯Ό μ„€μ •ν•  수 μžˆλŠ” κΈ°λŠ₯이 μžˆλ‹€. μ—¬λŸ¬ 데이터 포인트 κ°„μ˜ 관계λ₯Ό μ‰½κ²Œ μ΄ν•΄ν•˜κ³  정보λ₯Ό 얻을 수 μžˆλ‹€.
  • λΉ„μ¦ˆλ‹ˆμŠ€μ—μ„œ 데이터λ₯Ό ꡬ성, 관리, μ—°κ²°ν•˜λŠ” 데 도움이 λ˜λŠ” μŠ€ν”„λ ˆλ“œμ‹œνŠΈ 파일 λͺ¨μŒμ΄λΌκ³  μƒκ°ν•˜λ©΄ λœλ‹€.

πŸ€” SQL(Strucured Query Language)

RDBMS의 데이터λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ„€κ³„λœ 특수 λͺ©μ  ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄.

RDBMSμ—μ„œ

  • 자료의 검색과 관리,
  • λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ 생성과 μˆ˜μ •,
  • λ°μ΄ν„°λ² μ΄μŠ€ 객체 μ ‘κ·Ό μ‘°μ • 관리

λ₯Ό μœ„ν•΄ κ³ μ•ˆλ˜μ—ˆλ‹€.

πŸ€” 관계(R)(Relational)

ν…Œμ΄λΈ” κ°„μ˜ μƒν˜Έμž‘μš©μ„ 기반으둜 μ„€μ •λ˜λŠ” μ—¬λŸ¬ ν…Œμ΄λΈ” κ°„μ˜ 논리적 μ—°κ²°

2. RDBMS πŸ’Ύ

R+ DBMS : κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œ

SQL에 μ˜ν•΄ μ €μž₯되고 있으며 정해진 μŠ€ν‚€λ§ˆμ— 따라 데이터λ₯Ό μ €μž₯ν•΄μ•Ό ν•œλ‹€.

  • ν…Œμ΄λΈ”μ΄ λ‹€λ₯Έ ν…Œμ΄λΈ”λ“€κ³Ό 관계λ₯Ό λ§Ίκ³  λͺ¨μ—¬μžˆλŠ” μ§‘ν•©μ²΄λ‘œ 이해할 수 μžˆλ‹€.
  • μ΄λŸ¬ν•œ 관계λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ μ™Έλž˜ ν‚€(foreign key)λΌλŠ” 것을 μ‚¬μš©ν•œλ‹€.
  • μ™Έλž˜ ν‚€λ₯Ό μ΄μš©ν•œ ν…Œμ΄λΈ” κ°„ Join이 κ°€λŠ₯ν•˜λ‹€.

μ˜ˆμ‹œ

MySQL, PostgreSQL λ“±

πŸ‘ μž₯점

데이터 일관성을 지킬 수 μžˆλ‹€!

  • 정해진 μŠ€ν‚€λ§ˆμ— 따라 데이터λ₯Ό μ €μž₯ν•˜μ—¬μ•Ό ν•˜λ―€λ‘œ λͺ…ν™•ν•œ 데이터 ꡬ쑰λ₯Ό 보μž₯ν•˜κ³  μžˆλ‹€.
  • 각 데이터λ₯Ό 쀑볡없이 ν•œ 번만 μ €μž₯ν•  수 μžˆλ‹€.

πŸ‘Ž 단점

  • μ‹œμŠ€ν…œμ΄ 컀질 경우 JOIN문이 λ§Žμ€ λ³΅μž‘ν•œ 쿼리가 λ§Œλ“€μ–΄μ§ˆ 수 μžˆλ‹€.
  • μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄μ„œλŠ” μž₯λΉ„κ°€ μ’‹μ•„μ•Ό ν•œλ‹€. (Scale-Up : μ„œλ²„ κ·Έ 자체λ₯Ό μ—…κ·Έλ ˆμ΄λ“œ 함) λΉ„μš©μ΄ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ¦κ°€ν•œλ‹€.
  • μŠ€ν‚€λ§ˆ λ•Œλ¬Έμ— μœ μ—°ν•œ 데이터 관리가 μ–΄λ ΅λ‹€. μŠ€ν‚€λ§ˆκ°€ 변경될 μ‹œ λ²ˆκ±°λ‘­λ‹€.

3. NoSQL(Not Only SQL) πŸ’Ύ

μœ„μ—μ„œ μ„€λͺ…ν•œ RDBMSκ°€ μ•„λ‹Œ, λ‹€λ₯Έ ν˜•νƒœμ˜ 데이터 μ €μž₯ κΈ°μˆ μ„ μ˜λ―Έν•œλ‹€.

  • RDBMSμ™€λŠ” 달리 ν…Œμ΄λΈ” κ°„ 관계λ₯Ό μ •μ˜ν•˜μ§€ μ•ŠλŠ”λ‹€!
  • 데이터 ν…Œμ΄λΈ”μ€ κ·Έλƒ₯ ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”μΌ 뿐이닀.
  • ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό μ •μ˜ν•˜μ§€ μ•Šμ•„ 일반적으둜 ν…Œμ΄λΈ” κ°„ Join도 λΆˆκ°€λŠ₯ν•˜λ‹€.

μ˜ˆμ‹œ

MongoDB, Redis λ“±

πŸš€ μ‚¬μš© λͺ©μ 

빅데이터가 λ“±μž₯ν•˜λ©΄μ„œ, 점점 데이터와 νŠΈλž˜ν”½μ΄ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ¦κ°€ν•˜λŠ” μƒν™©μ—μ„œ κ³ μ•ˆλ˜μ—ˆλ‹€.

πŸ‘ μž₯점

μœ μ—°μ„±

  • μŠ€ν‚€λ§ˆκ°€ μ—†μ–΄ μœ μ—°ν•˜κ³  자유둜운 데이터 ꡬ쑰λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€. μ–Έμ œλ“  μ €μž₯된 데이터λ₯Ό μ‘°μ •ν•˜κ³  μƒˆλ‘œμš΄ ν•„λ“œλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.
  • 데이터 뢄산이 μš©μ΄ν•˜λ‹€. μˆ˜ν‰μ  ν™•μž₯(Scale-Out : μ„œλ²„ 개수λ₯Ό 늘림)을 μ‰½κ²Œ ν•  수 μžˆλ‹€. λ”°λΌμ„œ λΉ„μš©μ΄ 적게 λ“ λ‹€.

πŸ‘Ž 단점

데이터 일관성이 μ§€μΌœμ§€μ§€ μ•ŠλŠ”λ‹€.

  • 데이터 쀑볡이 λ°œμƒν•˜κ³ , ν•΄λ‹Ή 데이터가 λ³€κ²½λ μ‹œ λͺ¨λ“  μ»¬λ ‰μ…˜μ—μ„œ μˆ˜μ •ν•΄μ•Ό ν•œλ‹€.
  • μŠ€ν‚€λ§ˆκ°€ μ—†μœΌλ‹ˆ λͺ…ν™•ν•œ 데이터 ꡬ쑰λ₯Ό 보μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€. 데이터 ꡬ쑰 κ²°μ • μžμ²΄κ°€ μ–΄λ ΅λ‹€.

🧷 μ’…λ₯˜

Key-Value Database

  • Redis, Riak, Amazon Dynamo DB 등이 μžˆλ‹€.

데이터가 Key와 Value의 쌍으둜 μ €μž₯λœλ‹€.

  • KeyλŠ” Value에 μ ‘κ·Όν•˜κΈ° μœ„ν•œ μš©λ„λ‘œ μ‚¬μš©λ˜λ©°, 값은 μ–΄λ– ν•œ ν˜•νƒœμ˜ 데이터라도 담을 수 μžˆλ‹€. μ‹¬μ§€μ–΄λŠ” μ΄λ―Έμ§€λ‚˜ λΉ„λ””μ˜€λ„ κ°€λŠ₯ν•˜λ‹€.
  • 검색에 μ΅œμ ν™”λ˜μ–΄ μžˆλ‹€. 질의의 속도가 맀우 λΉ λ₯΄λ‹€.

Document Database

  • MongoDB, CouchDB 등이 μžˆλ‹€.

데이터가 Key와 Document의 ν˜•νƒœλ‘œ μ €μž₯λœλ‹€.

  • Key-Value λͺ¨λΈκ³Ό 달리 Valueκ°€ 계측적인 ν˜•νƒœμΈ Document둜 μ €μž₯λœλ‹€. 객체지ν–₯μ—μ„œμ˜ 객체와 μœ μ‚¬ν•˜λ©°, 이듀은 ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ μ·¨κΈ‰λ˜μ–΄ μ €μž₯λœλ‹€. 즉, ν•˜λ‚˜μ˜ 객체λ₯Ό μ—¬λŸ¬ 개의
    ν…Œμ΄λΈ”μ— λ‚˜λˆ  μ €μž₯ν•  ν•„μš”κ°€ 없어진닀.
  • 객체-관계 맀핑이 ν•„μš”ν•˜μ§€ μ•Šλ‹€. 객체λ₯Ό Document의 ν˜•νƒœλ‘œ λ°”λ‘œ μ €μž₯ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • 검색에 μ΅œμ ν™”λ˜μ–΄ μžˆλ‹€. Key-Value λͺ¨λΈμ˜ νŠΉμ§•κ³Ό λ™μΌν•˜λ‹€.

단점

  • μ‚¬μš©μ΄ 번거둭고 쿼리가 SQLκ³ΌλŠ” λ‹€λ₯΄λ‹€.
  • λ„νλ¨ΌνŠΈ λͺ¨λΈμ—μ„œλŠ” 질의의 κ²°κ³Όκ°€ JSONμ΄λ‚˜ xml ν˜•νƒœλ‘œ 좜λ ₯되기 λ•Œλ¬Έμ— κ·Έ μ‚¬μš© 방법이 RDBMSμ—μ„œμ˜ 질의 κ²°κ³Όλ₯Ό μ‚¬μš©ν•˜λŠ” 방법과 λ‹€λ₯΄λ‹€.

Wide Column Database

  • HBase, Hypertable 등이 μžˆλ‹€.

Column-family Model 기반의 Database.

  • νŠΉμ΄ν•˜κ²Œλ„ 이 λͺ¨λΈμ€ ν‚€μ—μ„œ ν•„λ“œλ₯Ό κ²°μ •ν•œλ‹€.
  • ν‚€λŠ” Row(ν‚€ κ°’)와 Column-family, Column-name을 가진닀. μ—°κ΄€λœ 데이터듀은 같은 Column-family μ•ˆμ— 속해 있으며, 각자의 Column-name을 가진닀.
    κ΄€κ³„ν˜• λͺ¨λΈλ‘œ μ„€λͺ…ν•˜μžλ©΄ 속성이 계측적인 ꡬ쑰λ₯Ό 가지고 μžˆλŠ” μ…ˆμ΄λ‹€.
  • μ €μž₯된 λ°μ΄ν„°λŠ” ν•˜λ‚˜μ˜ μ»€λ‹€λž€ ν…Œμ΄λΈ”λ‘œ ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ©°, μ§ˆμ˜λŠ” Row, Column-family, Column-name을 톡해 μˆ˜ν–‰λœλ‹€.

Graph Database

  • Neo4J 등이 μžˆλ‹€.

데이터λ₯Ό Node와 Edge, Property와 ν•¨κ»˜ κ·Έλž˜ν”„ ꡬ쑰λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό ν‘œν˜„ν•˜κ³  μ €μž₯ν•˜λŠ” Database.

  • κ°œμ²΄μ™€ 관계λ₯Ό κ·Έλž˜ν”„ ν˜•νƒœλ‘œ ν‘œν˜„ν•œ κ²ƒμ΄λ―€λ‘œ κ΄€κ³„ν˜• λͺ¨λΈμ΄λΌκ³  ν•  수 μžˆλ‹€.
  • 데이터 κ°„μ˜ 관계가 νƒμƒ‰μ˜ 킀일 κ²½μš°μ— μ ν•©ν•˜λ‹€.
  • νŽ˜μ΄μŠ€λΆμ΄λ‚˜ νŠΈμœ„ν„° 같은 μ†Œμ…œ λ„€νŠΈμ›Œν¬μ—μ„œ(λ‚΄ 친ꡬ의 친ꡬλ₯Ό μ°ΎλŠ” 질의 λ“±) μ ν•©ν•˜κ³ , μ—°κ΄€λœ 데이터λ₯Ό μΆ”μ²œν•΄μ£ΌλŠ” μΆ”μ²œ μ—”μ§„μ΄λ‚˜ νŒ¨ν„΄ 인식 λ“±μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ‘œλ„ μ ν•©ν•˜λ‹€.

4. μ–Έμ œ 쓰지? 🧐

πŸ’Ύ RDBMS

  • 데이터 ꡬ쑰가 λͺ…ν™•ν•˜λ©° λ³€κ²½ 될 여지가 μ—†μœΌλ©° λͺ…ν™•ν•œ μŠ€ν‚€λ§ˆκ°€ μ€‘μš”ν•œ 경우 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.
  • λ˜ν•œ μ€‘λ³΅λœ 데이터가 μ—†μ–΄(데이터 무결성) 변경이 μš©μ΄ν•˜κΈ° λ•Œλ¬Έμ— 관계λ₯Ό λ§Ίκ³  μžˆλŠ” 데이터가 자주 변경이 μ΄λ£¨μ–΄μ§€λŠ” μ‹œμŠ€ν…œμ— μ ν•©ν•˜λ‹€.

πŸ’Ύ NoSQL

  • μ •ν™•ν•œ 데이터 ꡬ쑰λ₯Ό μ•Œ 수 μ—†κ³  데이터가 λ³€κ²½/ν™•μž₯이 될 수 μžˆλŠ” κ²½μš°μ— μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.
  • μˆ˜μ •μ΄ λ³„λ‘œ μ—†λŠ” μ‹œμŠ€ν…œμ΄ μ’‹λ‹€. 데이터 쀑볡이 λ°œμƒν•  수 있으며 μ€‘λ³΅λœ 데이터가 변경될 μ‹œμ—λŠ” λͺ¨λ“  μ»¬λ ‰μ…˜μ—μ„œ μˆ˜μ •μ„ ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • Scale-out이 κ°€λŠ₯ν•˜λ―€λ‘œ λ§‰λŒ€ν•œ 데이터λ₯Ό μ €μž₯ν•΄μ•Ό ν•˜λŠ” μ‹œμŠ€ν…œμ— μ ν•©ν•˜λ‹€.

참고자료

https://tecoble.techcourse.co.kr/post/2021-10-12-scale-up-scale-out/

https://cloud.google.com/learn/what-is-a-relational-database?hl=ko#:~:text=κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œ

https://khj93.tistory.com/entry/Database-RDBMS와-NOSQL-차이점

profile
🌱 ν•¨κ»˜ μžλΌλŠ” μ€‘μž…λ‹ˆλ‹€ πŸš€ rerub0831@gmail.com

0개의 λŒ“κΈ€