2015-06-03 90 views
8

我需要在cassandra中爲帳戶(名字,姓氏,電子郵件地址等)建模以及當前活動的標記。休息通信建模帳戶cassandra

我最初的想法是創建account_by_email,它將通過具有靜態列的電子郵件進行分區,並通過access_token(也許是TTL)進行聚類,而且您總是可以根據當前電子郵件找到訪問令牌。

但是我們要求客戶在登錄後只發送access_token,根據它,當前用戶必須從數據庫中提取。

我可以創建一個表,其中電子郵件將由access_token進行分區,但是作爲開銷和大量分區,這些表會被分割。然後我可以從access_token得到電子郵件,並通過電子郵件總是得到用戶。

任何更好的想法和方法,它接縫,這是常見的用例,但是當cassandra被用作存儲時,我找不到任何建模細節?

回答

3

我可以創建一個表,其中電子郵件將由access_token進行分區,但是作爲開銷和大量分區接觸到我。

大量分區有什麼問題它是一張表嗎?這絕對是一個做事的正確卡桑德拉路:

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 
); 

所以,你必須爲用戶提供單獨的表,並且具有標記爲一分區鍵tokens表。在這種模式下,您可以:

  • 通過更新users.current_token與TTL並插入一個新的令牌行tokens表爲用戶設置一個新的令牌。
  • 通過令牌獲取用戶電子郵件,即使令牌已過期。
  • 獲取當前用戶的活動令牌。
  • 對用戶具有完整的令牌歷史記錄(但無法爲該類型的信息運行有效查詢,因此可以使用Spark/SparkSQL/Hive)。
  • 通過爲單個current_token列設置TTL來自動過期令牌。
+1

而不是將'current_token'添加到用戶表可能是一個好主意,使電子郵件,名字和姓氏爲靜態,並具有UDT令牌上的集羣,這將命令DESC。這種方式可以解決歷史問題,並且生成新標記時,只需要在兩個表中插入。感謝您的回答,這也是我的一系列想法,但想獲得更多的想法。 –

+0

@NenadBozic在這種情況下,您可以將令牌邏輯從用戶表中分離出來。有兩個單獨的表用於訪問令牌puproses,一個通過電子郵件作爲分區鍵,另一個以訪問令牌作爲分區鍵。我有些如何重新使用用戶保留歷史記錄表等不是一個好主意。 – pinkpanther