Search
⌨️

νŒŒν‹°μ…”λ‹ 샀딩

β€’
νŠΈλžœμž­μ…˜ 둀백이 μ μš©λ˜μ–΄ UserServiceTest 클래슀의 testTransactionRollback() ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ ν†΅κ³Όν•œλ‹€.
β€’
νŠΈλžœμž­μ…˜ μ„œλΉ„μŠ€μ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλΉ„μŠ€κ°€ λΆ„λ¦¬λ˜μ—ˆλ‹€.
β€’
νŒŒν‹°μ…”λ‹μ„ ν•  λ•Œ λ‚˜λˆ„λŠ” 방법은 μ—¬λŸ¬κ°€μ§€μ΄λ‹€.
β—¦
μ§€μ—­/기수/ν•΄μ‹±
β€’
λ‘˜μ˜ μ„±λŠ₯차이
β—¦
select * from fruit where fruit_name=’ap%’;
β—¦
select fruit_name from fruit where fruit_name=’ap%’;

νŒŒν‹°μ…”λ‹ (Partitioning)

β—¦
μ •μ˜:
ν•˜λ‚˜μ˜ λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ 큰 ν…Œμ΄λΈ”μ΄λ‚˜ 데이터λ₯Ό μ—¬λŸ¬ μž‘μ€ λ‹¨μœ„(νŒŒν‹°μ…˜)둜 λΆ„ν• ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
β—¦
νŠΉμ§•:
β–ͺ
논리적/물리적 λΆ„ν• :
같은 μ„œλ²„λ‚˜ λ°μ΄ν„°λ² μ΄μŠ€ μΈμŠ€ν„΄μŠ€ λ‚΄μ—μ„œ 데이터λ₯Ό λΆ„ν• ν•˜μ—¬ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
β–ͺ
관리 νš¨μœ¨μ„±:
데이터 λ°±μ—…, 인덱슀 생성, 쿼리 μ΅œμ ν™” λ“± 관리 μΈ‘λ©΄μ—μ„œ μœ λ¦¬ν•©λ‹ˆλ‹€.
β–ͺ
μ˜ˆμ‹œ:
λ‚ μ§œ, λ²”μœ„, ν•΄μ‹œκ°’ 등에 따라 ν…Œμ΄λΈ”μ„ μ—¬λŸ¬ νŒŒν‹°μ…˜μœΌλ‘œ λ‚˜λˆ„λŠ” 경우.

샀딩 (Sharding)

β—¦
μ •μ˜:
λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ—¬λŸ¬ μ„œλ²„(ν˜Ήμ€ λ…Έλ“œ)에 λΆ„μ‚°ν•˜μ—¬ μ €μž₯ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. 즉, νŒŒν‹°μ…”λ‹μ˜ ν•œ ν˜•νƒœλ‘œ λ³Ό 수 μžˆμ§€λ§Œ, λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œ 주둜 μ‚¬μš©λ©λ‹ˆλ‹€.
β—¦
νŠΉμ§•:
β–ͺ
λΆ„μ‚° μ €μž₯:
데이터가 μ—¬λŸ¬ 물리적 μ„œλ²„μ— 걸쳐 μ €μž₯λ˜λ―€λ‘œ, 단일 μ„œλ²„μ˜ μ„±λŠ₯ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κ³  μˆ˜ν‰μ  ν™•μž₯이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
β–ͺ
독립적인 관리:
각 μƒ€λ“œλŠ” 독립적인 λ°μ΄ν„°λ² μ΄μŠ€ μΈμŠ€ν„΄μŠ€λ‘œ μš΄μ˜λ˜μ–΄ μž₯μ•  격리, λΆ€ν•˜ λΆ„μ‚° λ“± λΆ„μ‚° 처리의 이점을 μ œκ³΅ν•©λ‹ˆλ‹€.
β–ͺ
μ˜ˆμ‹œ:
λŒ€κ·œλͺ¨ μ‚¬μš©μž 기반의 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ, μ‚¬μš©μžμ˜ IDλ‚˜ μ§€μ—­ 등을 κΈ°μ€€μœΌλ‘œ 데이터λ₯Ό μ—¬λŸ¬ μ„œλ²„μ— λΆ„μ‚° μ €μž₯ν•˜λŠ” 경우.

μš”μ•½

