2010-01-26 23 views
37
  1. Bất kỳ ai biết sự khác biệt giữa sao chép lại và tái phân đoạn đỏ?
  2. Chúng được sử dụng để làm gì? Redis lưu trữ dữ liệu trong bộ nhớ, làm thế nào điều này ảnh hưởng đến sao chép/sharding?
  3. Có thể sử dụng cả hai thứ này cùng nhau không?

Cảm ơn bạn!Sao chép lại và tái phân đoạn Redis (cụm) khác biệt

Trả lời

102

Xả là gần như sao chép phản đối, mặc dù chúng là khái niệm trực giao và làm việc tốt với nhau.

Xả, còn được gọi là phân vùng, đang chia nhỏ dữ liệu theo khóa; Trong khi nhân rộng, cũng biết là phản chiếu, là sao chép tất cả dữ liệu.

Xả là hữu ích để tăng hiệu suất, giảm tải truy cập và bộ nhớ trên bất kỳ tài nguyên nào. Sao chép hữu ích cho khả năng đọc cao. Nếu bạn đọc từ nhiều bản sao, bạn cũng sẽ giảm tỷ lệ truy cập trên tất cả các tài nguyên, nhưng yêu cầu bộ nhớ cho tất cả các tài nguyên vẫn giữ nguyên. Cần lưu ý rằng, trong khi bạn có thể viết cho một nô lệ, nhân rộng chỉ là master-> slave. Vì vậy, bạn không thể mở rộng viết theo cách này.

Giả sử bạn có các bộ dữ liệu sau: [1: Apple], [2: Banana], [3: Cherry], [4: Durian] và chúng tôi có hai máy A và B. Với Sharding, chúng tôi có thể lưu trữ khóa 2,4 trên máy A; và phím 1,3 trên máy B. Với Nhân rộng, chúng tôi lưu trữ các khóa 1,2,3,4 trên máy A và 1,2,3,4 trên máy B.

Việc tích trữ thường được thực hiện bằng cách thực hiện băm nhất quán trên chìa khóa. Ví dụ trên được thực hiện với hàm băm sau đây (x) {return x% 2 == 0? A: B}.

Để kết hợp các khái niệm, Chúng tôi có thể nhân rộng từng phân đoạn. Trong các trường hợp trên, tất cả dữ liệu (2,4) của máy A có thể được sao chép trên máy C và tất cả dữ liệu (1,3) của máy B có thể được sao chép trên máy D.

Bất kỳ phím nào- giá trị lưu trữ (trong đó Redis chỉ là một ví dụ) hỗ trợ sharding, mặc dù một số chức năng cross-key sẽ không còn hoạt động. Redis hỗ trợ nhân rộng ra khỏi hộp.

+6

mát mẻ. tôi nghĩ rằng câu trả lời không chỉ giới hạn trong redis – joetsuihk

+3

Câu trả lời hay (nói chung), nhưng không thực sự trả lời câu hỏi imho :) –

+2

Tôi nghĩ câu trả lời này cung cấp một phản hồi tốt cho những gì người hỏi hỏi. Rất đơn giản, nhưng giải thích đúng. +1 –

14

Nói một cách đơn giản, sự khác biệt cơ bản giữa hai khái niệm là Sharding được sử dụng để chia tỷ lệ Ghi trong khi Nhân rộng được sử dụng để mở rộng Số lần đọc. Như Alex đã đề cập, nhân rộng cũng là một trong những giải pháp để đạt được HA.

Có, chúng thường được sử dụng cùng nhau nếu bạn xem xét cách phân đoạn có thể được nhân rộng trên các nút trong một cụm.

Đối với câu hỏi thứ ba của bạn, thay vì tùy chọn RAM-xả, bạn nên sử dụng Redis Append Only File (AOF). Chỉ với một chi phí nhỏ (về mặt tốc độ ghi), bạn nhận được độ tin cậy cao hơn cho việc viết của mình. Nó khá giống với nhật ký nhị phân mysql. 1 fsync/giây là tùy chọn được khuyến nghị sử dụng.

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