Skip to Content

Wat is database-sharding?

Bij enterprise data management is de behoefte aan schaalbare en krachtige dataopslagsystemen van het grootste belang. Hier kan database sharding helpen en ook een heleboel andere voordelen bieden. In dit artikel zullen we een analogie gebruiken om ons te verdiepen in de basisprincipes van database-sharding en de voordelen ervan in databasebeheer voor ondernemingen, plus een paar belangrijke strategieën, implementatiestappen en best practices.

Wat is database-sharding?

Database sharding is een techniek voor het horizontaal opdelen van een database in kleinere, beter beheersbare eenheden die shards worden genoemd, waarbij elke shard zich op een aparte server bevindt. Het primaire doel is schaalvergroting, maar het maakt ook parallelle verwerking mogelijk om de prestaties en fouttolerantie te verbeteren. In plaats van al uw data op te slaan in één enorme database, wordt het verspreid over verschillende kleinere databases, shards genaamd, die elk verantwoordelijk zijn voor een specifiek bereik of type data. Dit maakt snellere en efficiëntere dataverwerking mogelijk.

Hier is een analogie: Stel dat u een zesgangenbuffet voor honderden mensen organiseert. In plaats van één buffettafel met alle gangen voor de hele kamer, zet u elke cursus op zijn eigen station. Op deze manier kunnen meer gasten zichzelf tegelijkertijd bedienen, sneller en met minder knelpunten. 

De voordelen van database-sharding

Het implementeren van database sharding brengt talloze voordelen met zich mee:

  • Verbeterde prestaties. In het voorbeeld van de buffettabel vertaalt dit zich in snellere service. Aan één grote buffettafel concurreert iedereen om ruimte, waardoor congestie ontstaat en het serveerproces wordt vertraagd. Met speciale stations voor verschillende soorten gerechten hebben gasten snel toegang tot het eten dat ze willen zonder op anderen te hoeven wachten. Voor databases betekent dit parallelle toegang en snellere queryprestaties.
  • Verbeterde schaalbaarheid. Op het dinerfeest betekent dit gewoon dat u meer gasten kunt ontvangen. Naarmate het aantal gasten toeneemt, kan de enkele buffettafel moeite hebben om de lading aan te pakken, wat leidt tot inefficiënties. Met sharding kunt u meer gasten efficiënt accommoderen, zodat u databaseworkloads op enorme schaal kunt verwerken.
  • Lagere kosten voor dataopslag. Dit gaat over efficiënt gebruik van middelen en het verminderen van verspilling. Het verbeteren van de prestaties en het verbeteren van de schaalbaarheid zonder overprovisioning of verspilling van resources komt voort uit het partitioneren van alleen wat u nodig hebt. In een sharded database kunt u data distribueren op basis van relevantie, waardoor de opslagvoetafdruk en -kosten worden verminderd.
  • Verbeterde fouttolerantie. Dit gaat over het operationeel houden van zaken voor het geval een gebied een probleem ondervindt. Het hebben van een back-upstation kan de service naadloos houden als een tafel wordt overgelopen of als de brandstof voor een kachel opraakt. In een sharded database blijven de anderen operationeel als een shard een probleem ondervindt.
  • Efficiënt data-ophalen. Sharding maakt een meer gerichte aanpak mogelijk om te vinden wat u zoekt. De enkele buffettafel is een groot oppervlak om naar een enkel gerecht te zoeken. Individuele stations, of sharded databases, zorgen voor snellere en gerichtere toegang tot specifieke informatie.

Leer hoe u dataopslag voor open source databases vereenvoudigt >>

Scherpe strategieën

Verschillende shardingstrategieën bieden unieke voordelen, afhankelijk van de vereisten en kenmerken van de data die worden beheerd. Of het nu gaat om bereik, het gebruik van een hash-functie voor gelijkmatige distributie, of expliciet vermelden waar data zich moeten bevinden, de keuze van de shardingstrategie hangt af van factoren zoals datadistributiepatronen en querypatronen in de applicatie. Hier is een nadere blik op drie veelgebruikte shardingsstrategieën.

Op bereik gebaseerde scherving

Bij range-based sharding worden data gedeeld op basis van gespecificeerde waarden. Het is als het categoriseren van gerechten bij een buffet op basis van hun type, zoals voorgerechten, hoofdgerechten en desserts.

Voorbeeld: Een e-commerceplatform verschuivt zijn klantendatabase op basis van aankoopbedragen. De ene scherf behandelt klanten met lage aankoopbedragen, de andere met gematigde bedragen, enz. Dit vergemakkelijkt efficiënt ophalen voor bepaalde soorten query's.

Hash-based scherven

Hash-based sharding omvat het toepassen van een hash-functie op een gekozen shard-toets (bijv. klant-ID). Het resultaat bepaalt de scherf waar de data worden opgeslagen. 

