2015-05-27 87 views
2

我学习了数据模型在卡桑德拉是如何工作的,你可以做哪些事情,哪些不是,等搜索多个元素

我已经看到了你可以有收藏和我想知道你是否可以搜索集合中的元素。我已经看到,您可以查找包含内容的一个元素,但是如果您想要查找多个元素,则需要添加更多的过滤器,有什么方法可以更好地执行此操作?这是一种不好的做法吗? 这是我的表定义:

CREATE TABLE data (
    group_id int, 
    user timeuuid, 
    friends LIST<VARCHAR>, 
    PRIMARY KEY (group_id, user) 
); 

这就是我知道我可以用它来寻找多个项目列表:

SELECT * FROM groups where friends contains 'bob' and friends contains 'Pete' ALLOW FILTERING;

谢谢

回答

3

出于性能原因,通常不建议使用二级索引。

一般来说,在Cassandra中,应该遵循基于查询的建模。

所以,

这将意味着另一个表:

CREATE TABLE friend_group_relation (
    friend VARCHAR, 
    group_id int, 
    <user if needed> 
    PRIMARY KEY ((friend), group_id) 
); 

现在你可以使用IN查询(推荐)或异步查询(强烈建议,响应速度非常快)上这张桌子。

0

您可以按照2种不同的方法

  1. 纯cassandra:用作在此定义的集合类型的次级索引documentation
  2. 您也可以使用Solr并创建一个针对solr的查询来检索您的条目。虽然这可能看起来像一个更复杂的解决方案,因为它需要使用额外的工具,它将避免在Cassandra上使用二级索引。 Cassandra上的二级索引非常昂贵,并且基于您的架构定义可能会影响您的性能。