2011-04-11 122 views
0

嗨 剛開始對Cassandra進行調查並且有點困惑。 你可以建議架構如下:需要卡桑德拉模式

模式:email, city, items1[], items2[]

輸入:cityId, item1, item2

我需要:

select email 

where city=cityId 

and item1 is NOT in items1[] 

and item2 is NOT in items2[] 

這可能嗎?

回答

2

您可能需要詳細一點才能得到徹底的答案。

在Cassandra 0.7以後,您可以使用二級索引根據列值選擇行(即選擇city = cityId的行)。您需要通過在列元數據中設置「index_type:KEYS」在Cassandra模式中啓用此功能。

有關更多詳細信息,請參閱http://www.datastax.com/dev/blog/whats-new-cassandra-07-secondary-indexes

Cassandra不提供否定,因此您的「NOT in items1 []」條件可能需要由客戶端測試,而不是由Cassandra節點測試。你的物品1和物品2有多少可能的價值(只有少數或幾千個?)。

您可能需要設置純粹用於回答此特定類型查詢的列族,即具有基於item1和item2的某種複合關鍵字的查找表。但是,如果item1和item2有很多潛在的值,並且檢索客戶端的代價很高,那麼維護服務器端可能會很困難!