Voorbeeld: In een social media-platform kunnen gebruikersgegevens worden gehasht op basis van gebruikers-ID's. De hash-functie zou elke gebruiker consequent toewijzen aan een specifieke shard. Deze aanpak zorgt voor een gelijkmatige distributie van gebruikers over shards, waardoor evenwichtige toegang tot en opslag van data wordt bevorderd.

Lijstgebaseerde sharding

Lijstgebaseerde sharding houdt in dat expliciet wordt gespecificeerd welke shard bepaalde data opslaat op basis van een vooraf gedefinieerde lijst met waarden. Het is als het toewijzen van specifieke gerechten aan aangewezen buffetstations op basis van hun unieke kenmerken.

Voorbeeld: Een messaging-app kan een database met chatgeschiedenis verschuiven op basis van de landcode. Elke shard is verantwoordelijk voor gesprekken die afkomstig zijn van of betrekking hebben op gebruikers in specifieke landen.

Hoe u database-sharding en best practices implementeert

Het implementeren van database sharding vereist zorgvuldige planning en uitvoering. Er zijn verschillende belangrijke stappen om een soepele overgang en optimale prestaties te garanderen, waaronder:

1. Definieer uw Shardingstrategie

Kies een geschikte shardingsstrategie op basis van de vereisten en kenmerken van uw toepassing (bijv. op bereik gebaseerd, op hash gebaseerd, op lijst gebaseerd). Zorg ervoor dat u de gekozen strategie afstemt op datadistributie- en querypatronen.

Tip: Anticipeer op toekomstige schaalbaarheidsbehoeften - niet alleen wat u vandaag nodig hebt, maar ook wat u nodig kunt hebben naarmate de eisen toenemen.

2. Selecteer Shard Key

Identificeer de shard key, een veld of een reeks velden die worden gebruikt om data over shards te verdelen. De effectiviteit van sharding is sterk afhankelijk van deze sleutel, dus zorg ervoor dat u een sleutel kiest die data gelijkmatig verdeelt.

Tips:

  • Overweeg de kardinaliteit van de gekozen sleutel om hotspots te voorkomen.
  • Evalueer de impact op de queryprestaties.

3. Datapartitionering

Scheid data fysiek in verschillende shards op basis van de gekozen strategie en shard key. Zorg ervoor dat u een partitioneringsschema ontwikkelt dat is afgestemd op de gekozen strategie, zorg voor data-integriteit tijdens het partitioneringsproces en plan voor potentiële veranderingen in datadistributie in de loop van de tijd.

4. Datamigratie

Verplaats bestaande data naar de respectievelijke shards en zorg tegelijkertijd voor minimale downtime en dataconsistentie.

Tips:

  • Gebruik batchprocessen om overweldiging van het systeem te voorkomen.
  • Stel rollback-mechanismen vast in geval van problemen tijdens de migratie.

5. Applicatiecode bijwerken

Pas de applicatiecode aan om met de sharded database te communiceren, waarbij u de shard key in query's opneemt. Zorg voordat u begint voor app-compatibiliteit met de gekozen shardingsstrategie.

Tips:

  • Werk de mechanismen voor het poolen van verbindingen en het routeren van query's bij.
  • Implementeer foutafhandeling voor potentiële scherfstoringen.

6. Overweeg transactiemanagement

Pak de complexiteit van transacties aan waarbij data worden opgeslagen over meerdere shards door gedistribueerd transactiebeheer te implementeren. Zorg ervoor dat u de prestaties optimaliseert zonder dat dit ten koste gaat van de consistentie van de data.

Tip: Altijd plannen voor potentiële transactiefouten en rollbacks.

7. Monitoren en optimaliseren

Monitoringtools helpen u bij het bijhouden van de schervengezondheid, queryprestaties en systeemresources. Zorg er bij het instellen van deze waarschuwingen voor potentiële problemen voor dat u regelmatig de scherfverdeling bekijkt en aanpast om de balans te behouden.

Tip: Anticipeer op potentiële knelpunten en creëer een feedbackloop voor voortdurende verbeteringen.

8. Documenteer de Sharding Architecture

Maak uitgebreide documentatie met een overzicht van de schuivende architectuur, strategieën en belangrijke overwegingen. Het moet de rationale achter belangrijke beslissingen documenteren en richtlijnen bieden voor toekomstige wijzigingen en schaalvergrotingsinspanningen.

Tip: Bied probleemoplossingsdocumentatie voor veelvoorkomende problemen.

Sharding vs. partitionering: Zijn ze hetzelfde?

Sharding en partitionering zijn gerelateerde concepten in de context van gedistribueerde databases, maar ze zijn niet precies hetzelfde. Sharding is een type partitionering dat gedistribueerd en onafhankelijk is, vaak geassocieerd met schalen over meerdere servers of nodes.

Beide omvatten het opdelen van een grote dataset in kleinere, beter beheersbare stukken, maar het belangrijkste verschil ligt in hun doelstellingen en de schaal waarop ze werken. Sharding benadrukt het verspreiden van data over onafhankelijke nodes voor horizontale schaalbaarheid en verbeterde prestaties. Partitionering richt zich op logische organisatie binnen één database voor eenvoudig beheer en query-optimalisatie.

