2015-04-01 11 views
5

Trong cách tiếp cận sharding phía máy khách, tôi có thể tạo phân đoạn và lưu trữ một tập hợp zset trong mảnh đơn đó. Với Redis cluster, zset có thể lớn đến cỡ nào? Làm thế nào để tôi chia tỷ lệ zsets nếu là sẽ là một chỉ số của tất cả các phím tôi có trong redis.Redis cluster and zsets

+0

Bạn có thể giải thích khóa của bạn là gì không? Ngoài ra, bạn có muốn phân vùng zset của bạn trên các mảnh hoặc chỉ các phần tử được phân đoạn trên các phân đoạn. Bởi vì theo các tài liệu ở đây, ___Các chi tiết phân vùng là chìa khóa, do đó không thể phân tích tập dữ liệu bằng một khóa lớn duy nhất như một tập hợp được sắp xếp rất lớn.Kiểm tra tài liệu redis tại đây: http://redis.io/ chủ đề/phân vùng – skippy

Trả lời

5

Câu trả lời ngắn gọn: có - bạn có thể lưu trữ tất cả tên khóa của mình trong một Tập hợp được sắp xếp.

Tập hợp sắp xếp Redis có thể có tối đa 2^32 - 1 (4294967295) thành viên, mỗi thành viên được tạo thành từ một chuỗi có chiều dài tối đa 512MB và điểm số 64 bit (cùng giới hạn cho số lượng khóa trong cơ sở dữ liệu). Điều này áp dụng cho cả Redis độc lập cũng như Redis Cluster và cho phép lưu trữ ~ 2048PB trong một đơn Sorted Set :)

Trong Redis Cluster, mỗi khóa thuộc về một khe băm cụ thể. Do đó, một Tập hợp được sắp xếp, bất kể giới hạn kích thước lý thuyết ở trên, chỉ có thể lớn như phân đoạn lớn nhất của bạn (nghĩa là máy chủ Redis). Trong khi phân đoạn có thể quản lý một khe duy nhất và một vị trí có thể chứa một khóa duy nhất - tôi hầu như không đề xuất phương pháp đó do các mối lo ngại về khả năng mở rộng.

Lập chỉ mục tất cả các khóa của bạn là một thách thức thú vị - tại sao bạn làm điều đó? Và quan trọng hơn, bạn muốn chạy loại truy vấn nào đối với chỉ mục đó? Tùy thuộc vào số lượng khóa trong cơ sở dữ liệu của bạn và các yêu cầu truy vấn, có thể có các cách khác, hiệu quả hơn để đạt được điều đó.

+0

Nếu lệnh của tôi là "zadd to_be_expired 142791950 user1" thì tại đây khóa là to_be_expired và thành viên là user1. Nếu tôi thêm các thành viên khác vào zset thì chúng sẽ được lưu trên cùng một cá thể redis? Vì vậy, nếu tôi sử dụng một zset một cá thể redis duy nhất sẽ được phục vụ tất cả các quyền giao thông? – Phoenix

+0

Exactomundo (yes) –

+0

Nhưng nếu một máy chủ duy nhất bị ảnh hưởng với tất cả các yêu cầu của nhịp tim thường xuyên không thể mở rộng được. – Phoenix