在 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;
谢谢
您可以采用两种不同的方法
- Pure cassandra:在此处定义的集合类型上使用二级索引 documentation
- 您还可以使用 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=].
我正在学习数据模型在 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;
谢谢
您可以采用两种不同的方法
- Pure cassandra:在此处定义的集合类型上使用二级索引 documentation
- 您还可以使用 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=].