Wat zijn "hotspots" in sharding?

Ongelijkmatige shard-distributie leidt tot "hotspots", waarbij bepaalde shards zwaarder belast zijn dan andere. Dit kan leiden tot prestatieknelpunten. Dit wordt meestal veroorzaakt door slecht gekozen shard keys of ongelijkmatige datadistributie.

Wat zijn de nadelen van database-sharding?

Hoewel database-sharding schaalbaarheid en prestaties biedt, brengt het uitdagingen en nadelen met zich mee. Hier volgen enkele veelvoorkomende nadelen van database-sharding:

  • Complexiteit van implementatie en systeemarchitectuur: Het kan complexiteit introduceren in database-ontwerp, applicatielogica en querymanagement.

  • Ontwikkelingsoverhead: Scherpe databases kunnen ingewikkeldere applicatieontwikkeling en doorlopend onderhoud, updates en debugging vereisen.

  • Complexiteit van transacties: Transacties met meerdere shards gaan gepaard met extra complexiteit en potentiële prestatieoverhead.

  • Beperkte cross-shard sluit zich aan bij: Het uitvoeren van joins over verschillende shards kan complex zijn en kan extra overhead met zich meebrengen. Sommige verschoven strategieën beperken de mogelijkheid om bepaalde soorten joins efficiënt uit te voeren.

  • Query routing overhead: Het doorsturen van vragen naar de juiste shard zorgt voor extra netwerkoverhead. Efficiënte queryroutingmechanismen zijn nodig om prestatieverlies te voorkomen.

  • Scherpe synchronisatie: Het kan een uitdaging zijn om data gesynchroniseerd te houden tussen shards, vooral in realtime of bijna realtime scenario's.

  • Beperkte automatische schaalbaarheid: Het bereiken van naadloze en geautomatiseerde schaalbaarheid in een sharde omgeving is vaak complexer in vergelijking met traditionele schaalbenaderingen.

Kan dataopslag de datasharding verbeteren?

Onderliggende dataopslagtechnologie kan een cruciale rol spelen in de effectiviteit en het gemak van het implementeren van datasharding. Verschillende functies en mogelijkheden kunnen de prestaties, schaalbaarheid en het beheer van gesharde databases beïnvloeden. 

High-performance opslagapparaten, zoals SSD's, kunnen de lees- en schrijfsnelheden van gesharde databases aanzienlijk verbeteren. Ze dragen bij aan het verminderen van de latency en het verbeteren van de algehele reactiesnelheid van het systeem. Daarnaast kan het gebruik van gecontaineriseerde opslagoplossingen, zoals Kubernetes op Portworx ® van Pure Storage, de implementatie en schaalbaarheid van gesharde databases verbeteren. Containerorkestratieplatforms bieden ook mechanismen voor dynamische schaalbaarheid en resourcemanagement.

Conclusie

Databasesharding kan de schaalbaarheid en prestaties in grootschalige dataopslagsystemen verbeteren, maar vereist een zorgvuldige implementatie en aandacht voor uitdagingen. Naarmate bedrijven blijven worstelen met de uitdagingen van big data, is het overwegen en implementeren van databasescherven een waardevol hulpmiddel in de toolbox om efficiëntie en schaalvergroting te stimuleren.

Moderniseer uw storage met Pure Storage® FlashBlade®, de meest geavanceerde all-flash storageoplossing in de branche voor het consolideren van snelle bestands- en objectdata. FlashBlade biedt:

  • Agile scale-out-architectuur: FlashBlade is in staat om tientallen miljarden files en objects te verwerken, terwijl het maximale prestaties en rich dataservices levert.
  • Vereenvoudigde workloadconsolidatie: Implementeer, update en beheer FLASHBLADE met Pure1®.

All-flash prestaties: Profiteer van een enorme verwerkingscapaciteit en parallellisme met consistente multidimensionale prestaties met FLASHBLADE snelle file- en objectopslag.

12/2024
Portworx on Red Hat OpenShift Bare Metal Reference Architecture
A validated architecture and design model to deploy Portworx® on Red Hat OpenShift running on bare metal hosts for use with OpenShift Virtualization.
Referentiearchitectuur
33 pagina's
NEEM CONTACT MET ONS OP
Vragen, opmerkingen?

Hebt u een vraag of opmerking over Pure-producten of certificeringen?  Wij zijn er om te helpen.

Een demo inplannen

Plan een livedemo in en zie zelf hoe Pure kan helpen om jouw data in krachtige resultaten om te zetten. 

Bel ons: 31 (0) 20-201-49-65

Media: pr@purestorage.com

 

Pure Storage

Herikerbergweg 292

1101 CT . Amsterdam Zuidoost

The Netherlands

info@purestorage.com

Sluiten
Uw browser wordt niet langer ondersteund!

Oudere browsers vormen vaak een veiligheidsrisico. Om de best mogelijke ervaring te bieden bij het gebruik van onze site, dient u te updaten naar een van deze nieuwste browsers.