2012-05-31 26 views
1

我有以下設置:
有CF項目和CF關鍵字。
每個項目都有零個,一個或多個關鍵字,存儲在列中。
每個關鍵字都有一個或多個項目,存儲在列中。
它看起來像這樣:Apache Cassandra綱要設計

 

    items { 
     dl { name => DELL6400, keyword:1 => computer, keyword:2 => DELL, keyword:3 => topseller } 
     hp { name => HP12345, keyword:1 => computer, keyword:2 => HP } 
     no { name => Nokia8210, keyword:1 => phone, keyword:2 => NOKIA } 
    } 

    // here I store keys of the items only, 
    // in reality I have denormalized most of items columns 
    keywords{ 
     computer { webpage => www.domain.com/computer , item:dl => dl , item:hp => hp } 
     DELL  { webpage => www.domain.com/dell ,  item:dl => dl } 
     topseller { webpage => www.domain.com/top ,  item:dl => dl } 
     HP  { webpage => www.domain.com/hp ,  item:hp => hp } 
     NOKIA  { webpage => www.domain.com/nokia , item:no => no } 
     phone  { webpage => www.domain.com/phone , item:no => no } 
    } 

,當我在關鍵字中添加新項目,我加入了「網頁」一欄,如果neccessary。
當我取出一個項目,我列刪除「項:XX」以及

的問題是如何避免「空」的關鍵字,如果我刪除諾基亞項「不」:

 

    keywords{ 
     ... 
     NOKIA  { webpage => www.domain.com/nokia } 
     phone  { webpage => www.domain.com/phone } 
    } 

我可以計算切片項目:*,但由於最終的一致性,這可能是錯誤的答案。

+0

如果我對每個項目的「網頁」列進行非規範化,那麼xx列呢? – Nick

回答

0

這很有趣,但我雖然對其他的方式 - 非規範化的 「網頁」 的東西,如:

[代碼]

keywords{ 
    computer { webpage:dl => www.domain.com/computer , item:dl => dl , 
      webpage:dl => www.domain.com/computer , item:hp => hp } 
    DELL  { webpage:dl => www.domain.com/dell ,  item:dl => dl } 
    topseller { webpage:dl => www.domain.com/top ,  item:dl => dl } 
    HP  { webpage:hp => www.domain.com/hp ,  item:hp => hp } 
    NOKIA  { webpage:no => www.domain.com/nokia , item:no => no } 
    phone  { webpage:no => www.domain.com/phone , item:no => no } 
} 

[/代碼]

在這種情況下

當我刪除項目:xx時,我刪除了網頁:xx以及行自動刪除(幽靈)如果沒有字段那裏。不過,我仍不確定這是否是一個好主意。

1

您可以添加CounterColumn(http://wiki.apache.org/cassandra/Counters)到關鍵字CF.在去除增加了關鍵字的項目,減量時加一:

keywords{ 
    computer { webpage => www.domain.com/computer , count => 2 , item:dl => dl , item:hp => hp } 
    .... 
} 

當閱讀與計數== 0一排,只把它當作刪除。如果您讀取count爲0的行,則實際上不應刪除'網頁'列,因爲可能存在併發添加操作。

+0

不幸的是,計數器列只能添加到CounterColumnType的特殊列族中。這種方法通常可以工作,但您需要在爲此目的創建的單獨計數器cf中查找計數。 – nickmbailey