【问题标题】:Search for more than one element in a list in Cassandra在 Cassandra 的列表中搜索多个元素
【发布时间】:2015-05-28 03:46:23
【问题描述】:

我正在学习数据模型在 Cassandra 中的工作原理,你可以做什么,不可以做什么,等等。

我看到您可以拥有集合,我想知道您是否可以搜索集合中的元素。我已经看到您可以查找一个包含包含的元素,但是如果您想查找多个元素,则需要添加更多过滤器,有没有更好的方法?这是一个不好的做法吗? 这是我的表定义:

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;

谢谢

【问题讨论】:

    标签: search cassandra cql3


    【解决方案1】:

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

    通常,在 Cassandra 中,应遵循基于查询的建模。

    所以,

    这意味着另一个表:

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

    现在您可以在此表上使用 IN 查询(​​推荐)或异步查询(强烈推荐,非常快速的响应)。

    【讨论】:

      【解决方案2】:

      您可以采用 2 种不同的方法

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 1970-01-01
        • 2023-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多