Middle+
Wat is horizontale sharding?
sobes.tech AI
Antwoord van AI
Horizontale sharding is een techniek voor het schalen van databases waarbij gegevens worden verdeeld in delen, zogenaamde shards, en deze shards worden verdeeld over meerdere onafhankelijke servers. Elke shard bevat een subset van alle rijen van de tabel, maar behoudt alle kolommen.
Voordelen van horizontale sharding:
- Schaalbaarheid: Maakt het mogelijk om een groeiend volume aan gegevens en verkeer te verwerken door nieuwe servers toe te voegen voor het opslaan van shards.
- Prestaties: Vermindert de hoeveelheid gegevens waarmee elke server werkt, waardoor query's sneller worden uitgevoerd.
- Beschikbaarheid: Als een shard niet bereikbaar wordt, blijven de andere shards functioneren.
- Lastaanspreiding: Verdeelt de invoer/output-belasting over meerdere servers.
Nadelen van horizontale sharding:
- Complexiteit: Implementatie en beheer van sharding vereisen aanzienlijke engineeringinspanningen.
- Gedistribueerde transacties: Transacties die meerdere shards omvatten, zijn complex om te implementeren en kunnen de prestaties verminderen.
- Herbalancering: Het herverdelen van gegevens tussen shards bij verandering van de belasting of het toevoegen van nieuwe servers kan een complex en resource-intensief proces zijn.
- Queries tussen shards: Queries die gegevens uit verschillende shards moeten combineren (
JOIN) kunnen inefficiënt zijn.
Methoden van sharding:
- Range sharding: Gegevens worden verdeeld op basis van een bereik van waarden in de sharding-sleutel.
- Hash sharding: Gegevens worden verdeeld op basis van de hash-waarde van de sharding-sleutel.
- Directory sharding: Een mapping-tabel geeft aan op welke shard bepaalde gegevens of gegevensbereiken zich bevinden.
Voorbeeld van een vereenvoudigd sharding-concept:
Er is een gebruikers tabel met een groot volume aan gegevens. In plaats van alle gebruikers op één server op te slaan, kunnen ze worden verdeeld in shards op basis van de eerste letter van de achternaam:
- Shard 1: Gebruikers met achternamen van A tot E
- Shard 2: Gebruikers met achternamen van J tot L
- Shard 3: Gebruikers met achternamen van M tot S
- Shard 4: Gebruikers met achternamen van T tot Y
Elke shard wordt opgeslagen op een aparte server.
<?php
// Voorbeeldfunctie die de shard bepaalt op basis van de achternaam
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; // Geeft 0 terug voor ongedefinieerde gevallen
}
// Gebruik
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// In een echt systeem moet je verbinding maken met de juiste shard database
?>