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) 时,我们如何避免丢失写入?
如何使用 Stratio Cassandra Lucene Index 进行小写前缀过滤