2015-06-03 11 views
8

Tôi cần phải mô hình tài khoản (tên, họ, email là tên người dùng, v.v.) trong cassandra cùng với mã thông báo hiện đang hoạt động.Tài khoản mô hình cho phần còn lại liên lạc cassandra

Ý tưởng ban đầu của tôi là tạo account_by_email sẽ có hàng gầy được phân đoạn bằng email có cột tĩnh và phân cụm theo access_token (và có thể TTL) và bạn luôn có thể tìm mã thông báo truy cập dựa trên email hiện tại.

Nhưng chúng tôi có yêu cầu mà khách hàng sẽ gửi sau khi đăng nhập chỉ access_token và dựa trên người dùng hiện tại đó phải được kéo từ DB.

Tôi có thể tạo thêm một bảng nơi email sẽ được phân đoạn theo access_token nhưng đường nối đó với tôi là trên cao và nhiều phân vùng. Sau đó, tôi có thể nhận email từ access_token và luôn nhận được email của người dùng.

Bất kỳ ý tưởng và cách tiếp cận nào tốt hơn, thì đường nối này là trường hợp sử dụng phổ biến nhưng tôi không thể tìm thấy bất kỳ chi tiết mô hình nào khi cassandra được sử dụng làm bộ nhớ?

Trả lời

3

Tôi có thể tạo thêm một bảng nơi email sẽ được phân đoạn bởi access_token nhưng các đường nối đó với tôi là trên cao và nhiều phân vùng.

Có gì sai với một số lượng lớn phân vùng mà nó là một bảng? Đó chắc chắn là một Cassandra chiều đúng làm việc:

create table users (
    email text primary key, 
    first_name text, 
    last_name text, 
    current_token text 
); 

create table tokens (
    auth_token text primary key, 
    valid_until timestamp, 
    email text 
); 

Vì vậy, bạn có một bảng riêng biệt cho người dùng, và tokens bảng trong đó có dấu hiệu như một chìa khóa phân vùng. Với mô hình này, bạn có thể:

  • đặt mã thông báo mới cho người dùng bằng cách cập nhật người dùng.current_token với TTL và chèn hàng mã thông báo mới vào tokens bảng.
  • nhận email người dùng bằng mã thông báo, ngay cả khi mã thông báo đã hết hạn.
  • nhận mã thông báo hiện hoạt của người dùng hiện tại.
  • có lịch sử mã thông báo đầy đủ cho người dùng (nhưng không có cách nào để chạy truy vấn hiệu quả cho loại thông tin đó, bạn có thể sử dụng Spark/SparkSQL/Hive cho điều đó).
  • tự động hết hạn mã thông báo bằng cách đặt TTL cho một cột current_token đơn lẻ.
+1

Thay vì thêm 'current_token' vào bảng người dùng có thể là một ý tưởng tốt để tạo email, tên và họ là tĩnh và có phân cụm trên mã thông báo UDT sẽ được đặt hàng DESC. Bằng cách đó lịch sử có thể được giải quyết và khi mã thông báo mới được tạo ra chỉ cần chèn là cần thiết trong cả hai bảng. Cảm ơn bạn đã trả lời, đó cũng là chuỗi suy nghĩ của tôi nhưng muốn có thêm một số ý tưởng. –

+0

@NenadBozic trong trường hợp đó, bạn có thể tách logic mã thông báo ra khỏi bảng người dùng. Có hai bảng riêng biệt cho các mã thông báo truy cập token, một với email bằng khóa phân vùng và một với mã thông báo truy cập là khóa phân vùng. Tôi một số cách cảm thấy tái sử dụng bảng như người sử dụng để giữ cho lịch sử không phải là một ý tưởng tốt. – pinkpanther

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