Middle+
Gorizontal sharding nima?
sobes.tech AI
AIdan javob
Horizontal sharding ma'lumotlar bazasini kengaytirish texnikasi bo'lib, ma'lumotlarni shardlar deb ataladigan qismlarga bo'lish va bu shardlarni bir nechta mustaqil serverlarga tarqatishni o'z ichiga oladi. Har bir shard jadvalning barcha satrlarining kichik bir qismini o'z ichiga oladi, lekin barcha ustunlarni saqlaydi.
Gorizontal shardingning afzalliklari:
- Kengaytiriluvchanlik: Yangi serverlar qo'shish orqali ma'lumotlar hajmi va trafikning o'sishini boshqarish imkonini beradi.
- Ishlash tezligi: Har bir server bilan ishlash uchun ma'lumotlar hajmini kamaytiradi, bu so'rovlarni tezlashtiradi.
- Mavjudlik: Agar bir shard mavjud bo'lmasa, boshqa shardlar ishlashda davom etadi.
- Yukni kamaytirish: Kirish/chiqish yukini bir nechta serverlar o'rtasida taqsimlaydi.
Gorizontal shardingning kamchiliklari:
- Murakkablik: Shardingni joriy etish va boshqarish katta muhandislik harakatlarini talab qiladi.
- Tarqatilgan tranzaktsiyalar: Bir nechta shardlarni qamrab oladigan tranzaktsiyalarni amalga oshirish murakkab va ish faoliyatini pasaytirishi mumkin.
- Qayta balanslash: Yuki o'zgarishi yoki yangi serverlar qo'shilishi bilan ma'lumotlarni qayta taqsimlash murakkab va resurslarni talab qiladigan jarayon bo'lishi mumkin.
- Shardlar o'rtasidagi so'rovlar: Turli shardlardan ma'lumotlarni birlashtirish talab qiladigan so'rovlar (
JOIN) samarali bo'lmasligi mumkin.
Sharding usullari:
- Oraliq sharding: Ma'lumotlar sharding kalidagi qiymat oralig'iga asoslangan holda taqsimlanadi.
- Hash sharding: Ma'lumotlar sharding kalidining hash qiymatiga asoslangan holda taqsimlanadi.
- Direktorlik sharding: Xarita jadvali ma'lumotlarning yoki ma'lumotlar oralig'ining qaysi shardda joylashganligini ko'rsatadi.
Misol uchun, sharding konseptining soddalashtirilgan misoli:
Katta ma'lumotlar hajmiga ega foydalanuvchilar jadvali mavjud. Barcha foydalanuvchilarni bitta serverda saqlash o'rniga, ularni familiyaning birinchi harfi bo'yicha shardlarga bo'lish mumkin:
- Shard 1: A dan E gacha bo'lgan familiyali foydalanuvchilar
- Shard 2: J dan L gacha bo'lgan familiyali foydalanuvchilar
- Shard 3: M dan S gacha bo'lgan familiyali foydalanuvchilar
- Shard 4: T dan Y gacha bo'lgan familiyali foydalanuvchilar
Har bir shard alohida serverda saqlanadi.
<?php
// Familiya asosida shardni aniqlovchi misol funksiyasi
function determineShardByLastName(string $lastName): int
{
$firstLetter = mb_strtoupper(mb_substr($lastName, 0, 1));
if ($firstLetter >= 'А' && $firstLetter <= 'Е') {
return 1;
} elseif ($firstLetter >= 'Ж' && $firstLetter <= 'Л') {
return 2;
} elseif ($firstLetter >= 'М' && $firstLetter <= 'С') {
return 3;
} elseif ($firstLetter >= 'Т' && $firstLetter <= 'Я') {
return 4;
}
return 0; // Noma'lum holatlar uchun 0 qaytaradi
}
// Foydalanish
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// Haqiqiy tizimda, mos shardning ma'lumotlar bazasiga ulanish kerak bo'ladi
?>