Shardien väliset kyselyt: vaikea ongelma
Ymmärrä, miksi shardien väliset liitokset ja transaktiot ovat hajautettujen tietokantojen vaikein ongelma, sekä niitä minimoivat mallit.
Shardien väliset kyselyt: vaikea ongelma on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.
Shardauksen hinta
Shardaus skaalaa kirjoituksia ja kapasiteettia, mutta tekee shardit ylittävistä kyselyistä hankalia: jokainen shardien välinen kysely on fan-out.
Yhden shardin kyselyt ovat helppoja
Jos shard-avain on mukana WHERE-lauseessa, reititin lähettää yhden kyselyn yhdelle shardille:
-- shard_id = hash(user_id) % N
SELECT * FROM orders WHERE user_id = 42;
-- Router computes shard, sends one query, gets one result.Fan-out-kyselyt
Ilman shard-avainta reititin kysyy jokaiselta shardilta ja yhdistää tulokset:
-- WHERE status = 'paid' — no user_id
SELECT * FROM orders WHERE status = 'paid' ORDER BY created_at DESC LIMIT 100;
-- Must query all N shards, merge results, sort, take top 100.Fan-out-aggregaatit
COUNT/SUM/AVG-kyselyissä haetaan osatulokset jokaiselta shardilta ja yhdistetään ne reitittimessä tai sovelluksessa:
-- On each shard:
SELECT COUNT(*), SUM(total) FROM orders;
-- Aggregator:
final_count = SUM(counts), final_sum = SUM(sums)
-- AVG is trickier — need SUM and COUNT, can't average averages.Shardien väliset JOIN-operaatiot
Jos molemmat puolet shardataan samalla avaimella (co-located), JOIN suoritetaan shardin sisällä. Muuten se on käytännössä mahdoton suuressa mittakaavassa.
Viitetaulut (replikoitu kaikkialle)
Pienet "haku"-taulut replikoidaan jokaiselle shardille, joten JOIN-operaatiot niihin pysyvät paikallisina. Citus kutsuu niitä "reference table" -tauluiksi.
Shardien välisten rakenteiden välttäminen
Skeeman suunnittelun keinoja:
- Denormalisoi — kopioi ylätason tiedot lapsen sisältävälle shardille
- Käytä shard-avainta kaikkialla — myös silloin, kun se vaikuttaa "tarpeettomalta"
- Esilaske raportit erillisessä analytiikkatietokannassa
Sivutus shardien yli
OFFSET 1000 LIMIT 10 useilla shardeilla on surkea ratkaisu — jokaisen shardin on tuotettava 1010 riviä. Käyttäkää sen sijaan keyset-sivutusta.
Hajautetut transaktiot
Two-phase commit (2PC) koordinoi atomiset commitit shardien välillä. Se on hidas ja osioissa hauras. Käytännössä suunnitelkaa järjestelmä "saga"-mallien varaan:
// Saga pattern (conceptual):
// 1. Local TX on shard A: mark as pending, log
// 2. RPC to shard B: do its part
// 3. Local TX on shard A: mark as committed
// 4. On failure: compensating transactionsKuumat shardit
Julkkiskäyttäjä tai viraali tuote — yhdelle shardille keskittyvä liikenne romahduttaa skaalautuvuuden. Havaitkaa tilanne ja jakakaa shardi osiin (sub-sharding) tai siirtäkää se.
Shardien väliset viiteavaimet
RDBMS:n viiteavaimet eivät ulotu shardien yli. Viite-eheys on varmistettava sovelluksessa tai shardien välisten suhteiden osalta on hyväksyttävä eventual consistency.
Kertaus
Shardaus siirtää vaikeuden kirjoitusten skaalaamisesta kyselyiden muotoiluun niin, että työ pysyy shardin sisällä.
- Yhden shardin kyselyt ovat nopeita
- Fan-out on hidas
- Denormalisoi pitääksesi työn paikallisena
- Viitetaulut yhteisiä dimensioita varten
- 2PC:n sijaan sagat
Pikatarkistus
Miksi SELECT-kysely ilman WHERE-lauseen shard-avainta on kallis shardatussa tietokannassa?
Opi SQL tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 46
- Oppitunnit
- 183
Usein kysytyt kysymykset
Onko oppitunti ”Shardien väliset kyselyt: vaikea ongelma” ilmainen?
Kyllä – oppitunnin ”Shardien väliset kyselyt: vaikea ongelma” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Shardien väliset kyselyt: vaikea ongelma”?
Ymmärrä, miksi shardien väliset liitokset ja transaktiot ovat hajautettujen tietokantojen vaikein ongelma, sekä niitä minimoivat mallit. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Shardien väliset kyselyt: vaikea ongelma”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?
Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Sharding-strategiat: väli, hash ja hakemisto
- Shardien väliset kyselyt: vaikea ongelma
- Citus ja hajautettu Postgres
- Milloin shardingia EI pidä käyttää