Mối quan tâm ghi mặc định trong MongoDB là w:1
từ xa trở lại như MongoDB 2.2 vào năm 2012.
Có ba cài đặt khác nhau mà bạn có thể sử dụng để thiết lập mối quan tâm ghi trong các phiên bản MongoDB hiện tại (phiên bản 3.2.6 và mới hơn):
-
w
thiết lập :có bao nhiêu nút nên xác nhận việc ghi trước khi tuyên bố nó thành công. Mặc định là 1, nghĩa là đủ khả năng xác nhận của nút chính. -
j
thiết lập :các bài viết có phải được ghi vào nhật ký trước khi được công nhận không? Mặc định phụ thuộc vàowriteConcernMajorityJournalDefault
. - writeConcernMajorityJournalDefault
:nếu bạn chỉ định
w:majority
ghi cài đặt mối quan tâm cho việc ghi của bạn mà không đặtj
,j
ngụ ý là gì giá trị? Mặc định làtrue
(các bài viết nên được ghi vào nhật ký trong phần lớn các nút biểu quyết trước khi nó được công nhận).
Ngoài ra còn có wtimeout
thiết lập
để cấu hình MongoDB nên đợi bao lâu để thỏa mãn mối quan tâm về việc ghi trước khi thông báo cho khách hàng rằng việc ghi chưa được chấp nhận. Nếu không, việc ghi chờ khi mối quan tâm viết được thỏa mãn có thể đợi mãi mãi thay vì không thành công.
Cài đặt đặc biệt ở đây là w:majority
. Điều này có nghĩa là việc ghi phải phổ biến đến phần lớn các nút biểu quyết (và cả các tạp chí của họ) trong một tập hợp bản sao để được thừa nhận. Đây được cho là cài đặt an toàn nhất trong khi vẫn mang lại hiệu suất tốt, bởi vì:
- Nó ngăn các ghi đã xác nhận được quay lại trong trường hợp không thành công.
- Nó điều chỉnh thông lượng của ứng dụng để nó không gửi ghi nhanh hơn những gì mà bộ bản sao có thể xử lý (do các hạn chế về phần cứng, tình hình mạng, v.v.).
Như bạn đã tưởng tượng, các nút bỏ phiếu không bao gồm trọng tài . Do đó, trong một tập hợp bản sao có thiết lập trọng tài chính-phụ, w:majority
có thể thất bại trong trường hợp:
- Một trong những nút mang dữ liệu đang ngoại tuyến vì một số lý do.
- Tập hợp bản sao vẫn trực tuyến với cấu trúc chính có thể ghi, vì cấu trúc liên kết hiện là trọng tài chính-ngoại tuyến.
- Viết bằng
w:1
sẽ thành công như bình thường, nhưng những lần ghi đó có thể bị lùi lại (vì nó không được ghi cho phần lớn các nút chứa dữ liệu biểu quyết). - Vì trọng tài không mang theo dữ liệu,
w:majority
ghi sẽ không thành công (hoặc chờ vô thời hạn) vì trọng tài được tính là một nút biểu quyết.
Vì lý do này, bạn không nên sử dụng trọng tài nếu bạn định sử dụng w:majority
trong ứng dụng của bạn.
Xin lưu ý rằng việc sử dụng một trọng tài trong một tập hợp bản sao 3 nút tạo thành một phân đoạn trong một cụm phân đoạn cũng không được khuyến khích, vì di chuyển phân đoạn yêu cầu w:majority
. Việc gặp lỗi nút mang dữ liệu trong một phân đoạn sẽ gây bất lợi cho các hoạt động di chuyển phân đoạn.