Sharding, Partitioning

λ°μ΄ν„°λ² μ΄μŠ€μ˜ λ³Όλ₯¨μ΄ 컀질수둝 RW μ‹œ μ„±λŠ₯은 κ°μ†Œν•  것이고, 병λͺ©μ§€μ μ΄ 될 ν™•λ₯ μ΄ λ†’λ‹€.

λ”°λΌμ„œ 이λ₯Ό μ μ ˆν•˜κ²Œ λΆ„ν•  μ €μž₯ν•  ν•„μš”κ°€ μžˆλŠ”λ°, 샀딩과 νŒŒν‹°μ…”λ‹μ€ κ·Έ 방법쀑 ν•˜λ‚˜μ΄λ‹€.

λ‘˜μ˜ κ°œλ…κ³Ό κ·Έ 차이점에 λŒ€ν•΄μ„œ μ•Œμ•„λ³Όν…λ°, μš°μ„  기본적으둜 Horizontal κ³Ό Vertical 에 λŒ€ν•΄μ„œ 짚고 λ„˜μ–΄κ°€μž.

Horizontal vs Vertical

  • Horizontal: λ ˆμ½”λ“œλ³„λ‘œ λΆ„λ¦¬ν•˜λŠ” μˆ˜ν‰ 뢄할을 λœ»ν•œλ‹€. μŠ€ν‚€λ§ˆ 볡제 ν›„ μ‚¬μš©μžκ°€ μ§€μ •ν•œ κΈ°μ€€μœΌλ‘œ λΆ„λ¦¬ν•œλ‹€.

  • Vertical: μŠ€ν‚€λ§ˆλ₯Ό λ‚˜λˆ„κ³  μŠ€ν‚€λ§ˆμ— 따라 데이터가 λΆ„μ‚°λ˜λŠ” 것을 λœ»ν•œλ‹€. 뢄할이 μ‰½μ§€λ§Œ, 변경이 μΌμ–΄λ‚˜λŠ” 경우 μΆ”κ°€ 정렬이 ν•„μš”ν•  수 μžˆλ‹€.

Partitioning

νŒŒν‹°μ…”λ‹μ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 뢄할을 λ‚˜νƒ€λ‚΄λŠ” μš©μ–΄μ΄λ‚˜ μΌλ°˜μ μœΌλ‘œλŠ” ν…Œμ΄λΈ”μ„ μ—¬λŸ¬ ν•˜μœ„ μ§‘ν•©μœΌλ‘œ λΆ„λ¦¬ν•˜λŠ” 것을 λ§ν•œλ‹€.

Vertical Paritioning(수직 νŒŒν‹°μ…”λ‹)

ν•˜λ‚˜μ˜ ν…Œμ΄λΈ” λ‚΄μ—μ„œ μ»¬λŸΌμ„ κΈ°μ€€μœΌλ‘œ λΆ„λ¦¬ν•˜λŠ” 것을 λ§ν•œλ‹€.

ν•œ ν…Œμ΄λΈ”μ— 맀우 큰 데이터λ₯Ό ν¬ν•¨ν•˜λŠ” 컬럼이 μžˆκ±°λ‚˜ λ„ˆλ¬΄ λ§Žμ€ 컬럼이 μ‘΄μž¬ν•˜λŠ” 경우 ν…Œμ΄λΈ”μ— μ ‘κ·Όν•˜λŠ” λΉ„μš©μ΄ 맀우 컀진닀.

μ΄λŸ΄λ•Œ 수직 νŒŒν‹°μ…”λ‹μ„ 톡해 자주 μ ‘κ·Όν•˜λŠ” μ»¬λŸΌμ„ κΈ°μ€€μœΌλ‘œ ν…Œμ΄λΈ”μ„ λΆ„λ¦¬ν•˜μ—¬ μ„±λŠ₯ ν–₯상을 λ…Έλ €λ³Ό 수 μžˆλ‹€.

Horizontal Partitioning

λ ˆμ½”λ“œ μˆ˜κ°€ λ§Žμ€, 데이터가 많이 μΆ•μ λœ ν…Œμ΄λΈ”μ˜ λ ˆμ½”λ“œλ₯Ό μˆ˜ν‰μœΌλ‘œ λΆ„ν•  ν•˜λŠ” 방법이닀.

