Cassandra 允许在 C# 中进行过滤

Posted

技术标签:

【中文标题】Cassandra 允许在 C# 中进行过滤【英文标题】:Cassandra allow filtering in C# 【发布时间】:2016-08-14 18:33:54 【问题描述】:

首先,我是 Cassandra 数据库的新手,并且已经阅读了手册。现在我正在构建一个基本页面,以将几行插入并选择到我的新数据库中。该数据库仅包含 1 个表,用户表如下所示:

接下来我使用以下代码从该表中检索数据:

        Connect();
        Row result = session.Execute("select * from users where last_name ='Jansen'").First();
        Console.WriteLine("1 2", result["first_name"], result["last_name"]);
        cluster.Shutdown();

每当我执行 select 语句时,我都会收到以下错误:

'Cassandra.InvalidQueryException' occurred in Cassandra.dll

附加信息:无法执行此查询,因为它可能涉及数据过滤,因此可能具有不可预测的性能。如果您想在性能不可预测的情况下执行此查询,请使用 ALLOW FILTERING

但是我从手册中了解到,允许过滤不应该应用于这个查询,所以基本上为什么会发生这种情况?

还有一个更重要的问题,我该如何解决这个错误?

更新:表架构如下所示, 表用户( user_id 文本主键, 名字文本, 姓氏文本);

【问题讨论】:

你能给我们表架构吗? @Will 是的,已更新 【参考方案1】:

但是我从手册中了解到,允许过滤不应该应用于这个查询,所以基本上为什么会发生这种情况?

恐怕你的理解是错误的。您想过滤非主键列。在 Cassandra 中,您需要为此添加 ALLOW FILTERING

你可以试试 select * from users where last_name ='Jansen' ALLOW FILTERING

但是请记住这相当于做 select * from users 并从结果中过滤数据。所以这是一个非常繁重的操作,会造成巨大的性能影响。

【讨论】:

哦,是的,你是对的。我错过了允许在非主键字段上过滤应用的要点。

以上是关于Cassandra 允许在 C# 中进行过滤的主要内容,如果未能解决你的问题,请参考以下文章

在 Cassandra 中使用轻量级事务 (CAS) 时,我们如何避免丢失写入?

在 Cassandra 中如何通过多个过滤器选择行?

在 Spark 中对巨大数据帧进行高效过滤

如何使用 Stratio Cassandra Lucene Index 进行小写前缀过滤

如何按 Cassandra 中的二级索引或列对结果进行排序?

cas有些请求路径不需要单点登录过滤器拦截