Cassandra 卡桑德拉:你能查询一个集合字段吗?
卡桑德拉:你能查询一个集合字段吗 比如说,如果你想在这样一个字段中保留一个朋友列表,你能沿着以下行运行一个查询:where user_id=xxx和friend=bob吗Cassandra 卡桑德拉:你能查询一个集合字段吗?,cassandra,cql,Cassandra,Cql,卡桑德拉:你能查询一个集合字段吗 比如说,如果你想在这样一个字段中保留一个朋友列表,你能沿着以下行运行一个查询:where user_id=xxx和friend=bob吗 如果一个集合不适合这样做,那么在cassandra中跟踪朋友的正确方法是什么?二级索引仍然不受支持,但正在开发中() 在您的模型中,如果您知道用户的id,您可以获取该用户,并检查应用程序端的好友列表中是否有“bob”。如果需要查询person_A是否与person_B是朋友,则可以将集合提取到其自己的表中,但此模型需要执行2次
如果一个集合不适合这样做,那么在cassandra中跟踪朋友的正确方法是什么?二级索引仍然不受支持,但正在开发中() 在您的模型中,如果您知道用户的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的查询可能因此具有不可预测的性能(对于上面的定义),即即使是选择少量记录的查询也可能表现出取决于集群中存储的数据总量的性能