0Pricing
SQL Academy · Pelajaran

Kueri Lintas Shard: Masalah yang Sulit

Pahami mengapa join dan transaksi lintas shard menjadi masalah tersulit dalam basis data terdistribusi, serta pola untuk meminimalkannya

Kueri Lintas Shard: Masalah yang Sulit adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

Biaya Pemecahan Data

Pemecahan data meningkatkan skala penulisan dan kapasitas, tetapi membuat kueri yang mencakup beberapa pecahan menjadi sulit: setiap kueri lintas pecahan harus disebarkan ke semua pecahan.

Kueri Satu Pecahan Itu Mudah

Jika kunci pecahan terdapat dalam klausa WHERE, perute mengirim satu kueri ke satu pecahan:

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

Kueri Penyebaran

Tanpa kunci pecahan, perute mengueri setiap pecahan lalu 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.

Agregasi dengan Penyebaran

Untuk COUNT/SUM/AVG: dapatkan hasil sebagian dari setiap pecahan, lalu gabungkan di perute 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 Lintas Pecahan

Jika kedua sisi dipecah berdasarkan kunci yang sama (terlokasi bersama), JOIN berlangsung secara lokal pada pecahan. Jika tidak, hal ini pada dasarnya mustahil dilakukan dalam skala besar.

Tabel Referensi (Direplikasi di Mana-Mana)

Tabel "pencarian" kecil direplikasi ke setiap pecahan, sehingga JOIN dengannya tetap berlangsung secara lokal. Citus menyebutnya "tabel referensi".

Menghindari Pola Lintas Pecahan

Trik desain skema:

  • Denormalisasi—duplikasi data induk ke pecahan yang berisi data anak
  • Gunakan kunci pecahan di mana-mana—bahkan ketika dianggap "tidak perlu"
  • Hitung laporan terlebih dahulu dalam basis data analitik terpisah

Paginasi Lintas Pecahan

OFFSET 1000 LIMIT 10 pada banyak pecahan sangat buruk—setiap pecahan harus menghasilkan 1010 baris. Gunakan paginasi berbasis kunci sebagai gantinya.

Transaksi Terdistribusi

Komit dua fase (2PC) mengoordinasikan komit atomik di seluruh pecahan. Prosesnya lambat dan rapuh saat terjadi pemisahan jaringan. Dalam praktiknya, rancang untuk pola "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 dengan Trafik Tinggi

Pengguna terkenal atau produk yang menjadi viral—trafik yang terkonsentrasi pada satu pecahan dapat menggagalkan penskalaan Anda. Deteksi lalu pecah lagi (pemecahan di dalam pecahan) atau pindahkan.

Kunci Asing Lintas Pecahan

Kunci asing pada RDBMS tidak mencakup beberapa pecahan. Terapkan integritas referensial dalam aplikasi atau terima konsistensi yang tercapai kemudian untuk hubungan lintas pecahan.

Ringkasan

Pemecahan data mengalihkan kesulitan dari "meningkatkan skala penulisan" menjadi "membentuk kueri agar tetap lokal pada pecahan".

  • Kueri satu pecahan berlangsung cepat
  • Penyebaran berlangsung lambat
  • Denormalisasi agar pekerjaan tetap lokal
  • Tabel referensi untuk dimensi bersama
  • Gunakan saga sebagai pengganti 2PC

Pemeriksaan Singkat

Mengapa SELECT tanpa kunci pecahan dalam WHERE mahal pada basis data yang dipecah?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kueri Lintas Shard: Masalah yang Sulit” gratis?

Ya — teks lengkap “Kueri Lintas Shard: Masalah yang Sulit” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kueri Lintas Shard: Masalah yang Sulit”?

Pahami mengapa join dan transaksi lintas shard menjadi masalah tersulit dalam basis data terdistribusi, serta pola untuk meminimalkannya Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Kueri Lintas Shard: Masalah yang Sulit” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Strategi Sharding: Rentang, Hash, Direktori
  2. Kueri Lintas Shard: Masalah yang Sulit
  3. Citus dan Postgres Terdistribusi
  4. Kapan TIDAK Melakukan Sharding
← Kembali ke SQL Academy