cassandra:你可以查询一个收集字段吗?

时间:2013-11-19 04:42:21

标签: cassandra cql

cassandra:您可以查询收集字段吗?

如果您想在这样的字段中保留好友列表,可以按以下方式运行查询:user_id = xxx和friend ='bob'?

如果一个集合不适合这个,那么跟踪cassandra中的朋友的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

仍然不支持辅助索引,但开发正在进行中(CASSANDRA-4511

在您的模型中,如果您知道user_id,则可以获取用户并检查“bob”是否位于应用程序端的朋友列表中。如果你需要询问person_A是否是person_B的朋友,你可以将集合提取到自己的表中,但是这个模型需要进行2次查询。

CREATE TABLE friends (
  user_id text, 
  friend text, 
  PRIMARY KEY(user_id, friend)
);
CREATE INDEX idx_friends on friends (friend);

假设您有上表中的结果,如:

 user_id | friend
---------+--------
  daniel |    bob
  daniel |   jack
    jack |    bob

如果您想查找所有关注bob的人,可以使用SELECT * FROM friends WHERE friend='bob'。您实际上也可以在没有二级索引并使用ALLOW FILTERING的情况下执行此操作,但这可能会导致无法预测的性能:

  

ALLOW FILTERING选项允许显式允许(某些)需要过滤的查询。请注意,使用ALLOW FILTERING的查询可能因此具有不可预测的性能(对于上面的定义),即使选择少数记录的查询也可能表现出取决于集群中存储的数据总量的性能。

Docs for ALLOW FILTERING.