2013-02-06 29 views
6

Đối với quy mô/failover mongodb sử dụng một "bản sao thiết lập", nơi có một chính và một hoặc nhiều máy chủ thứ cấp. Tiểu học được sử dụng để viết. Thứ hai được sử dụng để đọc. Đây là khá nhiều mô hình nô lệ chủ được sử dụng trong lập trình SQL. Nếu tiểu học đi xuống trung học trong cụm thứ hai diễn ra. Vì vậy, vấn đề chia tỷ lệ theo chiều ngang và chuyển đổi dự phòng được thực hiện. Tuy nhiên, đây không phải là một giải pháp cho phép sharding nó có vẻ. Phân đoạn đúng chỉ chứa một phần của toàn bộ dữ liệu, vì vậy nếu phần thứ hai trong một bản sao được phân chia như thế nào thì nó có thể đủ điều kiện là chính khi nó không có tất cả dữ liệu cần thiết để phục vụ các yêu cầu?MongoDB thực hiện đồng thời sao chép và nhân bản như thế nào?

Chúng ta sẽ không phải có một bản sao được đặt cho từng phân đoạn không?

Đây rõ ràng là câu hỏi dành cho người mới bắt đầu để một liên kết trực quan hoặc minh họa cách thức thực hiện điều này sẽ hữu ích.

+0

Phân đoạn đó sẽ có dữ liệu cần thiết để đáp ứng các yêu cầu được gửi đến nó và bạn có thể có bản sao cho mỗi phân đoạn, đây là hướng dẫn về sách dạy nấu ăn: http://cookbook.mongodb.org/operations/convert-replica- set-to-replicated-shard-cluster/ – Sammaye

Trả lời

3

Giả định của bạn là chính xác, mỗi phân đoạn chứa một bộ bản sao riêng biệt. Khi một yêu cầu ghi đến, MongoS tìm thấy phân đoạn đúng cho nó dựa trên khóa phân đoạn và dữ liệu được ghi vào Primary của bộ bản sao có trong phân đoạn đó. Điều này dẫn đến việc ghi tỉ lệ, như một khóa phân đoạn (được chọn) sẽ phân phối ghi trên tất cả các phân đoạn của bạn.

+0

Cảm ơn bạn! Nó có thể được thực hiện theo cách ngược lại không? Mỗi máy chủ trong một nhóm bản sao được thiết lập. Mô tả chi tiết: Giả sử chúng tôi có một bộ bản sao. Tuyệt vời, chúng tôi có khả năng dịch vụ nhiều lần đọc hơn, chúng tôi đã chuyển đổi dự phòng. Bây giờ vấn đề của chúng tôi là kích thước của dữ liệu trên mỗi máy chủ (mà tôi gọi là máy chủ) là nhận được khá lớn. Vì vậy, chúng tôi phân tích dữ liệu trên mỗi máy chủ. Đó không phải là điều trái ngược với những gì bạn mô tả? Hoặc là nó từ điểm thực hiện xem nó là tất cả cùng một "điều"? –

+0

@alexsundukovskiy Tôi không chắc chắn ý của bạn là gì nhưng bạn không thể phân phát bản sao được đặt – Sammaye

+0

@alexsundukovskiy Giả sử SHARD_KEY có các giá trị có thể {A, B, C, D} và bạn có 2 mảnh. Mỗi phân đoạn có bộ bản sao gồm 3 máy. Về mặt lý thuyết, tài liệu của bạn nên được phân phối đồng đều trên SHARD_KEY của bạn, tức làsố lượng tài liệu đến với SHARD_KEY = A, SHARD_KEY = B vv phải bằng nhau. Hãy nói rằng tình trạng hạnh phúc này tiếp tục trong một thời gian. Sau đó, một trong 2 điều bắt đầu xảy ra: (tiếp theo dưới đây) –

0

Bạn thường sẽ ánh xạ từng mảnh riêng lẻ để tách các bộ bản sao riêng biệt. Xem http://docs.mongodb.org/manual/core/sharded-clusters/ để biết tổng quan về sự cố định MongoDB.

+0

Cảm ơn bạn, tôi tự hỏi nếu nó bao giờ xảy ra theo cách khác xung quanh. Nói cách khác, chúng ta có thể có mỗi nút trong bản sao được thiết lập không? Và nếu không có gì sai khi làm điều đó? –

+0

Tôi không chắc tôi hiểu câu hỏi của bạn. Bạn phân tích các bộ sưu tập trong một cơ sở dữ liệu, và sharding chạy trên các bộ bản sao. MongoDB không có một khái niệm về sharding một nút. Bạn chắc chắn có thể chọn phân phối tất cả các bộ sưu tập trong tất cả các cơ sở dữ liệu của bạn, tuy nhiên đó có thể là quá mức cần thiết tùy thuộc vào khối lượng công việc của bạn. – epc

+0

Giả sử chúng ta có một bộ bản sao. Tuyệt vời, chúng tôi có khả năng dịch vụ nhiều lần đọc hơn, chúng tôi đã chuyển đổi dự phòng. Bây giờ vấn đề của chúng tôi là kích thước của dữ liệu trên mỗi máy chủ (mà tôi gọi là nút) là nhận được khá lớn. Vì vậy, chúng tôi phân tích dữ liệu trên mỗi máy chủ. Đó không phải là điều trái ngược với những gì bạn mô tả? Hoặc là nó từ điểm thực hiện xem nó là tất cả cùng một "điều"? –

1

Phân đoạn là tổng của thứ hai chính (bộ bản sao), vì vậy có, bạn sẽ phải có một bản sao được đặt trong mỗi phân đoạn.

Phần của toàn bộ dữ liệu được giữ trong tài liệu chính và được chia sẻ với người thứ hai để duy trì sự nhất quán. Nếu tiểu học đi ra ngoài, một học sinh trung học được bầu làm tiểu học mới và có cùng dữ liệu như người tiền nhiệm của nó để bắt đầu phục vụ ngay lập tức. Điều đó có nghĩa rằng dữ liệu được phân bổ vẫn còn hiện diện và không bị mất.

+1

Một phân đoạn là một loạt dữ liệu của bộ sưu tập đã phân loại, một bản sao có thể tồn tại mà không có phân đoạn và phân đoạn có thể tồn tại mà không có bản sao – Sammaye

+0

@Sammaye Tôi không hiểu làm thế nào một bản sao có thể tồn tại trong môi trường được phân đoạn. (có thể bạn có nghĩa là nó không phải là một mảnh vỡ trong một môi trường không bị trầy xước?) Khi chúng ta nói "shard", chúng ta không có nghĩa là bộ bản sao là một phần của phạm vi dữ liệu lớn hơn? Về mảnh vỡ có thể tồn tại mà không có một bản sao thiết lập mặc dù tôi đồng ý. Nhưng đó không phải là trường hợp anh ấy trải qua, do đó tôi đã điều chỉnh câu trả lời của mình cho kịch bản của anh ấy liên quan đến bản sao, không phải đơn vị duy nhất. –

+0

Chính xác định nghĩa về phân đoạn không phải lúc nào cũng trong môi trường nhân bản, có vẻ như "định nghĩa" của phân đoạn đã tồn tại trong một bản sao. Tôi vẫn không chắc chắn những gì bạn có nghĩa là bởi "tổng của một tiểu học và secondaries" vì nếu đó là trường hợp sẽ không chính (shard) có dữ liệu trùng lặp. Các thứ hai là bản sao của tiểu học, phân đoạn, loại tốt, phụ thuộc vào nhân rộng có – Sammaye