이 λ•Œ λͺ‡ κ°€μ§€ 방법이 μžˆλ‹€. 이 κΈ€μ—μ„œ λ”°λ‘œ λ‹€λ£¨μ§€λŠ” μ•ŠλŠ”λ‹€.

  • Range

  • List

  • Hash

  • ...

νŒŒν‹°μ…”λ‹μ„ μ‚¬μš©ν•˜λŠ” 경우 PK λ‚˜ Unique key 의 변경이 ν•„μš”ν•  수 μžˆλ‹€.

ν…Œμ΄λΈ”μ˜ PK, Unique key λŠ” νŒŒν‹°μ…˜ ν‚€κ°€ ν¬ν•¨λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

예λ₯Ό λ“€μ–΄, user_id λ₯Ό pk 둜 μ‚¬μš©ν•˜λŠ” ν…Œμ΄λΈ”μ„ created_at 으둜 Range paritioning ν•˜κ³ μž ν•  수 μžˆλ‹€.

이런 κ²½μš°λŠ” (user_id, created_at) 으둜 PK λ₯Ό λ³€κ²½ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

Sharding

큰 ν…Œμ΄λΈ”μ„ λ™μΌν•œ μŠ€ν‚€λ§ˆλ₯Ό κ°€μ§„ μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„μ— shard λ‹¨μœ„λ‘œ λΆ„μ‚° μ €μž₯ν•˜λŠ” 방법이닀.

물리적으둜 λ‹€λ₯Έ μ„œλ²„μ— μ €μž₯ν•˜κΈ° λ•Œλ¬Έμ— νŠΈλž˜ν”½μ΄ λΆ„μ‚°λ˜κ³ , κ°€μš©μ„±μ΄ λŠ˜μ–΄λ‚œλ‹€.

λ°˜λŒ€λ‘œ μ—¬λŸ¬ μƒ€λ“œμ— μžˆλŠ” 데이터λ₯Ό 쑰인할 λ•Œμ—λŠ” 어렀움이 생긴닀.

μ¦κ°€ν•˜λŠ” μ›Œν¬λ‘œλ“œμ— 따라 λΆ€ν•˜ 뢄산이 ν•„μš”ν•œ κ²½μš°λ‚˜, λΉ„λŒ€ν•΄μ§„ 데이터 λ³Όλ₯¨μœΌλ‘œ 인해 볡제 μ§€μ—°, 읽기/μ“°κΈ° μ„±λŠ₯ μ €ν•˜λ₯Ό κ°œμ„ ν•˜κΈ°μœ„ν•΄ μŠ€μΌ€μΌμ—…μ„ κ³ λ €ν•  수 μžˆμœΌλ‚˜, 물리적인 ν•œκ³„λ‘œ 더 이상 μŠ€μΌ€μΌμ—…μ΄ λΆˆκ°€λŠ₯ν•œ μ‹œμ μ΄ 였면 샀딩을 κ³ λ €ν•˜λŠ” 것이 μ’‹λ‹€.

λ°˜λŒ€λ‘œ λ§ν•΄μ„œ, 일정 μˆ˜μ€€κΉŒμ§€λŠ” μŠ€μΌ€μΌμ—…μ„ ν•˜λŠ”κ²Œ 더 쒋을 μˆ˜λ„ μžˆμ„μˆ˜ 있κ² λ‹€.

Horizontal Sharding

νŒŒν‹°μ…”λ‹κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 기쀀에 따라 λ‚˜λ‰œλ‹€.

  • Range: 컬럼 κ°’μœΌλ‘œ μƒ€λ“œλ₯Ό μ§€μ •ν•˜λŠ”, νŒŒν‹°μ…”λ‹μ—μ„œμ˜ Range 와 같은 방식이닀.

  • Hash: Hash ν•¨μˆ˜λ₯Ό 톡해 λ°˜ν™˜λ˜λŠ” κ°’μœΌλ‘œ μƒ€λ“œλ₯Ό κ²°μ •ν•˜λŠ” 방법이닀.

  • ...

Last updated