Note

[λ…μ„œλ…ΈνŠΈ] 데이터 쀑심 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계 - 7μž₯ νŠΈλžœμž­μ…˜

Tempo 2022. 5. 3. 19:50

이전에 λ…μ„œλ…ΈνŠΈ μž‘μ„± 방법을 ν¬μŠ€νŒ… ν•œ 적이 μžˆμŠ΅λ‹ˆλ‹€.

https://jongwho.tistory.com/17

 

[Youtube μ˜μƒ μš”μ•½] - λ…μ„œ λ©”λͺ¨λ²•

졜근 μ—„μ²­ λ‘κΊΌμš΄ μ±… 읽기에 λ„μ „ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 데이터 쀑심 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„€κ³„λΌλŠ” μ±…μΈλ°μš” http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791158390983&orderClick=LE..

jongwho.tistory.com

 

μœ„ λ©”λͺ¨λ²•μ„ λ°”νƒ•μœΌλ‘œ '데이터 쀑심 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계' 7μž₯ νŠΈλžœμž­μ…˜μ„ μš”μ•½ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

ν‚€μ›Œλ“œ μš”μ•½

μ•½ 2νŽ˜μ΄μ§€λ§ˆλ‹€ 읽은 λ‚΄μš©μ„ μš”μ•½ν•΄μ„œ ν‚€μ›Œλ“œλ‘œ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. νŽ˜μ΄μ§€μ˜ ꡬ뢄은 '/'둜 ν•˜κ² μŠ΅λ‹ˆλ‹€.
νŠΈλžœμž­μ…˜, μ•ˆμ „μ„± 보μž₯ / μ›μžμ„±, μ–΄λ³΄νŠΈ 보μž₯ / 일관성 λͺ¨ν˜Έ, 격리성 보μž₯X/ μ™„λ²½ν•œ 보μž₯ X, 단일 보μž₯-> 닀쀑 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜/갱신손싀보μž₯, 였λ₯˜ 쀑간저μž₯ κ°€λŠ₯/νŠΈλžœμž­μ…˜ 격리, 컀밋 ν›„ 읽기/1νŠΈλžœμž­μ…˜ 1컀밋, μ“΄ 것을 κΈ°μ–΅ μ“Έ 것을 κΈ°μ–΅/일관성 버그, μŠ€λƒ…μˆ 격리둜 ν•΄κ²°/ MVCC, μŠ€λƒ…μˆ κ·œμΉ™/ νŽ˜μ΄μ§€ λ‚΄ νšŒν”Όκ°±μ‹ , 반볡읽기 μš©μ–΄ 뢈λͺ…ν™•/ μ›μžμ  μ“°κΈ° μ—°μ‚°, λͺ…μ‹œμ  잠금 -> κ°±μ‹  손싀 방지/ Compare-and-set, LWW(μ΅œμ’… μ“°κΈ° 승리)/ μ“°κΈ° 슀큐, μ•½ν•œ 경쟁 But 문제!/ νŒ¬ν…€ 문제(검색 질의 μ‹œ λ³€κ²½), νŠΈλžœμž­μ…˜ λΆ„λ¦¬λ‘œ ν•΄κ²° λΆˆκ°€/ 좩돌 ꡬ체화(μ΅œν›„μ˜ μˆ˜λ‹¨), 직렬성 격리/ 직렬성 κ΅¬ν˜„ 간접적 -> λ ˆλ””μŠ€, μŠ€ν† μ–΄λ“œ ν”„λ‘œμ‹œμ Έ / 2단계 잠금, ꡐ착 μƒνƒœ 방지λ₯Ό μœ„ν•œ μ–΄λ³΄νŠΈ ν•˜μ§€λ§Œ μ„±λŠ₯ 떨어짐/Index-range Locking, λ²”μœ„ 쑰건을 λΆ™μ—¬ 잠금/직렬성 μŠ€λƒ…μˆ 격리, 낙관적 λ™μ‹œμ„± μ œμ–΄

