Perbedaan antara Sharding dan Replikasi pada MongoDB


77

Saya hanya bingung tentang Sharding dan Replikasi bahwa cara kerjanya .. Menurut Definisi

Replikasi: Set replika di MongoDB adalah sekelompok proses mongod yang memelihara set data yang sama.

Sharding: Sharding adalah metode untuk menyimpan data di banyak mesin.

Sesuai pemahaman saya jika ada data 75 GB kemudian dengan replikasi (3 server), itu akan menyimpan data 75GB di setiap server berarti 75GB di Server-1, 75GB di server-2 dan 75GB di server-3 .. (koreksi saya jika saya salah) .. dan dengan sharding itu akan disimpan sebagai data 25GB di server-1, data 25GB di server-2 dan data 25GB di server-3. (Benar?) ... tapi kemudian saya menemukan baris ini di tutorial

Pecahan menyimpan data. Untuk memberikan ketersediaan tinggi dan konsistensi data, dalam klaster sharded produksi, setiap pecahan adalah set replika

Sebagai set replika 75GB tetapi beling 25GB maka bagaimana mereka bisa setara ... ini membuat saya banyak bingung ... Saya pikir saya kehilangan sesuatu yang hebat dalam hal ini. Tolong bantu saya dalam hal ini.

Jawaban:


111

Sebuah Replica-Set berarti bahwa Anda memiliki beberapa contoh dari MongoDB yang masing-masing mencerminkan semua data satu sama lain. Set replika terdiri dari satu Master (juga disebut "Primer") dan satu atau lebih Budak (alias Sekunder). Operasi baca dapat dilayani oleh budak mana pun, sehingga Anda dapat meningkatkan kinerja membaca dengan menambahkan lebih banyak budak ke set replika (asalkan aplikasi klien Anda benar-benar dapat menggunakan set-anggota yang berbeda). Tetapi operasi penulisan selalu terjadi pada master dari set replika dan kemudian disebarkan ke budak, jadi penulisan tidak akan menjadi lebih cepat ketika Anda menambahkan lebih banyak budak.

Replika-set juga menawarkan toleransi kesalahan. Ketika salah satu anggota set replika turun, yang lain mengambil alih. Ketika tuan turun, budak akan memilih tuan baru. Untuk alasan itu disarankan untuk penyebaran produktif untuk selalu menggunakan MongoDB sebagai set replika dari setidaknya tiga server, dua di antaranya memegang data (yang ketiga adalah "arbiter" tanpa data yang diperlukan untuk menentukan master baru saat salah satu budak turun).

Sebuah sharded Cluster berarti bahwa setiap pecahan cluster (yang juga bisa menjadi replika-set) mengurus bagian dari data. Setiap permintaan, baik membaca dan menulis, dilayani oleh gugus tempat data berada. Ini berarti bahwa baik kinerja membaca dan menulis dapat ditingkatkan dengan menambahkan lebih banyak pecahan ke cluster. Dokumen mana yang berada di beling yang ditentukan oleh kunci beling dari setiap koleksi. Itu harus dipilih sedemikian rupa sehingga data dapat didistribusikan secara merata di semua cluster dan sehingga jelas untuk pertanyaan paling umum di mana kunci-shard berada (misalnya: ketika Anda sering query oleh user_name, kunci-shard Anda harus mencakup bidang user_namesehingga setiap kueri dapat didelegasikan ke hanya satu beling yang memiliki dokumen itu).

Kekurangannya adalah bahwa toleransi kesalahan menderita. Ketika satu pecahan cluster turun, data apa pun di dalamnya tidak dapat diakses. Untuk alasan itu setiap anggota cluster juga harus menjadi set replika. Ini tidak wajib. Ketika Anda tidak peduli dengan ketersediaan tinggi, beling juga bisa menjadi instance mongod tunggal tanpa replikasi . Tetapi untuk penggunaan produksi Anda harus selalu menggunakan replikasi .

Jadi apa artinya itu sebagai contoh bagi Anda?

                            Sharded Cluster             
             /                    |                    \
      Shard A                  Shard B                  Shard C
        / \                      / \                      / \
