2015-02-23 50 views
1

我正在嘗試Cassandra與簡單的CRUD操作,並不明白我應該如何建模數據。在Cassandra中的CRUD

比方說,我們需要管理簡單的用戶數據:

UserId | Email | Name

我們希望能夠通過兩種UserIdEmail來獲取信息。我們還希望能夠更改用戶信息,即EmailName

這使我陷入兩難境地:通過Email查詢,我應該將其添加到PRIMARY KEY。但是如果我將它編入索引,我將無法更新它。

我應該如何更改數據模型或索引以便能夠更新數據?

從我讀過的內容來看,二手指標在卡桑德拉是邪惡的,我不應該用它們來保持卡桑德拉的表現不錯。

+0

「二手指標在卡桑德拉是邪惡的」 - 愛它! – Aaron 2015-02-23 16:57:21

回答

3

事實上,除非你絕對必須,否則你不應該使用二級索引。但是,如果您需要通過電子郵件進行搜索,則可以創建另一個包含2列的表格 - EmailUserId。主鍵將是Email,這就是你將如何搜索的UserId。把它看作傳統關係數據庫中的索引。由於Email值應該是唯一的 - 查找表方法應該比二級索引更有效。

一旦找到UserId通過Email您可以在主表的查詢中使用它。

+0

謝謝羅馬!我正在考慮同樣的解決方案,但多次請求的事實使我不確定這一點。當您需要編輯和搜索相同的數據或者它是針對特定任務的解決方法時,它是一種「慣用」方式來解決情況,我應該更好地更改任務本身(即使用CUD操作事件和聚合數據讀取)? – Dima 2015-02-23 10:47:21

+0

這種方法在卡桑德拉世界非常典型。是的,您需要撥打幾個電話,但這是一個不太典型的情況,需要付出一定的代價,以換取一般的寫入優化系統。我提到了傳統的關係數據庫索引,因爲它們使用幾乎完全相同的方法 - 將表的數據幾乎作爲另一個表存儲,並且指針指向主級表中的主表數據。 – 2015-02-24 05:54:05

+0

葉級別(錯字) – 2015-02-24 07:20:56