繁体   English   中英

在一个查询中检查cassandra中是否存在多个记录

[英]check in one query if multiple records exist in cassandra

我有一个字符串“ A”,“ B”,“ C”的列表。

我想知道如何检查所有这些字符串是否都存在于Cassandra列中。

我以前有两种方法用于关系数据库,但是最近我搬到了Cassandra,但我不知道该如何实现。

问题是我有大约100个字符串需要检查,并且我不想向数据库发送100个请求。 这不是明智的。

有趣的问题...我不知道您正在使用的架构,但是如果您的字符串在唯一的PK列中(或在查询时知道其他列值的复合PK中),则可能会发出100查询无后顾之忧。 密钥缓存将帮助您避免命中磁盘,因此您可以获得快速响应。

相反,如果您打算将其用于不属于任何PK的列,则除非您执行某种技巧,否则您将很难找到答案,并且这会受到一些性能限制和/或提高。反正代码复杂度。

例如,您可以出于上述目的构建“频率”表,在其中存储“看到”每个字符串“ A”,“ B”等的次数,并在需要时查询该表。检索信息:

SELECT frequencies FROM freq_table WHERE pk = IN ('A', 'B', 'C');

然后,您仍然需要遍历结果集并检查每条记录>0。另一种方法是在实际查询之前发出SELECT COUNT(*) ,因为您事先知道应该获得多少条记录(例如3在我的示例中),但是具有正确数量的检索记录就足够了(例如,一个计数器为零)。

当然,您需要在主表的每个插入/更新/删除操作中维护此表,从而提高解决方案的复杂性,当然,所有与IN子句和COUNT相关的警告都适用...

我可能会坚持100个查询:使用设计合理的表,它们应该不是问题,除非您没有足够的集群来解决要解决的问题。

CQL使您可以使用IN子句,例如:

SELECT first_name, last_name FROM emp WHERE empID IN (105, 107, 104);

更多信息在这里

但是这种方法可能不是最佳方法,因为它可以触发集群中所有节点的选择。

因此,非常取决于您的数据的结构。

从这个角度来看,最好运行100个独立的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM