Middle+
რა არის ჰორიზონტალური შარდირება?
sobes.tech AI
პასუხი AI-სგან
გორიზონტალური შარდინგი — ეს მონაცემთა ბაზის მასშტაბირების ტექნიკა არის, რომელიც მონაცემებს ნაწილებად ყოფს, სახელწოდებით შარდები, და ამ შარდებს განაწილებს რამდენიმე დამოუკიდებელ სერვერზე. თითოეული შარდი შეიცავს ყველა სვეტის ნაწილს, მაგრამ ინახავს ყველა სვეტს.
გორიზონტალური შარდინგის უპირატესობები:
- მასშტაბირებადობა: ზრდის მონაცემთა მოცულობას და ტრეფიკს ახალი სერვერების დამატებით შარდების შენახვისთვის.
- შესრულება: ამცირებს თითოეულ სერვერზე მუშაობს მონაცემთა რაოდენობას, რაც აჩქარებს შეკითხვების შესრულებას.
- მოწვდომადობა: თუ ერთი შარდი მიუწვდომელია, სხვა შარდები აგრძელებენ მუშაობას.
- დაწოლა დატვირთვის შემცირება: განაწილებს შემოსულ და გამომავალ დატვირთვას რამდენიმე სერვერზე.
გორიზონტალური შარდინგის ნაკლოვანებები:
- სირთულე: შარდინგის დანერგვა და მართვა მოითხოვს მნიშვნელოვან ინჟინერულ ძალისხმევას.
- გავრცელებული ტრანზაქციები: რამდენიმე შარდს მოიცავს ტრანზაქციები რთულია განხორციელება და შეიძლება შეამციროს შესრულება.
- რებალანსირება: მონაცემების გადანაწილება შარდებს შორის დატვირთვის ცვლილების ან ახალი სერვერების დამატებისას შეიძლება იყოს რთული და რესურსმომგებიანი.
- შარდებს შორის შეკითხვები: შეკითხვები, რომლებიც მოითხოვს მონაცემების გაერთიანებას სხვადასხვა შარდიდან (მაგ.
JOIN-ით), შეიძლება იყოს არასასურველი.
შარდირების მეთოდები:
- დიაპაზონის მიხედვით შარდირება: მონაცემები განაწილებულია დიაპაზონის მიხედვით, რომელიც მნიშვნელობების შარდის გასაღზეა.
- ჰეშის მიხედვით შარდირება: მონაცემები განაწილებულია ჰეშის მნიშვნელობის მიხედვით, რომელიც შარდის გასაღზეა.
- დირექტორიის შარდირება: სია, რომელიც მიუთითებს, რომელ შარდშია კონკრეტული მონაცემები ან მონაცემთა დიაპაზონები.
შარდირების მაგალითი (სადავო):
არსებობს მომხმარებელთა სია დიდი მონაცემებით. ყველა მომხმარებლის შენახვის ნაცვლად, შეგვიძლია დავყოფთ მათ შარდებად გვარის პირველი ასოთ:
- შარდი 1: მომხმარებლები გვარებით A-დან E-მდე
- შარდი 2: მომხმარებლები გვარებით Ж-დან Л-მდე
- შარდი 3: მომხმარებლები გვარებით М-დან С-მდე
- შარდი 4: მომხმარებლები გვარებით Т-დან Я-მდე
ყოველი შარდი ინახება ცალკეულ სერვერზე.
<?php
// მაგალითი ფუნქცია, რომელიც განსაზღვრავს შარდს გვარის მიხედვით
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; // არ განსაზღვრული შემთხვევებისთვის 0 აბრუნებს
}
// გამოყენება
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// რეალურ სისტემაში საჭიროა დაკავშირება შესაბამის შარდის ბაზასთან
?>