SQL Academy · Lektion

Strategier til sharding: Range, hash og directory

Sammenlign range-, hash- og directory-baseret sharding, og vælg en shard-nøgle, der balancerer belastningen og forbliver stabil.

Lektion 1 af 414 trin

Strategier til sharding: Range, hash og directory er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad er sharding?

At opdele én logisk database på flere fysiske servere ("shards"), hvor hver server indeholder en delmængde af dataene. Det gør man, når én server ikke længere kan håndtere arbejdsbelastningen.

Sharding ≠ replikering

  • Replikering — de samme data på mange servere (til HA og læseskalering)
  • Sharding — forskellige data på forskellige servere (til skalering af skriveoperationer og kapacitet)

Du kombinerer ofte begge dele: hver shard replikeres for at opnå HA.

Tre shardingstrategier

  • Interval — opdel efter værdiinterval (id 1-1M på shard A, 1M-2M på shard B)
  • Hash — hash shard-nøglen, modulo N
  • Katalog — en separat tabel knytter nøgle → shard

Intervalbaseret sharding

Enkelt og velegnet til tidsserier og ordnede ID'er. Risikoen er varme shards, hvis de nyeste data modtager al trafikken.

-- Conceptually:
-- Shard A: user_id 1 - 1,000,000
-- Shard B: user_id 1,000,001 - 2,000,000
-- Shard C: user_id 2,000,001 - 3,000,000

Hashbaseret sharding

Giver som standard en jævn fordeling. Det er svært at tilføje shards, fordi ændring af antallet af shards flytter alle nøgler:

-- shard_id = hash(user_id) % N
-- N=4: any user_id evenly distributed across 4 shards

Katalogbaseret sharding

En opslagstabel knytter hver nøgle til dens shard:

CREATE TABLE shard_routing (
  user_id BIGINT PRIMARY KEY,
  shard_id INT NOT NULL
);

-- Looking up a user costs a directory query first; cache it.

Konsistent hashing

Modulo-hashing er skrøbeligt, når du tilføjer shards. Konsistent hashing minimerer antallet af nøgler, der skal flyttes:

-- Each shard owns a ring segment.
-- Adding a new shard moves only ~1/N of the keys.

Valg af shard-nøgle

Shard-nøglen bestemmer alt. Gode shard-nøgler:

  • Fordeler data jævnt
  • Findes i de fleste forespørgsler (undgår fan-out på tværs af shards)
  • Er uforanderlige (eller ændres sjældent)
<p>Common picks: user_id, tenant_id, customer_id. Avoid: timestamps for write-heavy workloads (creates hot shards).</p>

Én tenant pr. shard

SaaS med flere tenants: hver tenant placeres på en dedikeret shard. Det er nemt at forstå og enkelt at isolere tenants, der skaber meget trafik.

Design, der kan reshardes

Design med fremtidig ændring af shard-opdelingen for øje:

  • Brug virtuelle shards (f.eks. 1024 logiske, der knyttes til fysiske shards)
  • Gør det nemt at flytte en logisk shard til en anden fysisk server
  • Undgå applikationskode, der hardcoder antallet af shards

Forespørgsler på tværs af shards

Det sværeste problem. JOINs og rapporter på tværs af shards kræver fan-out og aggregeringslogik i applikationen. Det gennemgås i næste lektion.

Transaktioner på tværs af shards

Atomiske transaktioner på tværs af shards kræver two-phase commit (2PC) eller sagaer. Det typiske råd er at designe, så transaktioner forbliver inden for én shard.

Opsummering

Der er tre strategier; vælg ud fra formen på din trafik.

  • Interval — enkelt, men med risiko for varme shards
  • Hash — jævn fordeling, men ufleksibelt
  • Katalog — fleksibelt, men tilfører forsinkelse
  • Konsistent hashing giver en gradvis ændring af shard-opdelingen

Hurtigt tjek

Du opdeler en users-tabel med hash(user_id). Du går fra 4 shards til 5. Hvor mange nøgler skal flyttes?

Gratis at komme i gang

Lær SQL med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
46
Lektioner
183

Ofte stillede spørgsmål

Er lektionen “Strategier til sharding: Range, hash og directory” gratis?

Ja — hele teksten til “Strategier til sharding: Range, hash og directory” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Strategier til sharding: Range, hash og directory”?

Sammenlign range-, hash- og directory-baseret sharding, og vælg en shard-nøgle, der balancerer belastningen og forbliver stabil. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på SQL Academy?

Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Strategier til sharding: Range, hash og directory”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne SQL Academy-lektion?

Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Strategier til sharding: Range, hash og directory
  2. Forespørgsler på tværs af shards: Det svære problem
  3. Citus og distribueret Postgres
  4. Hvornår De IKKE skal bruge sharding
← Tilbage til SQL Academy