Masalah penulisan default di MongoDB adalah w:1
dari MongoDB 2.2 pada tahun 2012.
Ada tiga pengaturan berbeda yang dapat Anda gunakan untuk menyiapkan masalah penulisan di versi MongoDB saat ini (versi 3.2.6 dan yang lebih baru):
w
pengaturan :berapa banyak node yang harus mengakui penulisan sebelum menyatakannya berhasil. Defaultnya adalah 1, artinya pengakuan node utama sudah cukup.j
pengaturan :apakah tulisan harus dijurnal sebelum diakui? Default tergantung padawriteConcernMajorityJournalDefault
.- writeConcernMajorityJournalDefault
:jika Anda menentukan
w:majority
tulis pengaturan perhatian untuk tulisan Anda tanpa mengaturj
, apa yang tersiratj
nilai? Standarnya adalahtrue
(penulisan harus dijurnal di sebagian besar simpul pemungutan suara sebelum diakui).
Ada juga wtimeout
pengaturan
untuk mengonfigurasi berapa lama MongoDB harus menunggu hingga masalah penulisan dipenuhi sebelum memberi tahu klien bahwa penulisan belum diakui. Jika tidak, menulis menunggu kekhawatiran menulis puas bisa menunggu selamanya alih-alih gagal.
Pengaturan khusus di sini adalah w:majority
. Ini berarti bahwa penulisan harus menyebar ke mayoritas node pemungutan suara (dan juga jurnal mereka) dalam set replika untuk diakui. Ini bisa dibilang setting paling aman sekaligus memberikan performa yang baik, karena:
- Ini mencegah penulisan yang diakui untuk dibatalkan jika terjadi kegagalan.
- Ini mengatur throughput aplikasi sehingga tidak akan mengirim penulisan lebih cepat daripada yang dapat ditangani oleh set replika (karena kendala perangkat keras, situasi jaringan, dll.).
Seperti yang Anda bayangkan, node pemungutan suara menyertakan arbiter . Jadi, dalam set replika dengan pengaturan arbiter primer-sekunder, w:majority
bisa gagal dalam skenario di mana:
- Salah satu node pembawa data sedang offline karena beberapa alasan.
- Set replika masih online dengan primer yang dapat ditulis, karena topologinya sekarang menjadi arbiter-utama-offline.
- Menulis dengan
w:1
akan berhasil seperti biasa, tetapi penulisan tersebut dapat dibatalkan (karena tidak ditulis ke sebagian besar node yang memuat data voting). - Karena arbiter tidak membawa data,
w:majority
penulisan akan gagal (atau menunggu tanpa batas waktu) karena arbiter dihitung sebagai simpul pemungutan suara.
Karena alasan ini, tidak disarankan menggunakan arbiter jika Anda berencana menggunakan w:majority
dalam aplikasi Anda.
Harap dicatat bahwa menggunakan arbiter dalam set replika 3-simpul yang membentuk pecahan dalam kluster pecahan juga tidak disarankan, karena perpindahan potongan memerlukan w:majority
. Kegagalan node pembawa data dalam satu pecahan akan merusak operasi migrasi chunk.