Sobes.tech
Middle+

Τι είναι το οριζόντιο sharding;

sobes.tech AI

Απάντηση από AI

Ο οριζόντιος διαχωρισμός (sharding) είναι μια τεχνική κλιμάκωσης βάσεων δεδομένων που περιλαμβάνει τον διαχωρισμό των δεδομένων σε τμήματα, που ονομάζονται shards, και την κατανομή αυτών των shards σε πολλούς ανεξάρτητους διακομιστές. Κάθε shard περιέχει ένα υποσύνολο όλων των γραμμών του πίνακα, διατηρώντας όλες τις στήλες.

Πλεονεκτήματα του οριζόντιου διαχωρισμού:

  • Κλιμάκωση: Επιτρέπει τη διαχείριση αυξανόμενου όγκου δεδομένων και κυκλοφορίας προσθέτοντας νέους διακομιστές για την αποθήκευση των shards.
  • Απόδοση: Μειώνει τον όγκο δεδομένων με τα οποία εργάζεται κάθε διακομιστής, επιταχύνοντας την εκτέλεση ερωτημάτων.
  • Διαθεσιμότητα: Αν ένα shard γίνει μη προσβάσιμο, τα άλλα συνεχίζουν να λειτουργούν.
  • Μείωση φόρτου: Κατανέμει το φορτίο εισόδου/εξόδου σε πολλούς διακομιστές.

Μειονεκτήματα του οριζόντιου διαχωρισμού:

  • Πολυπλοκότητα: Η υλοποίηση και η διαχείριση του sharding απαιτούν σημαντικές μηχανικές προσπάθειες.
  • Διανεμημένες συναλλαγές: Οι συναλλαγές που καλύπτουν πολλαπλά shards είναι πολύπλοκες στην υλοποίηση και μπορούν να μειώσουν την απόδοση.
  • Επανακατανομή: Η ανακατανομή δεδομένων μεταξύ των shards κατά την αλλαγή φόρτου ή την προσθήκη νέων διακομιστών μπορεί να είναι πολύπλοκη και απαιτητική σε πόρους.
  • Ερωτήματα μεταξύ shards: Τα ερωτήματα που απαιτούν συνένωση δεδομένων από διαφορετικά shards (JOIN) μπορεί να είναι αναποτελεσματικά.

Μέθοδοι διαχωρισμού:

  • Διαχωρισμός κατά εύρος: Τα δεδομένα διανέμονται βάσει εύρους τιμών στο κλειδί διαχωρισμού.
  • Διαχωρισμός με hash: Τα δεδομένα διανέμονται βάσει της τιμής hash του κλειδιού διαχωρισμού.
  • Διαχωρισμός με κατάλογο: Ένα πίνακας αντιστοίχισης δείχνει σε ποιο shard βρίσκονται συγκεκριμένα δεδομένα ή εύρη δεδομένων.

Παραδείγματα απλοποιημένης αντίληψης διαχωρισμού:

Ένας πίνακας χρηστών με μεγάλο όγκο δεδομένων. Αντί να αποθηκεύουμε όλους τους χρήστες σε έναν διακομιστή, μπορούμε να τους διαχωρίσουμε σε shards βάσει του πρώτου γράμματος του επωνύμου:

  • Shard 1: Χρήστες με επωνυμο από Α έως E
  • Shard 2: Χρήστες με επωνυμο από J έως L
  • Shard 3: Χρήστες με επωνυμο από M έως S
  • Shard 4: Χρήστες με επωνυμο από T έως Y

Κάθε shard αποθηκεύεται σε ξεχωριστό διακομιστή.

<?php

// Παράδειγμα συνάρτησης που καθορίζει το shard βάσει επωνύμου
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);
// Σε ένα πραγματικό σύστημα, θα πρέπει να συνδεθείτε στη βάση δεδομένων του αντίστοιχου shard

?>