GoDasturchi
Database Sharding and Partitioning

Database Sharding and Partitioning

Baza sharding va bo'lish (partitioning)

Katta pochta bo'limini tasavvur qiling: agar BARCHA shahar aholisining xatlari BITTA xodimga tushsa, u hech qachon ULGURMAYDI. Buning o'rniga, shahar RAYONLARGA bo'linadi, va har bir rayon uchun ALOHIDA xodim tayinlanadi — familiyasi "A" dan boshlanadigan mijozlar bitta xodimga, "B" dan boshlanganlar boshqasiga. Har bir xodim endi FAQAT o'z ulushi bilan ishlaydi. Sharding (bo'lish) — bazada aynan shu g'oya: ma'lumotni bir nechta BAZAGA taqsimlash, har biri ma'lumotning FAQAT bir qismini saqlaydi.

Replikatsiyadan FARQI muhim: replikatsiyada HAR BIR server BIR XIL ma'lumotning to'liq NUSXASINI saqlaydi (o'qish yukini va ishonchlilikni yaxshilash uchun). Shardingda esa har bir server ma'lumotning FAQAT BIR QISMINI saqlaydi (umumiy HAJM va YOZISH yukini kamaytirish uchun). Ko'p katta tizim ikkalasini BIRGA ishlatadi: ma'lumot avval SHARD'larga bo'linadi, keyin har bir shard O'ZI ham replikatsiya qilinadi.

Eng muhim va eng QIYIN qaror — shard key (bo'lish kaliti) tanlash: qaysi maydon asosida ma'lumotni taqsimlaymiz? Masalan, foydalanuvchilar jadvalini user_id bo'yicha bo'lish mumkin (0-999999 → 1-shard, 1000000-1999999 → 2-shard va h.k.), yoki geografik hudud bo'yicha (Toshkent → 1-shard, Samarqand → 2-shard). Yomon tanlangan shard key — hot shard ("issiq shard") muammosini keltirib chiqaradi: agar, masalan, hamma yozuv sana bo'yicha bo'linsa va BARCHA yangi trafik BUGUNGI sanaga tushsa, faqat BITTA shard yuklanadi, qolganlari BEKOR turadi — sharding'ning butun maqsadi YO'QQA chiqadi.

  • Yaxshi shard key — trafikni SHARD'lar bo'ylab TEKIS taqsimlaydi (masalan, user_id'ning hash qiymati)
  • Yaxshi shard key — bitta so'rov ko'pincha BITTA shard ichida javob topadi (aks holda, ko'p shard'dan yig'ib, natijani BIRLASHTIRISH kerak bo'ladi — bu sekin va murakkab)
  • Shard key'ni KEYINROQ o'zgartirish — deyarli har doim BUTUN ma'lumotni qayta TAQSIMLASHni talab qiladi, shuning uchun bu qaror Engineering Judgment kursidagi "qaytarib bo'lmaydigan qaror" toifasiga kiradi — sinchiklab tanlang

Sharding'ning narxi katta: endi "barcha foydalanuvchilarni yoshi bo'yicha saralash" kabi so'rov, BITTA bazaga emas, BARCHA shard'larga yuborilishi va natijalar DASTURDA birlashtirilishi kerak. Shuning uchun sharding — Back-of-the-Envelope Estimation hisob-kitobi ANIQ ko'rsatgandagina (ya'ni bitta baza HAQIQATAN yetmay qolganda) qo'llaniladigan, OXIRGI chora sifatida qaraladigan vosita.

Key Takeaway

Key Takeaway:

Sharding — ma'lumotni bir nechta bazaga taqsimlab, hajm va yozish yukini kamaytiradi (replikatsiyadan farqli, har bir server faqat bir QISM ma'lumotni saqlaydi). Eng muhim va eng qaytarib bo'lmaydigan qaror — trafikni tekis taqsimlaydigan shard key tanlash; noto'g'ri tanlov "issiq shard" muammosiga olib keladi.

NEXT UP

Indexing at Scale

Database Sharding and Partitioning

Baza sharding va bo'lish (partitioning)

Katta pochta bo'limini tasavvur qiling: agar BARCHA shahar aholisining xatlari BITTA xodimga tushsa, u hech qachon ULGURMAYDI. Buning o'rniga, shahar RAYONLARGA bo'linadi, va har bir rayon uchun ALOHIDA xodim tayinlanadi — familiyasi "A" dan boshlanadigan mijozlar bitta xodimga, "B" dan boshlanganlar boshqasiga. Har bir xodim endi FAQAT o'z ulushi bilan ishlaydi. Sharding (bo'lish) — bazada aynan shu g'oya: ma'lumotni bir nechta BAZAGA taqsimlash, har biri ma'lumotning FAQAT bir qismini saqlaydi.

Replikatsiyadan FARQI muhim: replikatsiyada HAR BIR server BIR XIL ma'lumotning to'liq NUSXASINI saqlaydi (o'qish yukini va ishonchlilikni yaxshilash uchun). Shardingda esa har bir server ma'lumotning FAQAT BIR QISMINI saqlaydi (umumiy HAJM va YOZISH yukini kamaytirish uchun). Ko'p katta tizim ikkalasini BIRGA ishlatadi: ma'lumot avval SHARD'larga bo'linadi, keyin har bir shard O'ZI ham replikatsiya qilinadi.

Eng muhim va eng QIYIN qaror — shard key (bo'lish kaliti) tanlash: qaysi maydon asosida ma'lumotni taqsimlaymiz? Masalan, foydalanuvchilar jadvalini user_id bo'yicha bo'lish mumkin (0-999999 → 1-shard, 1000000-1999999 → 2-shard va h.k.), yoki geografik hudud bo'yicha (Toshkent → 1-shard, Samarqand → 2-shard). Yomon tanlangan shard key — hot shard ("issiq shard") muammosini keltirib chiqaradi: agar, masalan, hamma yozuv sana bo'yicha bo'linsa va BARCHA yangi trafik BUGUNGI sanaga tushsa, faqat BITTA shard yuklanadi, qolganlari BEKOR turadi — sharding'ning butun maqsadi YO'QQA chiqadi.

  • Yaxshi shard key — trafikni SHARD'lar bo'ylab TEKIS taqsimlaydi (masalan, user_id'ning hash qiymati)
  • Yaxshi shard key — bitta so'rov ko'pincha BITTA shard ichida javob topadi (aks holda, ko'p shard'dan yig'ib, natijani BIRLASHTIRISH kerak bo'ladi — bu sekin va murakkab)
  • Shard key'ni KEYINROQ o'zgartirish — deyarli har doim BUTUN ma'lumotni qayta TAQSIMLASHni talab qiladi, shuning uchun bu qaror Engineering Judgment kursidagi "qaytarib bo'lmaydigan qaror" toifasiga kiradi — sinchiklab tanlang

Sharding'ning narxi katta: endi "barcha foydalanuvchilarni yoshi bo'yicha saralash" kabi so'rov, BITTA bazaga emas, BARCHA shard'larga yuborilishi va natijalar DASTURDA birlashtirilishi kerak. Shuning uchun sharding — Back-of-the-Envelope Estimation hisob-kitobi ANIQ ko'rsatgandagina (ya'ni bitta baza HAQIQATAN yetmay qolganda) qo'llaniladigan, OXIRGI chora sifatida qaraladigan vosita.

Key Takeaway

Key Takeaway:

Sharding — ma'lumotni bir nechta bazaga taqsimlab, hajm va yozish yukini kamaytiradi (replikatsiyadan farqli, har bir server faqat bir QISM ma'lumotni saqlaydi). Eng muhim va eng qaytarib bo'lmaydigan qaror — trafikni tekis taqsimlaydigan shard key tanlash; noto'g'ri tanlov "issiq shard" muammosiga olib keladi.

NEXT UP

Indexing at Scale