Strategi Pembahagian: Julat, Hash, Direktori
Bandingkan pembahagian berasaskan julat, hash dan direktori, lalu pilih kunci bahagian yang mengimbangi beban dan kekal stabil.
Strategi Pembahagian: Julat, Hash, Direktori ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 1 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.
Apakah Itu Pemecahan?
Memisahkan satu pangkalan data logik merentas beberapa pelayan fizikal ("pecahan"), dengan setiap satunya menyimpan subset data. Langkah ini dilakukan apabila satu pelayan tidak lagi mampu mengendalikan beban kerja.
Pemecahan ≠ Replikasi
- Replikasi — data yang sama pada banyak pelayan (untuk HA dan penskalaan bacaan)
- Pemecahan — data yang berbeza pada pelayan yang berbeza (untuk penskalaan tulisan dan kapasiti)
Anda sering menggabungkan kedua-duanya: setiap pecahan direplikasi untuk HA.
Tiga Strategi Pemecahan
- Julat — pecahkan berdasarkan julat nilai (id 1-1M pada pecahan A, 1M-2M pada pecahan B)
- Cincangan — cincang kunci pecahan, kemudian ambil baki bahagi N
- Direktori — jadual berasingan memetakan kunci → pecahan
Pemecahan Julat
Mudah dan berfungsi dengan baik untuk siri masa serta id tersusun. Risikonya ialah pecahan panas jika data terkini menerima semua trafik.
-- 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,000Pemecahan Cincangan
Secara lalai, pengagihan adalah sekata. Sukar untuk menambah pecahan (pemecahan semula akan memindahkan semua kunci):
-- shard_id = hash(user_id) % N
-- N=4: any user_id evenly distributed across 4 shardsPemecahan Direktori
Jadual carian memetakan setiap kunci kepada pecahannya:
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.Pencincangan Konsisten
Pencincangan modulo rapuh apabila pecahan ditambah. Pencincangan konsisten meminimumkan kunci yang perlu dipindahkan:
-- Each shard owns a ring segment.
-- Adding a new shard moves only ~1/N of the keys.Memilih Kunci Pecahan
Kunci pecahan menentukan segala-galanya. Kunci pecahan yang baik:
- Mengagihkan data secara sekata
- Wujud dalam kebanyakan query (mengelakkan penyebaran merentas pecahan)
- Tidak berubah (atau jarang berubah)
<p>Common picks: user_id, tenant_id, customer_id. Avoid: timestamps for write-heavy workloads (creates hot shards).</p>Satu Penyewa Setiap Pecahan
SaaS berbilang penyewa: setiap penyewa ditempatkan pada pecahan khusus. Mudah difahami dan memudahkan pengasingan penyewa yang menghasilkan beban tinggi.
Reka Bentuk yang Boleh Dipecahkan Semula
Reka bentuk dengan mengambil kira pemecahan semula pada masa hadapan:
- Gunakan pecahan maya (contohnya, 1024 pecahan logik yang dipetakan kepada pecahan fizikal)
- Permudahkan pemindahan pecahan logik ke pelayan fizikal yang lain
- Elakkan kod aplikasi yang menetapkan bilangan pecahan secara keras
Query Merentas Pecahan
Masalah yang paling sukar. JOIN dan laporan merentas pecahan memerlukan logik penyebaran serta pengagregatan dalam aplikasi. Perkara ini akan dibincangkan dalam pelajaran seterusnya.
Transaksi Merentas Pecahan
Transaksi atomik merentas pecahan memerlukan komit dua fasa (2PC) atau saga. Nasihat lazim: reka bentuk supaya transaksi kekal dalam satu pecahan.
Ringkasan
Tiga strategi; pilih berdasarkan bentuk trafik anda.
- Julat — mudah, berisiko menghasilkan pecahan panas
- Cincangan — sekata tetapi tegar
- Direktori — fleksibel tetapi menambah kelewatan
- Pencincangan konsisten untuk pemecahan semula yang lancar
Semakan Pantas
Anda memecahkan jadual pengguna berdasarkan hash(user_id). Anda beralih daripada 4 pecahan kepada 5. Berapa banyak kunci yang mesti dipindahkan?
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 “Strategi Pembahagian: Julat, Hash, Direktori” percuma?
Ya — teks penuh “Strategi Pembahagian: Julat, Hash, Direktori” 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 “Strategi Pembahagian: Julat, Hash, Direktori”?
Bandingkan pembahagian berasaskan julat, hash dan direktori, lalu pilih kunci bahagian yang mengimbangi beban dan kekal stabil. 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 1 daripada 4.
Berapa lamakah pelajaran “Strategi Pembahagian: Julat, Hash, Direktori” 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
- Strategi Pembahagian: Julat, Hash, Direktori
- Pertanyaan Merentas Bahagian: Masalah Sukar
- Citus dan Postgres Teragih
- Bila TIDAK Perlu Membahagi