+-------+ +---------+    +-------+ +---------+    +-------+ +---------+
|Primary| |Secondary|    |Primary| |Secondary|    |Primary| |Secondary|
|  25GB |=| 25GB    |    | 25 GB |=| 25 GB   |    | 25GB  |=| 25GB    |   
+-------+ +---------+    +-------+ +---------+    +-------+ +---------+

Ketika Anda ingin membagi data Anda 75GB menjadi 3 keping 25GB masing-masing, Anda memerlukan setidaknya 6 server database yang diatur dalam tiga set replika. Setiap set replika terdiri dari dua server yang memiliki data 25GB yang sama.

Anda juga membutuhkan server untuk arbiter dari tiga set replika serta router mongos dan server konfigurasi untuk kluster. Arbiter sangat ringan dan hanya diperlukan ketika anggota replika-set turun, sehingga mereka biasanya dapat berbagi perangkat keras yang sama dengan sesuatu yang lain. Tetapi Mongos router dan config-server harus berlebihan dan di server mereka sendiri.


2
Terima kasih banyak untuk jawaban terinci ... satu pertanyaan lagi ... jika primer tidak berfungsi saat operasi tulis atau baca sedang dilakukan..1) apa penundaan dalam memilih primer dari sekunder dan 2) selama penundaan itu, di mana data akan disimpan sementara?
Saad Saadi

4
@SaadSaadi Proses pemilihan utama dijelaskan dalam dokumentasi . Diperlukan waktu antara 10 dan 12 detik untuk perantara menyadari bahwa primary sedang down. Pemilihan utama itu sendiri biasanya hanya akan memakan waktu milidetik. Kumpulan replika hanya baca sementara tidak ada primer. Upaya apa pun dari aplikasi untuk menulis data selama waktu ini akan gagal.
Philipp

1
@ Pilip: Hanya dua komentar: (1) kunci beling tidak dapat dimodifikasi (yaitu Anda tidak dapat beling menggunakan kunci yang berbeda) dan (2) Anda dapat membaca dari node sekunder dari set replika tetapi konsistensi tergantung dari perhatian penulisan (dalam Agar konsisten, opsi w harus sama dengan set replika sth yang tidak dapat hidup karena setiap beling mungkin memiliki ukuran set replika yang berbeda sengaja atau karena kegagalan simpul).
Mike Argyriou

@ Pilip dapatkah Anda menjawab pertanyaan lanjutan lebih lanjut di dba.stackexchange.com/questions/208482/… ?
user3198603

18
  • Partisi Sharding data-set menjadi bagian-bagian yang terpisah.
  • Replikasi menduplikasi set data.

Dua hal ini dapat ditumpuk karena mereka berbeda. Dengan menggunakan keduanya berarti Anda akan mengatur kumpulan data di beberapa grup replika. Dengan kata lain, Anda mereplikasi pecahan; kumpulan data tanpa pecahan adalah 'beling' tunggal.

Cluster Mongo dengan tiga pecahan dan 3 replika akan memiliki 9 node.

  • 3 set replika 3-simpul.
  • Setiap set replika memiliki satu beling.

Untuk satu file besar, apakah disimpan dalam satu beling atau beberapa beling (sehingga melintasi node)?
Tony

Perhatikan bahwa dalam MongoDB 3.4 atau lebih tinggi, Anda juga memerlukan server mongoDB untuk konfigurasi, dan server tambahan untuk bertindak sebagai router mongos. Ini menjadikan total cluster 3x3 dalam contoh Anda menjadi total 13 server.
dthrasher

9

Dengan sharding , Anda membagi koleksi menjadi beberapa bagian.
Mereplikasi basis data Anda berarti Anda membuat mirror dari kumpulan data Anda.


4

Dari segi fungsionalitas yang disampaikan. Sharding menyediakan skalabilitas dan paralelisme. Replikasi menyediakan ketersediaan


tidak, replikasi hanya juga memberikan skalabilitas & paralelisme mengingat bahwa membaca jauh lebih sering daripada menulis
Kristóf Szalay
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.