Bộ bản sao có nghĩa là bạn có nhiều phiên bản MongoDB, mỗi phiên bản phản ánh tất cả dữ liệu của nhau. Một bộ bản sao bao gồm một Master (còn được gọi là "Chính") và một hoặc nhiều nô lệ (còn gọi là Trung học). Hoạt động đọc có thể được phục vụ bởi bất kỳ nô lệ nào, vì vậy bạn có thể tăng hiệu suất đọc bằng cách thêm nhiều nô lệ vào bộ bản sao (với điều kiện ứng dụng khách của bạn có khả năng thực sự sử dụng các thành viên khác nhau). Nhưng các thao tác ghi luôn diễn ra trên tổng thể của bản sao và sau đó được truyền tới các nô lệ, vì vậy việc ghi sẽ không nhanh hơn khi bạn thêm nhiều nô lệ.
Bản sao cũng cung cấp khả năng chịu lỗi. Khi một trong các thành viên của bộ bản sao bị hỏng, những người khác sẽ tiếp quản. Khi chủ xuống, nô lệ sẽ bầu một chủ mới. Vì lý do đó, đề xuất triển khai hiệu quả là luôn sử dụng MongoDB như một bộ bản sao của ít nhất ba máy chủ, hai trong số chúng giữ dữ liệu (máy thứ ba là "trọng tài" không cần dữ liệu để xác định chủ mới khi một trong những nô lệ đi xuống).
Một cụm Sharded có nghĩa là mỗi phân đoạn của cụm (mà cũng có thể là một bản sao-set) chăm sóc một phần của dữ liệu. Mỗi yêu cầu, cả đọc và ghi, được phục vụ bởi cụm nơi chứa dữ liệu. Điều này có nghĩa là cả hiệu suất đọc và ghi có thể được tăng lên bằng cách thêm nhiều phân đoạn vào một cụm. Tài liệu nào nằm trên phân đoạn nào được xác định bởi khóa phân đoạn của mỗi bộ sưu tập. Nó nên được chọn theo cách mà dữ liệu có thể được phân phối đồng đều trên tất cả các cụm và sao cho rõ ràng cho các truy vấn phổ biến nhất nơi khóa shard nằm (ví dụ: khi bạn thường xuyên truy vấn user_name
, khóa shard của bạn sẽ bao gồm trường user_name
để mỗi truy vấn có thể được ủy quyền cho chỉ một phân đoạn có tài liệu đó).
Hạn chế là khả năng chịu lỗi. Khi một phân đoạn của cụm bị hỏng, mọi dữ liệu trên đó đều không thể truy cập được. Vì lý do đó, mỗi thành viên của cụm cũng phải là một bộ bản sao. Điều này là không bắt buộc. Khi bạn không quan tâm đến tính sẵn sàng cao, phân đoạn cũng có thể là một trường hợp mongod duy nhất mà không cần sao chép . Nhưng để sử dụng sản xuất, bạn nên luôn luôn sử dụng nhân rộng .
Vì vậy, điều đó có nghĩa gì cho ví dụ của bạn?
Sharded Cluster
/ | \
Shard A Shard B Shard C
/ \ / \ / \
+-------+ +---------+ +-------+ +---------+ +-------+ +---------+
|Primary| |Secondary| |Primary| |Secondary| |Primary| |Secondary|
| 25GB |=| 25GB | | 25 GB |=| 25 GB | | 25GB |=| 25GB |
+-------+ +---------+ +-------+ +---------+ +-------+ +---------+
Khi bạn muốn chia dữ liệu 75GB của mình thành 3 phân đoạn 25 GB mỗi dữ liệu, bạn cần ít nhất 6 máy chủ cơ sở dữ liệu được tổ chức thành ba bộ sao. Mỗi bộ bản sao bao gồm hai máy chủ có cùng 25GB dữ liệu.
Bạn cũng cần các máy chủ cho các trọng tài của ba bộ bản sao cũng như bộ định tuyến mongos và máy chủ cấu hình cho cụm. Các trọng tài rất nhẹ và chỉ cần thiết khi một thành viên thiết lập bản sao bị hỏng, vì vậy họ thường có thể chia sẻ cùng một phần cứng với thứ khác. Nhưng bộ định tuyến và máy chủ cấu hình Mongos nên dự phòng và trên các máy chủ của riêng họ.