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.
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,000Hashbaseret 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 shardsKatalogbaseret 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?
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
- Strategier til sharding: Range, hash og directory
- Forespørgsler på tværs af shards: Det svære problem
- Citus og distribueret Postgres
- Hvornår De IKKE skal bruge sharding