2013-02-21 81 views
1

我是Cassandra的新手,我開始設計一個簡單的用戶表進行帳戶註冊和登錄。這很簡單:在Cassandra中設計/使用用戶表並創建帳戶

行鍵:用戶名;欄目:電子郵件,名稱,密碼,鹽。
或者:
行鍵:uuid;列:用戶名,電子郵件,名稱,密碼,鹽。

對此結構簡單,我有兩個問題:

  1. 我需要的電子郵件(和用戶名)查找索引。我可以使用輔助索引或手動創建索引。我應該選擇第二個選項,因爲電子郵件/用戶名列的基數很高嗎?顯然,二級索引適用於低基數列。
  2. 更重要的是,我立即遇到了同時向表中插入密鑰的問題 - 我需要進行先讀後寫,以確保用戶名(或電子郵件)不在數據庫中。有沒有辦法避免潛在的競爭條件(例如,兩個用戶同時註冊相同的用戶名/電子郵件)?還是使用其他關係數據庫處理用戶註冊並將用戶帳戶詳細信息複製到cassandra數據庫以進行登錄和其他用途的正確解決方案?

回答

2
  1. 是的,你需要創建自己的索引,你說明理由。電子郵件和用戶名將是唯一的,因此是二級索引的不良候選者。

  2. 在任何情況下需要一個獨特的值,你必須在寫之前閱讀。由於兩個用戶同時選擇相同用戶名的情況可能很罕見(取決於您的流量),您可能只是交叉手指並希望它能正常工作。或者您也可以按照這個流程:

    • 做一個讀來檢查用戶的存在
    • 如果它不存在,寫入記錄並緊緊抓住你使用
    • 時間戳再次閱讀用戶和比較時間戳
    • 如果時間戳不正確(這意味着別人相同的流量下改寫的第一條記錄),提示用戶提供一個不同的名稱

#2中的流程將會影響第二個用戶在時間窗口內寫入相同的用戶名將會獲勝,但我認爲這是可以的,只要您告訴至少一個用戶名稱已被佔用。

相關問題