SQL Academy · Oppitunti

Shardien väliset kyselyt: vaikea ongelma

Ymmärrä, miksi shardien väliset liitokset ja transaktiot ovat hajautettujen tietokantojen vaikein ongelma, sekä niitä minimoivat mallit.

Oppitunti 2/413 vaihetta

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 transactions

Kuumat 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?

Aloita maksutta

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

  1. Sharding-strategiat: väli, hash ja hakemisto
  2. Shardien väliset kyselyt: vaikea ongelma
  3. Citus ja hajautettu Postgres
  4. Milloin shardingia EI pidä käyttää
← Takaisin: SQL Academy