2013-11-01 17 views
11

Tôi chỉ nhầm lẫn về sharding và Replication rằng làm thế nào họ works..According để DefinitionSự khác nhau giữa sharding Và Replication trên MongoDB

thức lây nhiễm: Một bản sao thiết lập trong MongoDB là một nhóm của các quá trình mongod rằng duy trì cùng một tập dữ liệu.

Sharding: Sharding là một phương pháp lưu trữ dữ liệu trên nhiều máy.

Theo hiểu biết của tôi nếu có dữ liệu 75 GB thì sao chép (3 máy chủ), nó sẽ lưu trữ 75GB dữ liệu trên mỗi máy chủ có nghĩa là 75GB trên Server-1, 75GB trên máy chủ-2 và 75GB trên máy chủ 3 .. (đúng tôi nếu tôi sai) .. và bằng cách sharding nó sẽ được lưu trữ dưới dạng dữ liệu 25GB trên máy chủ-1, dữ liệu 25Gb trên máy chủ-2 và dữ liệu 25GB trên máy chủ-3. (Phải không?) ... nhưng sau đó tôi gặp phải dòng này trong hướng dẫn

Mảnh lưu trữ dữ liệu. Để cung cấp tính sẵn sàng cao và dữ liệu tính nhất quán, trong một cụm sharded sản xuất, mỗi phân đoạn là một bản sao thiết

Như bản sao bộ là 75GB nhưng mảnh vỡ là 25GB thì làm sao họ có thể tương đương với ... điều này làm cho tôi nhầm lẫn rất nhiều ... Tôi nghĩ rằng tôi đang thiếu một cái gì đó tuyệt vời trong này. Xin hãy giúp tôi trong việc này.

Trả lời

26

Cho phép thử với sự tương tự này. Bạn đang chạy thư viện.

Vì bất kỳ ai đang điều hành thư viện, bạn có sách trong thư viện. Bạn lưu trữ tất cả các sách bạn có trên giá. Điều này là tốt, nhưng thư viện của bạn trở nên tốt đến nỗi đối thủ của bạn muốn đốt nó. Vì vậy, bạn quyết định tạo thêm nhiều kệ ở những nơi khác. Có một trong những kệ quan trọng nhất và bất cứ khi nào bạn thêm một số sách mới, bạn sẽ nhanh chóng thêm cùng một cuốn sách vào các giá sách khác. Bây giờ nếu đối thủ phá hủy một kệ - đây không phải là một vấn đề, bạn chỉ cần mở một cái khác và sao chép nó với những cuốn sách.

Đây là sao chép (chỉ thay thế thư viện bằng ứng dụng, kệ với máy chủ, đặt tài liệu trong bộ sưu tập và đối thủ của bạn chỉ bị lỗi HDD trên máy chủ). Nó chỉ làm cho các bản sao bổ sung của dữ liệu và nếu có gì đó sai, nó sẽ tự động chọn một bản chính khác.

Khái niệm này có thể giúp đỡ nếu bạn

  • muốn thang đọc (nhưng họ có thể tụt hậu so với tiểu học).
  • làm một số ẩn đọc mà không chạm vào máy chủ chính
  • phục vụ một số phần của dữ liệu cho một khu vực cụ thể từ một máy chủ từ đó khu vực cụ thể
  • Nhưng lý do chính đằng sau sao chép là dữ liệu sẵn có. Vì vậy, ở đây bạn là đúng: nếu bạn có 75Gb dữ liệu và tái tạo nó với 2 thứ hai - bạn sẽ nhận được 75 * 3 Gb dữ liệu.

Nhìn vào một trường hợp khác. Không có đối thủ để bạn không muốn sao chép các kệ của bạn. Nhưng ngay bây giờ bạn có một vấn đề khác. Bạn trở nên tốt đến mức một kệ là không đủ. Bạn quyết định phân phối sách của mình giữa nhiều giá. Bạn quyết định phân phối chúng giữa các kệ dựa trên tên tác giả (đây không phải là một ý tưởng hay và đọc cách select sharding key tại đây). Vì vậy, mọi thứ bắt đầu với tên ít hơn K sau đó đi đến một kệ tất cả mọi thứ đó là K và nhiều hơn đi khác.Đây là sharding.

Khái niệm này có thể giúp bạn:

  • phân phối một khối lượng công việc
  • có thể lưu dữ liệu mà nhiều hơn nữa sau đó có thể phù hợp trên một máy chủ duy nhất
  • làm map-giảm thứ
  • lưu trữ nhiều dữ liệu hơn trong ram cho các truy vấn nhanh hơn

Đây là một phần đồng rrect. Nếu bạn có 75Gb, sau đó tổng hợp trên tất cả các máy chủ sẽ vẫn còn 75 Gb, nhưng nó không nhất thiết phải được chia đều.

