2013-02-15 64 views
1

我想在卡桑德拉以下數據模型進行建模:卡桑德拉數據模型 - 多重複合列

業務 - 主鍵:BusinessId

Has Many Reviews - primary key : ReviewId 
    - Review 1 
     - Body 
     - Rating 
    - Review 2 
     - Body 
     - Rating 
    and so on 
Has an Address 
    - State 
    - City 
    - Zip 
Has Business Hours 
    - Monday Hours 
    - Tuesday Hours 
    and so on 
Has Offers 
    - Offer1 
    - Offer2 
    and so on 

我希望能夠提取使用所有這些信息一個查詢,即我想將其存儲在一個業務行中。我怎樣才能做到這一點?基本上,我有許多子實體,我想與父業務實體一起存儲。根據我對組合鍵的理解,您只能有一個組合鍵(ex)businessId:ReviewId來建模評論),但是如何將所有這些實體存儲在一行中以有效檢索一個查詢中的所有業務詳細信息。

我的第二個問題是關於更新。假設這些實體中只有一個(評論)經常更新。其他實體大多保持靜態。將評論與這個巨大的商業行分開是明智的選擇,還是我可以更新評論而無需在內存中獲取整個商業行?

+0

爲什麼你想要一個單一的查詢? – 2013-02-17 02:28:25

+0

好,儘可能少的查詢。除非必須,否則我不想將數據分散到多個列系列中。我如何在單列系列中建立許多一對多關係? – user1710833 2013-02-18 04:03:46

+0

另外,由於不同列系列中的數據存儲在不同的文件中,因此在任何可能的情況下嘗試從一個列族中檢索數據不是最佳實踐嗎?卡桑德拉如何支持一對多關係。在我的例子中,商業實體具有許多一對多的關係,並且如果將這種關係模型化的唯一方法是將它們放入單獨的列族中,這不符合建模數據的原則以有效回答您的查詢 – user1710833 2013-02-18 04:16:39

回答

2

您可以使用傳統的無模式基於Thrift的查詢模型來完成您想要做的事情。你的數據模型看起來是這樣的:

Key: ReviewID { 
    Review:1:Body = "" 
    Review:1:Rating = 1 
    Review:2:Body = "" 
    Review:2:Rating = 1 
    Address:1:City = "" 
    Address:1:State = "" 
    Address:1:Zip = "" 
    Hours:1:Monday = "" 
    Hours:1:Tuesday = "" 
    Offer:1:[fieldName] = "" 
    Offer:2:[fieldName] = "" 
} 

的架構,這將是Composite(Utf8Type, IntegerType, Utf8Type)與任何鍵類型的ReviewID匹配和任何值類型的值相匹配(可字節,如果你有不同的類型)。

+0

謝謝。這個模型適合我 – user1710833 2013-02-19 06:46:54