2011-12-11 105 views
2

我正在研究POC以展示卡桑德拉如何工作。我以Digg爲例。我想創建一個數據模型,讓我:卡桑德拉數據模型

1)添加鏈接 2)添加一個鏈接到用戶收藏夾列表。 3)添加預定標記,以鏈接

我想出了具有兩個列族:

  1. 鏈接

    • url是關鍵
      • ID(生成UUID)
      • 用戶(誰加了它)
      • favCount(我們沒有ERS誰收藏的鏈接)
      • UPCOUNT(沒有誰喜歡它的用戶)
      • 向下計數(沒有誰不喜歡它的用戶)
  2. UserFavs的

    • 用戶是鍵
      • id(與用戶收藏的許多ID一樣)

這工作正常需求#1和上述第2條,但是當我來到#3它變得棘手。我可以在鏈接列系列中添加標記,如'java','語言','架構'作爲具有空值的列名稱。但是查詢需要很長時間,比如說,如果我要找出所有在'java'下標記的鏈接。

任何人都可以拋出一些關於如何實現的想法。

如果我不清楚這個問題,請讓我知道。

感謝,庫馬爾

回答

3

您可以創建一個二級指標,即一列族鍵上的標籤。每行包含該特定標籤的所有鏈接。請注意,這可能會導致非常寬的行(即有很多列),每行都將存儲在單個cassandra節點上。如果它們變得非常大,你可能想要一個方案來分解它們。

參見http://www.datastax.com/docs/0.7/data_model/cfs_as_indexes

http://pkghosh.wordpress.com/2011/03/02/cassandra-secondary-index-patterns/

或者google cassandra secondary index

+0

由於DNA。有沒有辦法做到這一點,而不需要另一個列家族?不得不插入到兩個不同列家族的鏈接的缺點是,由於cassandra在多列家族級別沒有交易(我記得那樣,但我可能是錯的),可能會發生鏈接插入鏈接列家族中,但不插入標籤標籤列族中。還是我讓你完全錯了?如果是這樣,請具體說明您的建議。謝謝 – KumarM

+0

你對交易是正確的 - 這是Cassandra設計的限制。可以使用重試或撤消來應付這種情況(實際上這種情況非常罕見,特別是如果兩個插入都是在同一個消息中發送的話)。 – DNA