μ€λ©λ ν΄λ¬μ€ν°μμλ μ€λ ν€ λ₯Ό κΈ°λ°μΌλ‘ μ€λ©λ λ°μ΄ν°μꡬμ μ λ§λ€ μ μμ΅λλ€. κ° κ΅¬μ μ ν΄λ¬μ€ν° μ μλ νλ μ΄μμ μ€λμ μ°κ²°ν μ μμ΅λλ€. μ€λ λ μ¬λ¬ κ°μ ꡬμκ³Ό μ°κ²°ν μ μμ΅λλ€. κ· ν μ‘ν ν΄λ¬μ€ν° μμ MongoDB λ ꡬμ μ ν¬ν¨λ μ²ν¬ λ₯Ό ν΄λΉ ꡬμ κ³Ό κ΄λ ¨λ μ€λλ‘λ§ λ§μ΄κ·Έλ μ΄μ ν©λλ€.
ꡬμμ μ μ©ν μ μλ λͺ κ°μ§ μΌλ°μ μΈ λ°°ν¬ ν¨ν΄μ λ€μκ³Ό κ°μ΅λλ€.
νΉμ μ€λ μΈνΈμμ λ°μ΄ν°μ νΉμ νμ μ§ν©μ 격리ν©λλ€.
κ°μ₯ κ΄λ ¨μ±μ΄ λμ λ°μ΄ν°κ° μ ν리μΌμ΄μ μλ²μ μ§λ¦¬μ μΌλ‘ κ°μ₯ κ°κΉμ΄ μ€λμ μλμ§ νμΈν©λλ€.
μ€λ νλμ¨μ΄μ νλμ¨μ΄/μ±λ₯μ κΈ°λ°μΌλ‘ λ°μ΄ν°λ₯Ό μ€λλ‘ λΌμ°ν ν©λλ€.
λ€μ μ΄λ―Έμ§λ 3κ°μ μ€λμ 2κ°μ ꡬμμ΄ μλ μ€λ©λ ν΄λ¬μ€ν°λ₯Ό 보μ¬μ€λλ€. A ꡬμμ ννμ΄ 1μ΄κ³ μνμ΄ 10μΈ λ²μλ₯Ό λνλ
λλ€. B ꡬμμ ννμ΄ 10μ΄κ³ μνμ΄ 20μΈ λ²μλ₯Ό λνλ
λλ€. μ€λ Alpha λ° Betaμλ A ꡬμμ΄ μμ΅λλ€. μ€λ Betaμλ B ꡬμμ΄ μμ΅λλ€. μ€λ Charlieμ μ°κ²°λ ꡬμμ΄ μμ΅λλ€. ν΄λ¬μ€ν°λ μμ λ μνμ΄λ©° ꡬμμ μλ°νλ μ²ν¬λ μμ΅λλ€.
λμ λ° μμ
λ²μ
κ° κ΅¬μμ collectionμ μ€λ ν€ κ° μ€ νλ μ΄μμ λ²μλ₯Ό ν¬ν¨ν©λλ€. ꡬμμ΄ ν¬ν¨νλ κ° λ²μλ νμ ννμ λ₯Ό ν¬ν¨νλ©° μνμ μ μ μΈν©λλ€. ꡬμμ λ²μλ₯Ό 곡μ ν μ μμΌλ©° λ²μκ° μ€λ³΅λ μλ μμ΅λλ€.
μλ₯Ό λ€μ΄ {"x": 1}μ μλ μ€λ ν€λ₯Ό μκ°ν΄ λ³΄κ² μ΅λλ€. ν΄λ¬μ€ν°μ ꡬμ λ²μλ λ€μκ³Ό κ°μ΅λλ€.
{ "x" : 5 } --> { "x" : 10 } // Zone A { "x" : 10} --> { "x" : 20 } // Zone B
μ€λ ν€ κ°μ΄
7μΈ λ¬Έμκ° κ΅¬μ Aλ‘ λΌμ°ν λ©λλ€.μ€λ ν€ κ°μ΄
10μΈ λ¬Έμκ° κ΅¬μ Bλ‘ λΌμ°ν λ©λλ€.
ν΄μ μ€λ ν€ λ° κ΅¬μ λ²μ
μ€λ ν€μ ν΄μ νλκ° ν¬ν¨λ collectionμ κ²½μ° ν΄λΉ νλμ ꡬμ λ²μμ λ°μ΄ν° λΆν¬λ ν΄μ κ°μ κΈ°λ°μΌλ‘ ν©λλ€. μ΄ κ΅¬μμλ ν΄μ μ€λ ν€ κ°μ΄ μ μλ λ²μμ μνλ λ¬Έμκ° ν¬ν¨λμ΄ μμ΅λλ€. ν΄μ νλμ ꡬμ λ²μλ ν΄μλμ§ μμ νλμ ꡬμ λ²μμ μμΈ‘ κ°λ₯ν λ¬Έμ λΌμ°ν λμμ΄ λμΌνμ§ μμ΅λλ€.
μλ₯Ό λ€μ΄ {"x" : "hashed"}μ μλ μ€λ ν€λ₯Ό κ°μ ν΄ λ³΄κ² μ΅λλ€. λ€μ λ²μλ 5λΆν° 10 μ¬μ΄μ ν΄μλ λ²μλ₯Ό λνλ
λλ€.
{ "x": NumberLong("4470791281878691347") } --> { "x": NumberLong("7766103514953448109") } // Zone A
μ€λ ν€ κ°μ΄
1μΈ λ¬Έμλ ν΄μ κ°1μ΄ μ μλ λ²μμ μνκΈ° λλ¬Έμ μ Aλ‘ λΌμ°ν λ©λλ€.μ€λ ν€ κ°μ΄
15μΈ λ¬Έμλ ν΄μ κ°15μ΄ μ μλ λ²μμ μνκΈ° λλ¬Έμ μ Aλ‘ λΌμ°ν λ©λλ€.μ€λ ν€ κ°μ΄
8μΈ λ¬Έμλ ν΄μ κ°8μ΄ μ μλ λ²μμ μνμ§ μκΈ° λλ¬Έμ ꡬμ Aλ‘ λΌμ°ν λμ§ μμ΅λλ€.
mongoshλ μ§μ λ λ§€κ°λ³μμ ν¬μ€νΈ ν΄μ κ°μ κ³μ°νκΈ° μν convertShardKeyToHashed()λ₯Ό μ 곡ν©λλ€.
ν΄μ νλμμ ꡬμ λ²μλ₯Ό μ¬μ©νλ ν κ°μ§ μ ν¨ν λ°©λ²μ collectionμ λ°μ΄ν°λ₯Ό λ¨μΌ ꡬμμ μ€λλ‘ μ ννλ κ²μ λλ€. minKey λ₯Ό ννμΌλ‘, maxkey λ₯Ό μνμΌλ‘ μ¬μ©νμ¬ κ°λ₯ν ν΄μ μ€λ ν€ κ°μ μ 체 λ²μλ₯Ό ν¬ν¨νλ ꡬμ λ²μλ₯Ό μμ±ν©λλ€.
λ²μλ₯Ό μ μνκΈ° μν΄ MongoDBλ updateZoneKeyRange λͺ
λ Ήκ³Ό κ΄λ ¨ ν¬νΌ λ©μλ sh.updateZoneKeyRange() λ° sh.addShardTag()λ₯Ό μ 곡ν©λλ€.
updateZoneKeyRange λ°μ΄ν°λ² μ΄μ€ λͺ
λ Ήκ³Ό ν΄λΉ ν¬νΌ sh.updateZoneKeyRange() λ° sh.addTagRange()λ₯Ό λΉμ€λν 컬λ μ
λλ μ‘΄μ¬νμ§ μλ 컬λ μ
μμ μ€νν μ μμ΅λλ€.
컬λ μ μ μ κ±°νλ©΄ κ΄λ ¨λ μμ/νκ·Έ λ²μκ° μμ λ©λλ€.
μ΄κΈ° μ²ν¬ λΆμ°
μ€λ 컬λ μ μμ μ λΉμ΄ μκ±°λ μ‘΄μ¬νμ§ μλ 컬λ μ μ μ€λ©νκΈ° μ μ ꡬμ λ° κ΅¬μ λ²μλ₯Ό μ μνμ¬ μ μλ ꡬμ λ²μμ λν μ²ν¬μ μ€λ ν€ κ°μ μ 체 λ²μλ₯Ό ν¬ν¨νλ μΆκ° μ²ν¬λ₯Ό μμ±νκ³ κ·Έμ λ²μλ₯Ό κΈ°λ°μΌλ‘ μ΄κΈ° μ²ν¬ λΆλ°°λ₯Ό μνν©λλ€. μ΄λ¬ν μ²ν¬μ μ΄κΈ° μμ± λ° λ°°ν¬λ₯Ό ν΅ν΄ μ€λ©μ λ λΉ λ₯΄κ² μ€μ ν μ μμ΅λλ€. μ΄κΈ° λΆλ°° μ΄νμλ λ°Έλ°μκ° μμΌλ‘μ μ²ν¬ λΆλ°°λ₯Ό κ΄λ¦¬ν©λλ€.
MongoDBλ λ³΅ν© ν΄μ μΈλ±μ€μ λν μ€λ© 컬λ μ μ μ§μν©λλ€. λ³΅ν© ν΄μ μ€λ ν€λ₯Ό μ¬μ©νμ¬ λΉμ΄ μκ±°λ μ‘΄μ¬νμ§ μλ 컬λ μ μ μ€λ©νλ κ²½μ° MongoDBκ° μ΄κΈ° μ²ν¬ μμ± λ° λΆμ°μ μννλ €λ©΄ μΆκ° μꡬ μ¬νμ΄ μ μ©λ©λλ€.
μμλ λΉμ΄ μκ±°λ μ‘΄μ¬νμ§ μλ 컬λ μ μ λν ꡬμ λ° κ΅¬μ λ²μ μ¬μ μ μλ₯Ό μ°Έμ‘°νμΈμ.
λ°Έλ°μ
λ°Έλ°μλ μ€λ©λ collectionμ μ²ν¬λ₯Ό ν΄λ¬μ€ν°μ λͺ¨λ μ€λμ κ· λ±νκ² λΆλ°°νλ €κ³ μλν©λλ€.
λ§μ΄κ·Έλ μ΄μ μΌλ‘ νμλ κ° μ²ν¬μ λν΄ λ°Έλ°μλ ꡬμ±λ λͺ¨λ ꡬμμ κ°λ₯ν κ° λμ μ€λλ₯Ό νμΈν©λλ€. μ²ν¬ λ²μκ° κ΅¬μμ μνλ©΄ λ°Έλ°μλ μ²ν¬λ₯Ό ν΄λΉ ꡬμ λ΄λΆμ μ€λλ‘ λ§μ΄κ·Έλ μ΄μ ν©λλ€. ꡬμμ μνμ§ μλ μ²ν¬λ clusterμ λͺ¨λ μ€λμ μ‘΄μ¬ν μ μμΌλ©° μ μμ μΌλ‘ λ§μ΄κ·Έλ μ΄μ λ©λλ€.
λ°Έλ°μ± λΌμ΄λ μ€μ λ°Έλ°μκ° νΉμ μ€λμ λν΄ κ΅¬μ±λ ꡬμμ μλ°νλ μ²ν¬λ₯Ό κ°μ§νλ©΄ λ°Έλ°μλ ν΄λΉ μ²ν¬λ₯Ό μΆ©λμ΄ μλ μ€λλ‘ λ§μ΄κ·Έλ μ΄μ ν©λλ€.
ꡬμμ μ€λμ μ°κ²°νκ³ μ€λ 컬λ μ μ λν μ€λ ν€ λ²μλ‘ κ΅¬μμ ꡬμ±ν ν ν΄λ¬μ€ν°κ° μ€λ 컬λ μ μ λν΄ μν₯μ λ°λ λ°μ΄ν°λ₯Ό λ§μ΄κ·Έλ μ΄μ νλ λ° μκ°μ΄ 걸릴 μ μμ΅λλ€. μ΄λ μ²ν¬μ λΆν κ³Ό ν΄λ¬μ€ν°μ νμ¬ λ°μ΄ν° λΆμ°μ λ°λΌ λ¬λΌμ§λλ€. λ°Έλ°μ±μ΄ μλ£λλ©΄ νΉμ ꡬμμ λ¬Έμμ λν μ½κΈ° λ° μ°κΈ°κ° ν΄λΉ ꡬμ λ΄μ μ€λμλ§ λΌμ°ν λ©λλ€.
μΌλ¨ ꡬμ±λλ©΄ λ°Έλ°μλ ν₯ν λ°Έλ°μ± λΌμ΄λ λμ ꡬμμ μ‘΄μ€ν©λλ€.
μ€λ ν€
ν¬ν¨ν ꡬμμ λν μ λ²μλ₯Ό μ μν λ μ€λ ν€μ ν¬ν¨λ νλλ₯Ό μ¬μ©ν΄μΌ ν©λλ€. λ³΅ν© μ€λ ν€λ₯Ό μ¬μ©νλ κ²½μ°, λ²μμλ μ€λ ν€μ μ λμ¬κ° ν¬ν¨λμ΄μΌ ν©λλ€.
μλ₯Ό λ€μ΄, μ€λ ν€ { a : 1, b : 1, c : 1 }κ° μ£Όμ΄μ§ κ²½μ° bμ κ°μ ν¬ν¨νλλ‘ λ²μλ₯Ό λ§λ€κ±°λ μ
λ°μ΄νΈνλ €λ©΄ μ λμ¬λ‘ aλ₯Ό ν¬ν¨ν΄μΌ ν©λλ€. c κ°μ ν¬ν¨νλλ‘ λ²μλ₯Ό λ§λ€κ±°λ μ
λ°μ΄νΈνλ €λ©΄ μ λμ¬λ‘ a λ° bλ₯Ό ν¬ν¨ν΄μΌ ν©λλ€.
μ€λ ν€μ ν¬ν¨λμ§ μμ νλλ₯Ό μ¬μ©νμ¬ λ²μλ₯Ό μμ±ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, ꡬμμ μ¬μ©νμ¬ μ§λ¦¬μ μμΉλ₯Ό κΈ°λ°μΌλ‘ λ°μ΄ν°λ₯Ό λΆν νλ €λ κ²½μ°, μ€λ ν€μ 첫 λ²μ§Έ νλμ μ§λ¦¬μ λ°μ΄ν°κ° ν¬ν¨λμ΄μΌ ν©λλ€.
컬λ μ μ λν μ€λ ν€λ₯Ό μ νν λ ꡬμ ꡬμ±μ μ¬μ©ν μ μλ νλλ₯Ό κ³ λ €νλ κ²μ΄ μ’μ΅λλ€. μ€λ ν€ μ ν μ κ³ λ €ν μ¬νμ μ€λ ν€ μ νμ μ°Έμ‘°νμΈμ.
μ€λ ꡬμ κ²½κ³
ꡬμ λ²μλ νμ νν κ²½κ³λ₯Ό ν¬ν¨νκ³ μν κ²½κ³λ₯Ό μ μΈν©λλ€.