SQL Academy · Pelajaran

Pertanyaan Merentas Bahagian: Masalah Sukar

Fahami sebab gabungan dan transaksi merentas bahagian merupakan masalah paling sukar dalam pangkalan data teragih, serta corak yang meminimumkannya.

Pelajaran 2 daripada 413 langkah

Pertanyaan Merentas Bahagian: Masalah Sukar ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Kos Tambahan Pemecahan

Pemecahan menskalakan operasi tulis dan kapasiti tetapi menyukarkan query yang merentasi pecahan: setiap query merentas pecahan perlu disebarkan.

Query Satu Pecahan Itu Mudah

Jika kunci pecahan terdapat dalam klausa WHERE, penghala menghantar satu query kepada satu pecahan:

-- shard_id = hash(user_id) % N
SELECT * FROM orders WHERE user_id = 42;
-- Router computes shard, sends one query, gets one result.

Query Penyebaran

Tanpa kunci pecahan, penghala membuat query kepada setiap pecahan dan menggabungkan hasilnya:

-- 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.

Pengagregatan Penyebaran

Untuk COUNT/SUM/AVG: dapatkan hasil separa daripada setiap pecahan, kemudian gabungkannya dalam penghala atau aplikasi:

-- 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.

JOIN Merentas Pecahan

Jika kedua-dua bahagian dipecahkan berdasarkan kunci yang sama (ditempatkan bersama), JOIN itu setempat pada pecahan. Jika tidak, operasi ini pada asasnya mustahil pada skala besar.

Jadual Rujukan (Direplikasi di Semua Tempat)

Jadual "carian" yang kecil direplikasi kepada setiap pecahan supaya JOIN kepadanya kekal setempat. Citus memanggilnya "jadual rujukan".

Mengelakkan Corak Merentas Pecahan

Trik reka bentuk skema:

  • Nyahnormalisasi — gandakan data induk ke dalam pecahan yang mengandungi data anak
  • Gunakan kunci pecahan di semua tempat — walaupun ketika "tidak diperlukan"
  • Pra-kira laporan dalam pangkalan data analitik yang berasingan

Penomboran Halaman Merentas Pecahan

OFFSET 1000 LIMIT 10 merentas banyak pecahan sangat tidak cekap — setiap pecahan mesti menghasilkan 1010 baris. Sebaliknya, gunakan penomboran halaman berasaskan kunci.

Transaksi Teragih

Komit dua fasa (2PC) menyelaraskan komit atomik merentas pecahan. Ia perlahan dan rapuh apabila berlaku pemisahan rangkaian. Dalam amalan, reka bentuk untuk corak "saga":

// 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

Pecahan Panas

Pengguna selebriti atau produk yang tular — trafik tertumpu pada satu pecahan boleh menggagalkan penskalaan anda. Kesan dan pecahkan lagi (pemecahan kecil) atau pindahkannya.

Kunci Asing Merentas Pecahan

Kunci asing RDBMS tidak merentasi pecahan. Anda menguatkuasakan integriti rujukan dalam aplikasi atau menerima ketekalan akhirnya untuk hubungan merentas pecahan.

Ringkasan

Pemecahan mengalihkan kesukaran daripada "menskalakan operasi tulis" kepada "membentuk query supaya kekal setempat pada pecahan".

  • Query satu pecahan adalah pantas
  • Penyebaran adalah perlahan
  • Nyahnormalisasi untuk mengekalkan kerja setempat
  • Jadual rujukan untuk dimensi yang dikongsi
  • Saga menggantikan 2PC

Semakan Pantas

Mengapakah SELECT tanpa kunci pecahan dalam WHERE mahal pada pangkalan data yang dipecahkan?

Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
46
Pelajaran
183

Soalan Lazim

Adakah pelajaran “Pertanyaan Merentas Bahagian: Masalah Sukar” percuma?

Ya — teks penuh “Pertanyaan Merentas Bahagian: Masalah Sukar” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pertanyaan Merentas Bahagian: Masalah Sukar”?

Fahami sebab gabungan dan transaksi merentas bahagian merupakan masalah paling sukar dalam pangkalan data teragih, serta corak yang meminimumkannya. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Pertanyaan Merentas Bahagian: Masalah Sukar” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Strategi Pembahagian: Julat, Hash, Direktori
  2. Pertanyaan Merentas Bahagian: Masalah Sukar
  3. Citus dan Postgres Teragih
  4. Bila TIDAK Perlu Membahagi
← Kembali ke SQL Academy