λ‘κΊΌμš΄ μ±… 인만큼 ν‚€μ›Œλ“œλ„ λ§ŽμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ—°κ²°ν•΄μ„œ λ…ΈνŠΈλ‘œ λ§Œλ“€μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜μ€ μ•ˆμ „μ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•¨ ACID μž…μž₯μ—μ„œ λ³Έλ‹€λ©΄ μ›μžμ„±μ΄λž€ κ²°κ΅­ μ–΄λ³΄νŠΈ κΈ°λŠ₯을 보μž₯. 일관성은 λͺ¨ν˜Έν•˜λ©° 격리성은 보μž₯λœλ‹€κ³  ν•  수 μ—†μŒ
κ²°κ΅­ μ™„λ²½ν•œ 보μž₯μ΄λž€ μ—†μœΌλ©° 단일 보μž₯은 닀쀑 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— 적용. κ°±μ‹  μ‹œ 손싀에 λŒ€ν•œ 보μž₯이 μžˆμ–΄μ•Ό ν•˜λ©° 이λ₯Ό μœ„ν•΄ 였λ₯˜ 쀑간 μ €μž₯ κΈ°λŠ₯이 μžˆμ–΄μ•Ό ν•œλ‹€. νŠΈλžœμž­μ…˜ 격리둜 격리성을 보μž₯, κ·Έ 방법 쀑 ν•˜λ‚˜λ‘œ '컀밋 ν›„ 읽기'κ°€ 있음 1νŠΈλžœμž­μ…˜μ€ 1컀밋이라고 보면 됨. μ“Έ 것과 μ“΄ 것을 κΈ°μ–΅ν•˜μ—¬ 격리성을 보μž₯ν•œλ‹€. 일관성 보μž₯μ—μ„œ λ°œμƒν•˜λŠ” λ²„κ·ΈλŠ” μŠ€λƒ…μˆ 격리둜 ν•΄κ²° ν•  수 있음. MVCC(Multi-Version Concurrency Control, 닀쀑 버전 λ™μ‹œμ„± μ œμ–΄) 및 μŠ€λƒ…μˆ κ°€μ‹œμ„± μ œμ–΄ κ·œμΉ™μœΌλ‘œ μŠ€λƒ…μˆμ„ μ œκ³΅ν•¨
Postgresqlμ—μ„œλŠ” νŽ˜μ΄μ§€ λ‚΄ νšŒν”Ό κ°±μ‹ μœΌλ‘œ μŠ€λƒ…μˆ 격리λ₯Ό μ œκ³΅ν•¨. μŠ€λƒ…μˆ 격리의 λ˜λ‹€λ₯Έ 이름은 반볡 읽기(Postgresql
κ°±μ‹  손싀 방지λ₯Ό μœ„ν•΄ μ›μžμ  μ“°κΈ° μ—°μ‚°κ³Ό λͺ…μ‹œμ  μž κΈˆμ„ μ‚¬μš©ν•¨. Compare-and-set 방식 μ‚¬μš©ν•˜μ—¬ κ°±μ‹  손싀 방지 및 μ›μžμ  μ“°κΈ°λ₯Ό κ΅¬ν˜„. ν•˜μ§€λ§Œ κ²°κ΅­ LWW(μ΅œμ’… μ“°κΈ° 승리) μ›μΉ™μœΌλ‘œ λŒμ•„κ°
μ“°κΈ° μŠ€νλŠ” μ•½ν•œ κ²½μŸμ΄μ§€λ§Œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€. νŒ¬ν…€ λ¬Έμ œλ„ λ°œμƒμ΄ κ°€λŠ₯ν•œλ° μ΄λŠ” νŠΈλžœμž­μ…˜μ„ λΆ„λ¦¬ν•œλ‹€κ³  ν•΄κ²°λ˜λŠ” 것은 μ•„λ‹ˆλ‹€. 좩돌 ꡬ체화λ₯Ό μ΅œν›„μ˜ μˆ˜λ‹¨μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€. 또 λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ 직렬성을 κ²©λ¦¬ν•˜μ—¬ μ“°κΈ° 슀큐λ₯Ό 방지할 수 μžˆλ‹€. κ°„μ ‘μ μœΌλ‘œ κ΅¬ν˜„ν•œ 것은 Redis(CPUλ₯Ό 단일 μ‚¬μš©ν•˜μ—¬ 격리성 확보). μ§λ ¬μ„±μ˜ κ΅¬ν˜„μ€ μŠ€ν† μ–΄λ“œ ν”„λ‘œμ‹œμ Έλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ©° λ˜ν•œ 2단계 잠금 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œλ„ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€. ν•˜μ§€λ§Œ 2단계 잠금 μ•Œκ³ λ¦¬μ¦˜μ€ μ„±λŠ₯이 떨어진닀(ꡐ착 μƒνƒœκ°€ λ°œμƒν•˜λ©΄ 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 1개 νŠΈλžœμž­μ…˜μ„ μ–΄λ³΄νŠΈν•¨). λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ 색인 λ²”μœ„ 잠금(Index-range Locking)을 μ‚¬μš©ν•˜μ—¬ 잠금 ν•  수 μžˆλ‹€.
이와 λ°˜λŒ€λ‘œ '직렬섀 μŠ€λƒ…μˆ 격리' 방법을 μ‚¬μš©ν•˜μ—¬ μ„±λŠ₯κΉŒμ§€ 보μž₯ν•˜λŠ” 직렬성을 κ΅¬ν˜„ν•  수 μžˆλ‹€. 낙관적 λ™μ‹œμ„± μ œμ–΄λΌκ³ λ„ ν•œλ‹€.

 

 

μ •λ¦¬ν•œ λ…ΈνŠΈλ₯Ό 읽어보면 λ­”κ°€ 빠진 뢀뢄이 많고 연결이 λΆ€λ“œλŸ½κ²Œ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ œκ°€ ν‚€μ›Œλ“œλ₯Ό 적고 μ •λ¦¬ν•˜λ©΄μ„œ λŠλ‚€ 점은 λ‹¨μˆœ ν‚€μ›Œλ“œ λ³΄λ‹€λŠ” μ„€λͺ…이 μΆ”κ°€λœ 짧은 λ¬Έμž₯μ΄λ‚˜ λΆ€μ œλͺ© λ˜λŠ” 제λͺ©μ„ 적어 μ–΄λ–€ λ‚΄μš©μ— λŒ€ν•΄ μ μ—ˆλŠ”μ§€ 좔가적인 μ„€λͺ…이 ν•„μš”ν•  것 κ°™μŠ΅λ‹ˆλ‹€.

 

λ‹€μŒ 8μž₯을 μ½μœΌλ©΄μ„œ ν‚€μ›Œλ“œκ°€ μ•„λ‹Œ 짧은 λ¬Έμž₯ 및 제λͺ©μ΄λ‚˜ λΆ€μ œλͺ©(λΆ„λ₯˜)을 적어 쑰금 더 λ§€λ„λŸ½κ²Œ 정리 ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ°˜μ‘ν˜•

'Note' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Youtube μ˜μƒ μš”μ•½] - λ…μ„œ λ©”λͺ¨λ²•  (0) 2022.04.30