2012-04-11 31 views
6

Tôi đã tự hỏi những lợi ích của việc sử dụng ID người dùng thay vì chỉ sử dụng tên người dùng duy nhất cho các khóa.Tên người dùng hoặc ID cho các khóa trong Redis

  • dùng: USERNAME => {mật khẩu: HASH, tuổi: 45}
  • sử dụng: 0 => {username: USERNAME, mật khẩu: HASH, tuổi: 45}

Lưu ý rằng tôi muốn tìm kiếm người dùng theo tên, do đó yêu cầu tập hợp khóa-giá trị thứ hai để liên kết tên người dùng thành ID.

Cho rằng mỗi tên người dùng là duy nhất và phải là chữ số và có bất kỳ lý do cụ thể nào tại sao nó có thể có lợi khi sử dụng hệ thống ID.

Lý do chính tôi hỏi điều này là vì tôi chủ yếu sử dụng ID khi chúng giảm thời gian tra cứu trong cơ sở dữ liệu của tôi, đặc biệt khi cơ sở dữ liệu được chuẩn hóa theo một cách nào đó. Nhưng Redis không nhận được lợi ích này và vì vậy tôi tự hỏi lý do nào khác có thể là sử dụng ID người dùng thay vì chỉ tên người dùng.

Nhờ sự giúp đỡ,

Pluckerpluck

tái bút: Do cách xử lý Redis băm Tôi thực sự không chắc chắn về sự khác biệt bộ nhớ giữa hai phương pháp để thông tin về điều này có thể là tốt, mặc dù tôi có thể đi và kiểm tra bản thân mình sau này.

Trả lời

13

Không quan trọng trong trường hợp sử dụng bạn đã xác định, nhưng sử dụng id người dùng nguyên có các lợi thế khác.

Sớm hay muộn, bạn sẽ muốn tham chiếu id người dùng trong các đối tượng khác. Ví dụ: "Bạn bè của người dùng pluckerpluck". Để mô hình đó, bạn sẽ có hai lựa chọn thay thế -

friendsof:pluckerpluck -> SET{tom, dick, harry}

VS

friendsof:1 --> SET{2, 3, 4}

Cách tiếp cận cựu sử dụng một bảng Hash thường xuyên để lưu trữ các yếu tố, và sử dụng rất nhiều bộ nhớ. Cách tiếp cận thứ hai sử dụng một mảng số nguyên và cực kỳ hiệu quả bộ nhớ.

Mã hóa đặc biệt này cho các bộ số nguyên được gọi là IntSet. Bạn có thể kiểm soát hành vi của Redis bằng cách sử dụng thuộc tính set-max-intset-entries

# Sets have a special encoding in just one case: when a set is composed 
# of just strings that happens to be integers in radix 10 in the range 
# of 64 bit signed integers. 
# The following configuration setting sets the limit in the size of the 
# set in order to use this special memory saving encoding. 
set-max-intset-entries 512 
+0

Cảm ơn bạn đã chỉ ra kịch bản đó. Chỉ là một câu hỏi nhanh: Nếu tôi sử dụng ID. Sau đó tôi sẽ yêu cầu một mối quan hệ tên người dùng-id để cho phép tìm kiếm tên người dùng. Bạn có nghĩ rằng một tập hợp được sắp xếp (xếp hạng là id) sẽ là một cách tốt để làm điều đó? Hoặc thay vào đó là một Hash? – Pluckerpluck

+2

Hash là tốt hơn vì hai lý do - a) Nó sử dụng ít bộ nhớ hơn một Tập hợp Sắp xếp, và b) Không có thứ tự được xác định của người dùng, do đó khái niệm không có ý nghĩa khi sử dụng tập hợp đã sắp xếp. –

+0

Tôi sẽ sử dụng hàm băm để lập chỉ mục tên người dùng. Chúng nhỏ hơn nhiều so với zset trong bộ nhớ. Sử dụng tập hợp zset sẽ chỉ hữu ích nếu bạn phải hỗ trợ các truy vấn phạm vi trên tên ... –

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