2011-04-11 85 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有很多潜在的值,并且检索客户端的代价很高,那么维护服务器端可能会很困难!