β—¦
νŒŒν‹°μ…”λ‹:
단일 λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ 데이터λ₯Ό μ—¬λŸ¬ νŒŒν‹°μ…˜μœΌλ‘œ λ‚˜λˆ„μ–΄ κ΄€λ¦¬ν•˜λŠ” 기법. 주둜 관리 νš¨μœ¨μ„±μ΄λ‚˜ μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ μ‚¬μš©λ¨.
β—¦
샀딩:
μ—¬λŸ¬ μ„œλ²„μ— 데이터λ₯Ό λΆ„μ‚° μ €μž₯ν•˜μ—¬, μ‹œμŠ€ν…œμ˜ μˆ˜ν‰μ  ν™•μž₯κ³Ό λΆ€ν•˜ 뢄산을 λ‹¬μ„±ν•˜κΈ° μœ„ν•œ 기법.
이처럼 νŒŒν‹°μ…”λ‹μ€ 같은 μ‹œμŠ€ν…œ λ‚΄μ˜ 데이터 뢄할을 μ˜λ―Έν•˜λ©°, 샀딩은 λΆ„μ‚° μ‹œμŠ€ν…œ ν™˜κ²½μ—μ„œ 데이터λ₯Ό μ—¬λŸ¬ μ„œλ²„μ— λ‚˜λˆ„μ–΄ μ €μž₯ν•˜λŠ” ν˜•νƒœλ‘œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λ…Έλ“œ λΆ„μ‚°

"λ…Έλ“œλ₯Ό λΆ„μ‚°ν•œλ‹€"λŠ” 말은 λ°μ΄ν„°λ‚˜ μž‘μ—…μ„ ν•˜λ‚˜μ˜ 쀑앙 μ„œλ²„μ— μ§‘μ€‘μ‹œν‚€μ§€ μ•Šκ³ , μ—¬λŸ¬ 개의 독립적인 μ„œλ²„(λ…Έλ“œ)둜 λ‚˜λˆ„μ–΄ μ €μž₯ν•˜κ±°λ‚˜ μ²˜λ¦¬ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. ꡬ체적으둜:
β€’
μ—¬λŸ¬ μ„œλ²„μ— 데이터 λΆ„μ‚°:
예λ₯Ό λ“€μ–΄, λŒ€μš©λŸ‰ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό ν•˜λ‚˜μ˜ μ„œλ²„μ— λͺ¨λ‘ μ €μž₯ν•˜λŠ” λŒ€μ‹ , 데이터λ₯Ό μ—¬λŸ¬ μ„œλ²„(λ…Έλ“œ)에 λΆ„μ‚°ν•˜μ—¬ μ €μž₯ν•¨μœΌλ‘œμ¨ ν•œ μ„œλ²„μ— λΆ€ν•˜κ°€ μ§‘μ€‘λ˜μ§€ μ•Šκ²Œ ν•©λ‹ˆλ‹€.
β€’
μˆ˜ν‰μ  ν™•μž₯:
λ…Έλ“œλ₯Ό λΆ„μ‚°ν•¨μœΌλ‘œμ¨ ν•„μš”μ— 따라 μ„œλ²„λ₯Ό μΆ”κ°€(μŠ€μΌ€μΌ 아웃)ν•˜μ—¬ 전체 μ‹œμŠ€ν…œμ˜ μ„±λŠ₯을 높일 수 μžˆμŠ΅λ‹ˆλ‹€. ν•œ μ„œλ²„μ— λ¬Έμ œκ°€ 생겨도 λ‹€λ₯Έ μ„œλ²„κ°€ 계속 μž‘λ™ν•˜λ―€λ‘œ μž₯애에 κ°•ν•œ μ‹œμŠ€ν…œμ„ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.
β€’
λΆ€ν•˜ λΆ„μ‚°:
μ‚¬μš©μž μš”μ²­μ΄λ‚˜ μž‘μ—…μ„ μ—¬λŸ¬ λ…Έλ“œμ— λΆ„μ‚°μ‹œμΌœ μ²˜λ¦¬ν•˜λ©΄, 각 λ…Έλ“œμ— κ±Έλ¦¬λŠ” λΆ€ν•˜κ°€ 쀄어듀어 응닡 속도와 μ•ˆμ •μ„±μ΄ κ°œμ„ λ©λ‹ˆλ‹€.
즉, "λ…Έλ“œλ₯Ό λΆ„μ‚°ν•œλ‹€"λŠ” 것은 μ‹œμŠ€ν…œμ„ μ—¬λŸ¬ μ„œλ²„μ— λ‚˜λˆ„μ–΄ λΆ„μ‚°μ‹œμΌœ, μ„±λŠ₯ ν–₯상, ν™•μž₯μ„±, 그리고 μž₯μ•  λŒ€μ‘λ ₯을 λ†’μ΄λŠ” λΆ„μ‚° μ‹œμŠ€ν…œμ˜ κΈ°λ³Έ κ°œλ…μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