Nhưng đây là một vấn đề với chỉ sharding. Ngay bây giờ đối thủ của bạn xuất hiện và anh ta chỉ đến một trong những kệ của bạn và đốt nó. Tất cả dữ liệu trên giá đó đều bị mất. Vì vậy, bạn muốn nhân rộng từng phân đoạn là tốt. Về cơ bản quan điểm cho rằng

mỗi phân đoạn là một bản sao thiết

là không đúng sự thật. Nhưng nếu bạn đang làm sharding bạn phải tạo ra một bản sao cho mỗi mảnh vỡ. Bởi vì bạn càng có nhiều mảnh vỡ, lớn hơn là xác suất mà ít nhất một người sẽ chết.

+0

Wow ... Sir..great ... một lời giải thích rõ ràng và nó đã xóa nhiều sự nhầm lẫn của tôi nhưng tạo thêm một sự nhầm lẫn ... mà tôi đang viết bên dưới. Xin hãy nhìn vào nó. –

+0

Cảm ơn lời giải thích rõ ràng của bạn – Ralaad

2

Tôi viết nó như một câu trả lời nhưng thực sự là câu hỏi của nó cho câu trả lời của @Salvador Sir.

Giống như bạn đã nói rằng trong việc lưu trữ dữ liệu 75 GB "có thể được" lưu trữ dưới dạng dữ liệu 25 GB trên máy chủ-1, 25GB trên máy chủ-2 và 25Gb trên máy chủ-3. (phân phối này phụ thuộc vào khóa Sharding) ... sau đó để ngăn chặn nó khỏi mất mát, chúng tôi cũng cần phải nhân rộng phân đoạn. do đó, điều này có nghĩa là mọi máy chủ đều có phân mảnh và cũng có thể sao chép các phân đoạn khác trên máy chủ khác..máy chủ-1 sẽ có

1) Phân đoạn riêng của nó.

2) Replication của Shard có mặt trên máy chủ-2

3) Replication của Shard có mặt trên máy chủ-3

cùng đi với Server-2 và máy chủ-3. Tôi có đúng không? .. Nếu đây là trường hợp thì mỗi máy chủ lại có 75GB dữ liệu một lần nữa. Đúng hay sai?

4

Answering Saad của câu trả lời của followup:

Ngoài ra bạn có thể có mảnh và bản sao với nhau trên cùng một máy chủ, nó không được khuyến khích cách làm việc đó. Mỗi máy chủ phải có một vai trò duy nhất trong hệ thống. Nếu ví dụ bạn quyết định có 2 mảnh và sao chép nó 3 lần, bạn sẽ kết thúc với 6 máy.

Tôi biết rằng điều này nghe có vẻ quá tốn kém, nhưng bạn phải nhớ rằng đây là phần cứng hàng hóa và nếu dịch vụ bạn cung cấp đã quá tốt, bạn nghĩ về tính khả dụng cao và không phù hợp với một máy là một mức giá khá rẻ để trả (so với một chiếc máy lớn chuyên dụng).

+0

Tôi đã nhận được lời giải thích của bạn một cách hoàn hảo ... cảm ơn rất nhiều vì đã trả lời chi tiết. –

0

Vì chúng tôi muốn tạo 3 mảnh và cũng sao chép dữ liệu nên sau đây là giải pháp cho vấn đề trên.

r có phân đoạn và cũng sao chép được đặt sau đó trong trường hợp đó sự thất bại của máy chủ đó sẽ dẫn đến mất bản sao được thiết lập và phân đoạn.

Tuy nhiên bạn có thể có các mảnh vỡ 1 và bản sao bộ (bản sao của mảnh 2 và 3 mảnh) trên cùng một máy chủ nhưng điều này là không nên ..

0

sharding cũng giống như phân vùng dữ liệu. Cho phép nói rằng bạn có khoảng 3GB dữ liệu và bạn đã xác định 3 phân đoạn, Vì vậy, mỗi phân đoạn MIGHT mất 1 GB dữ liệu (Và nó thực sự phụ thuộc vào khóa phân đoạn) Tại sao cần phải có sharding? Tìm kiếm một dữ liệu cụ thể trong số 3GB phức tạp gấp 3 lần so với tìm kiếm trong 1GB dữ liệu. Vì vậy, nó gần như tương tự như phân vùng. Và sharding giúp truy cập nhanh dữ liệu.

Bây giờ đến Replica, phép nói rằng bạn có cùng 3GB dữ liệu mà không cần bất kỳ sự sao chép (Điều đó có nghĩa chỉ có một bản duy nhất của dữ liệu tồn tại) vì vậy nếu bất cứ điều gì xảy ra với máy hoặc ổ đĩa, dữ liệu của bạn đã biến mất. Vì vậy, nhân rộng đi vào hình ảnh để giải quyết vấn đề này, Cho phép nói khi bạn thiết lập DB, bạn đã cho bản sao của bạn là 3, có nghĩa là cùng một 3GB dữ liệu có sẵn 3 lần (Vì vậy, tổng kích thước có thể là 9GB chia cho mỗi 3GB bản sao). Nhân rộng giúp cho thất bại hơn.

Các vấn đề liên quan