πΎ[Database] Hash Based Shardingμ΄λ?
π Intro.
-
Hash Based Shardingμ λ°μ΄ν°λ² μ΄μ€ μ€λ©(βλ°μ΄ν°λ₯Ό μ¬λ¬ κ°μ λ°μ΄ν
λ² μ΄μ€λ‘ λλλ κΈ°λ²β) μ€ νλλ‘, λ°μ΄ν°λ₯Ό μ μ₯ν μ€λ(Shard)λ₯Ό κ²°μ ν λ ν΄μ ν¨μ(Hash Function)λ₯Ό μ¬μ©νλ κΈ°λ²μ
λλ€.
- ν΄μ ν¨μ(Hash Function)λ₯Ό μ΄μ©ν΄ λ°μ΄ν°κ° νΉμ μ€λ(Shard)μ κ· λ±νκ² λΆλ°°λλλ‘ νλ©°, λ°μ΄ν° λΆν¬μ μ‘°ν ν¨μ¨μ±μ μ΅μ νν©λλ€.
λμ !! λ²μ¨ λ무 μ΄λ €μ΄ μ©μ΄λ€μ΄ λ§μ΄ λμμ!! κ·Έλλ μ°¨κ·Ό μ°¨κ·Ό μμκ°λ΄μ!! π
β 1οΈβ£ μ€λ©(Sharding)μ΄λ 무μμΌκΉμ?
β μ€λ©(Sharding).
-
μ€λ©(Sharding)μ λ°μ΄ν°λ₯Ό μ¬λ¬ κ°μ μμ μ‘°κ°(Shard)μΌλ‘ λλμ΄ μ μ₯νκ³ κ΄λ¦¬νλ λ°©λ²μ μλ―Έν©λλ€.
- μ΄λ¬ν μ€λ(Shard)λ κ°κΈ° λ 립μ μΈ λ°μ΄ν°λ² μ΄μ€λ μλ²λ‘ λμνλ©°, λκ·λͺ¨ λ°μ΄ν°μ νΈλν½μ μ²λ¦¬ν λ μ±λ₯κ³Ό νμ₯μ±μ ν₯μμν€λ λ° μ¬μ©λ©λλ€.
β μ€λ©κ³Ό μ€λ.
- μ€λ©(Sharding): βλ°μ΄ν°λ₯Ό μ¬λ¬ κ°μ μμ μ‘°κ°(Shard)μΌλ‘ λλμ΄ μ μ₯νκ³ κ΄λ¦¬νλ λ°©λ².β
- μ€λ(Shard): λ°μ΄ν°λ² μ΄μ€ μ€λ©μμ Shardλ λ°μ΄ν°λ₯Ό μ μ₯νλ βλ 립λ λ°μ΄ν°λ² μ΄μ€λ μλ²βλ₯Ό κ°λ¦¬ν΄.
β μ€λ©μ΄ μ νμνμ§?
-
- μ±λ₯ λ¬Έμ ν΄κ²°!
- βλ³λͺ© νμμ μ€μΌ μ μμ΄μ :)β
- λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν°κ° λ§μμ§λ©΄ 쿼리 μλκ° λλ €μ§κ³ μ±λ₯ μ νκ° λ°μν μ μμ΄μ. π
- βμ€λ©(Sharding)μ ν΅ν΄ λ°μ΄ν°λ₯Ό λλλ©΄ κ° μ€λ(Shard)κ° λ 립μ μΌλ‘ μ²λ¦¬λλ―λ‘, λ³λͺ© νμμ μ€μΌ μ μμ§μβ
- μ±λ₯ λ¬Έμ ν΄κ²°!
-
- νμ₯μ± ν보!
- βμ€λ©μ ν΅ν΄ μ¬λ¬ μλ²λ₯Ό μΆκ°νμ¬ νμ₯μ΄ κ°λ₯ν΄μ :)β
- λ°μ΄ν°κ° κΈκ²©ν μ¦κ°νκ±°λ, νΈλν½μ΄ λ§μμ§ κ²½μ° λ¨μΌ λ°μ΄ν°λ² μ΄μ€λ‘λ κ°λΉν μ μμ΄μ.
- λλ¬Έμ βμ€λ©μ ν΅ν΄ μ¬λ¬ μλ²λ₯Ό μΆκ°νμ¬ νμ₯μ΄ κ°λ₯νμ§μ.β
- νμ₯μ± ν보!
-
- μ λ’°μ± λ° κ°μ©μ± ν₯μ!
- βνλμ μ€λκ° μ₯μ λ₯Ό κ²ͺλλΌλ λ€λ₯Έ μ€λλ μ μμ μΌλ‘ μλνμ¬ μλΉμ€ μ€λ¨μ λ°©μ§ν΄μ.β
- μ λ’°μ± λ° κ°μ©μ± ν₯μ!
β μ€λ©μ μλ μ리λ₯Ό μμλ΄ μλ€!
- μ€λ©μ λ°μ΄ν°λ₯Ό μ μ₯ν λ νΉμ κΈ°μ€μ λ°λΌ λλλλ€.
- μ΄ κΈ°μ€μ λ°λΌ μ΄λ€ λ°μ΄ν°λ₯Ό μ΄λ€ μ€λμ μ μ₯ν μ§ κ²°μ λ©λλ€.
1οΈβ£ μ€λ ν€(Shard Key)
- μ΄ κΈ°μ€μ λ°λΌ μ΄λ€ λ°μ΄ν°λ₯Ό μ΄λ€ μ€λμ μ μ₯ν μ§ κ²°μ λ©λλ€.
- λ°μ΄ν°λ₯Ό λλ λ μ¬μ©νλ κΈ°μ€μ΄ λλ ν€.
- μ: μ¬μ©μ ID, λ μ§, νΉμ λ°μ΄ν°μ ν΄μ κ°.
2οΈβ£ μ€λ ν λΉ
- μ: μ¬μ©μ ID, λ μ§, νΉμ λ°μ΄ν°μ ν΄μ κ°.
- μ€λ ν€λ₯Ό κΈ°λ°μΌλ‘ λ°μ΄ν°λ₯Ό νΉμ μ€λμ λΆλ°°.
- μ:
shard = hash(UserID) % number_of_shards
- μ:
- μ μμ λ°λΌ λ°μ΄ν°λ₯Ό μ€λμ ν λΉν©λλ€.
β μ€λ©μ μ₯μ μ 무μμΌκΉμ?
-
- νμ₯μ±(Scalability)!
- λ°μ΄ν°λ₯Ό λΆμ° μ μ₯νμ¬ μνμ νμ₯μ΄ κ°λ₯ν©λλ€.
- μ: μλ²λ₯Ό μΆκ°νλ©΄ λ λ§μ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μ²λ¦¬ν μ μμ΅λλ€.
- νμ₯μ±(Scalability)!
-
- μ±λ₯ ν₯μ!
- λ°μ΄ν°κ° λΆμ°λλ―λ‘ κ° μ€λμμ μ²λ¦¬ν΄μΌ ν λ°μ΄ν°λμ΄ μ€μ΄λ€μ΄ 쿼리 μ±λ₯μ΄ ν₯μλ©λλ€.
- μ±λ₯ ν₯μ!
-
- κ°μ©μ±!
- νΉμ μ€λμ μ₯μ κ° λ°μν΄λ, λ€λ₯Έ μ€λλ μ μμ μΌλ‘ μλν©λλ€.
- κ°μ©μ±!
β μ€λ©μ λ¨μ μ 무μμΌκΉμ?
-
- 볡μ‘μ±μ μ¦κ°.
- λ°μ΄ν°λ₯Ό λλκ³ κ΄λ¦¬νλ μΆκ°μ μΈ λ‘μ§μ΄ νμν©λλ€.
- μ€λ κ° λ°μ΄ν°λ₯Ό μ‘°νν΄μΌ νλ κ²½μ°(μ‘°μΈ μΏΌλ¦¬) ꡬνμ΄ λ³΅μ‘ν΄μ§ μ μμ΅λλ€.
- 볡μ‘μ±μ μ¦κ°.
-
- λ°μ΄ν° μ¬λΆλ°° λΉμ©.
- μ€λμ κ°μλ₯Ό λ리거λ μ€μΌ κ²½μ°, λ°μ΄ν°λ₯Ό μ¬λΆλ°°ν΄μΌ νλ©° μ΄λ μκ°μ΄ λ§μ΄ μμλ©λλ€.
- λ°μ΄ν° μ¬λΆλ°° λΉμ©.
-
- ν«μ€ν λ¬Έμ .
- νΉμ μ€λμ λ°μ΄ν°κ° λͺ°λ¦¬λ©΄ ν΄λΉ μ€λμ κ³ΌλΆνκ° κ±Έλ¦¬λ λ¬Έμ κ° λ°μν©λλ€.
- ν«μ€ν λ¬Έμ .
β μ€λ©μ μ’ λ₯μλ 무μμ΄ μμκΉμ?
1οΈβ£ Range Based Sharding(λ²μ κΈ°λ° μ€λ©)
- λ°μ΄ν°μ λ²μμ λ°λΌ μ€λλ₯Ό λλλλ€.
- μ: μ¬μ©μ IDκ° 11000μ μ€λ 1, 10012000μ μ€λ 2.
- μ₯μ : νΉμ λ²μμ λ°μ΄ν°λ₯Ό μ‘°νν λ ν¨μ¨μ μ λλ€.
- λ¨μ : νΉμ λ²μμ λ°μ΄ν°κ° λͺ°λ¦΄ κ²½μ°, μ€λκ° λΆκ· νν΄μ§ μ μμ΅λλ€.
2οΈβ£ Hash Based Sharding(ν΄μ κΈ°λ° μ€λ©)
- λ°μ΄ν°μ ν΄μ κ°μ κΈ°μ€μΌλ‘ μ€λλ₯Ό λλλλ€.
- μ: shard = hash(UserID) % number_of_shards
- μ₯μ : λ°μ΄ν°κ° κ· λ±νκ² λΆλ°°λ©λλ€.
- λ¨μ : μ€λ κ°μ λ³κ²½ μ λͺ¨λ λ°μ΄ν°λ₯Ό μ¬λΆλ°°ν΄μΌ ν©λλ€.
3οΈβ£ Directory Based Sharding(λλ ν 리 κΈ°λ° μ€λ©)
- μ€λ ν€μ μ€λλ₯Ό λ§€νν λ³λμ λλ ν 리(λ§€ν ν
μ΄λΈ)λ₯Ό μ¬μ©ν©λλ€.
- μ₯μ : μ μ°νκ² λ°μ΄ν°λ₯Ό λΆλ°°κ° κ°λ₯ν©λλ€.
- λ¨μ : λ§€ν ν μ΄λΈ κ΄λ¦¬μ 볡μ‘μ±μ΄ μ¦κ°ν©λλ€.
β 2οΈβ£ Hash Based Shardingμ μλ λ°©μμ μ΄λ»κ² λ κΉμ?
1οΈβ£ ν΄μ ν¨μ(Hash Function).
- ν΄μ ν¨μλ μ
λ ₯κ°(μ: User ID, Order ID λ±)μ λ°μμ κ³ μ λ ν¬κΈ°μ μ«μ(ν΄μ κ°)λ‘ λ³ννλ ν¨μμ
λλ€.
- μ: hash(UserID) = 123456
2οΈβ£ μ€λ ν λΉ.
- μ: hash(UserID) = 123456
- ν΄μ κ°μ μ€λμ κ°μλ‘ λλ λλ¨Έμ§ κ°(Modulo)μ κ³μ°νμ¬ λ°μ΄ν°λ₯Ό μ μ₯ν μ€λλ₯Ό κ²°μ ν©λλ€.
- μ: shard = hash(UserID) % number_of_shards
- μ€λκ° 3κ°μ΄κ³ , hash(UserID) = 123456μ΄λΌλ©΄?
shard = 123456 % 3 = 0
- λ°λΌμ λ°μ΄ν°λ μ€λ 0μ μ μ₯λ©λλ€.
3οΈβ£ λ°μ΄ν° μ μ₯.
- ν΄μ κ°μ κ³μ°ν κ²°κ³Όμ λ°λΌ, ν΄λΉ λ°μ΄ν°λ₯Ό νΉμ μ€λμ μ μ₯ν©λλ€.
β 3οΈβ£ Hash Based Shardingμ μ₯μ .
1οΈβ£ κ· λ± λΆλ°°.
- ν΄μ ν¨μλ λ°μ΄ν°λ₯Ό κ° μ€λμ κ· λ±νκ² λΆλ°°νλ €κ³ ν©λλ€.
- λ°λΌμ νΉμ μ€λμ λ°μ΄ν°κ° λͺ°λ¦¬λ νμ(ν«μ€ν)μ΄ μ€μ΄λλλ€.
2οΈβ£ μ‘°ν μ±λ₯ μ΅μ ν.
- λ°λΌμ νΉμ μ€λμ λ°μ΄ν°κ° λͺ°λ¦¬λ νμ(ν«μ€ν)μ΄ μ€μ΄λλλ€.
- λ°μ΄ν°λ₯Ό νΉμ μ€λμλ§ μ‘°ννλ©΄ λλ―λ‘, μ 체 μ€λλ₯Ό νμν νμκ° μμ΄ μ±λ₯μ΄ ν₯μλ©λλ€.
3οΈβ£ μ€κ³ λ¨μν.
- ν΄μ ν¨μλ₯Ό ν΅ν΄ μ€λλ₯Ό κ²°μ νκΈ° λλ¬Έμ 볡μ‘ν μ€λ© λ‘μ§μ΄ νμνμ§ μμ΅λλ€.
β 4οΈβ£ Hash Based Shardingμ λ¨μ .
1οΈβ£ μ€λ μΆκ°/μμ μ μ΄λ €μ.
- μ€λ μκ° λ³κ²½λλ©΄ ν΄μ κ°μ΄ μ¬κ³μ°λμ΄ κΈ°μ‘΄ λ°μ΄ν°μ μμΉκ° λ°λλλ€.
- μ: μ€λκ° 3κ°μμ 4κ°λ‘ μ¦κ°νλ©΄, λ°μ΄ν°μ μ¬λ°°μΉλ₯Ό νΌν μ μμ΅λλ€.
2οΈβ£ 볡μ‘ν λ°μ΄ν° μ΄λ.
- μ: μ€λκ° 3κ°μμ 4κ°λ‘ μ¦κ°νλ©΄, λ°μ΄ν°μ μ¬λ°°μΉλ₯Ό νΌν μ μμ΅λλ€.
- μ€λ μκ° λ³κ²½λλ©΄, λͺ¨λ λ°μ΄ν°λ₯Ό μλ‘μ΄ μ€λ ꡬ쑰μ λ§κ² μ΄λν΄μΌ ν©λλ€.
3οΈβ£ μ‘°μΈ μ°μ°μ μ΄λ €μ.
- μλ‘ λ€λ₯Έ μ€λμ μ μ₯λ λ°μ΄ν°λ₯Ό μ‘°μΈν΄μΌ νλ κ²½μ°, μ±λ₯μ΄ μ νλ μ μμ΅λλ€.
4οΈβ£ ν«μ€ν λ¬Έμ (νΉμ ν€μ κ³Όλν μμ²).
- ν΄μ ν¨μκ° κ· λ± λΆλ°°λ₯Ό 보μ₯νμ§ λͺ»νκ±°λ νΉμ ν€μ μ§μ€μ μΈ μμ²μ΄ λ°μν κ²½μ°, νΉμ μ€λμ λΆνκ° μ§μ€λ μ μμ΅λλ€.