0

HI 刚开始调查 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[]

是否可以?

4

1 回答 1

2

您可能需要提供更多详细信息才能获得对此问题的彻底答案。

在 Cassandra 0.7 以后,您可以使用二级索引根据列值选择行(即选择 city=cityId 的行)。您需要通过在列元数据中设置“index_type: KEYS”来在 Cassandra 架构中启用此功能。

有关更多详细信息,请参阅http://www.datastax.com/dev/blog/whats-new-cassandra-07-secondary-indexes

Cassandra 不提供否定,因此您的“不在 items1[]”条件可能需要由客户端而不是 Cassandra 节点进行测试。您的 items1 和 items2 有多少可能的值(只有少数,还是数千?)。

您可能需要设置一个列族,纯粹是为了回答这种特定类型的查询,即带有某种基于 item1 和 item2 的复合键的查找表。但是,如果 item1 和 item2 的潜在值很多,那么维护服务器端可能会很困难,并且在客户端检索成本很高!

于 2011-04-13T21:45:35.923 回答