질문 λͺ©λ‘

β€’
그러면 μ € ν…Œμ΄λΈ”μ— λŒ€ν•œ λͺ¨λ“  μ‘°νšŒλ§ˆλ‹€ νŒŒν‹°μ…˜ 기쀀이 κΌ­ λ“€μ–΄κ°€μ•Όκ² λ„€μš”? 또 νŒŒν‹°μ…˜μ΄ λ„ˆλ¬΄ λ§Žμ•„μ§ˆ κ²½μš°μ—λŠ” μ–΄λ–»κ²Œ λ˜λ‚˜μš”??
β€’
νŒŒν‹°μ…”λ‹ 기쀀에 따라 일뢀 μΏΌλ¦¬λŠ” 쑰회 μ„±λŠ₯이 였히렀 μ €ν•˜λ  μˆ˜λ„ μžˆμœΌλ €λ‚˜μš”?
β€’
μƒ€λ”©μ˜ 기쀀은 μ–΄λ–»κ²Œ μž‘λ‚˜μš”? 샀딩을 톡해 μ—¬λŸ¬ μ„œλ²„λ‘œ DBλ₯Ό λΆ„ν• ν•˜λ©΄ μ‚¬μš©μžκ°€ 샀딩 기쀀에 따라 Datasourceλ₯Ό μ •ν•΄μ€˜μ•Όν•˜λ‚˜μš”?
β€’
샀딩을 μ§„ν–‰ν•˜λ©΄ db μ„œλ²„λ₯Ό λΆ„λ¦¬ν•˜λŠ”κ±΄λ° νŠΈλžœμž­μ…˜ κ΄€λ¦¬λŠ” λ”°λ‘œ μ§„ν–‰ν•΄μ£Όμ–΄μ•Όν•˜λŠ”κ±΄κ°€μš”?
β€’
λ ˆμΈμ§€ νŒŒν‹°μ…”λ‹ != μƒ€λ”©μΈκ±΄κ°€μš”??,,
β€’
DB λŠ” κ²°κ΅­ ν•˜λ‚˜μ˜ 파일둜 κ΄€λ¦¬ν•œλ‹€.

νŽ˜μ΄μ§• 처리

β€’
offset
β—¦
μŠ€ν‚΅ν•œλ‹€ 라고 ν‘œν˜„
β—¦
limit 을 μΉ΄μš΄νŠΈν•΄μ•Ό ν•œλ‹€(λ‹€ 읽음).
β€’
cursor
β—¦
where μ ˆμ„ λ¨Όμ € 읽기 λ•Œλ¬Έμ— 데이터가 λ§Žμ•„μ‘Œμ„ λ•Œ μœ λ¦¬ν•˜λ‹€
β—¦
단점은??
μ„œλ²„ μΊμ‹œ, 검색 μ—”μ§„, λ©”μ‹œμ§€ 큐

μš”κ΅¬μ‚¬ν•­ 힌트

β€’
20κ°œλŠ” cache λ₯Ό μ΄μš©ν•œλ‹€.
β€’
검색 엔진을 μ΄μš©ν•œλ‹€.
β€’
μƒν’ˆ 정보가 λ³€κ²½λ˜μ—ˆμ„ λ•Œ
β—¦
write ν•œ λ’€
β–ͺ
λ©”μ‹œμ§€ 큐
β–ͺ
μΊμ‹œμ— λ°”λ‘œ write
κ³ λ―Όν•  λΆ€λΆ„
β€’
μ„œλΉ„μŠ€ 데이터 νŠΉμ„±
β€’
μ„œλΉ„μŠ€μ—μ„œ νŠΉλ³„νžˆ κ³ λ €ν•΄μ•Ό ν•  μ€‘μš” κΈ°λŠ₯
β€’
κ°œμ„ ν•œ 인프라 μ•„ν‚€ν…μ²˜μ—μ„œ λ°œμƒν•  수 μžˆμ„ κ²ƒμœΌλ‘œ μ˜ˆμƒλ˜λŠ” 문제
β€’
λ¬Έμ œμ— λŒ€ν•œ ν•΄κ²° λ°©μ•ˆ 아이디어
β€’
규λͺ¨ ν™•μž₯μ„±(scalability)
β€’
μ„±λŠ₯(performance)