在 Cassandra 的列表中搜索多个元素

Search for more than one element in a list in Cassandra

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

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

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;

谢谢

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

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

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

一般来说,在Cassandra中,应该遵循Query based modeling。

所以,

那就意味着另一个 table:

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

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