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