CQL检查记录是否存在
CQL check if record exists
我正在学习 Cassandra,以及 CQL 和 SQL 的差异,但我注意到没有办法检查 Cassandra 是否存在记录。目前,我最好的方法是使用
SELECT primary_keys FROM TABLE WHERE primary_keys = blah,
并检查结果集是否为空。有没有更好的方法来做到这一点,或者我现在有正确的想法?
这是 Cassandra 中检查行是否存在的常用方法。如果您只关心该行是否存在,您可能不想 return 所有主键,因此您可以这样做:
SELECT count(*) FROM TABLE WHERE primary_keys = blah,
这只会 return 如果该行存在则为 1,如果不存在则为 0。
使用count
将使其遍历所有匹配的行以便能够对它们进行计数。但是你只需要检查一个,所以只要限制和 return 就行了。然后将结果的存在解释为 true
,将不存在解释为 false
。例如,
SELECT primary_keys FROM TABLE WHERE primary_keys = blah LIMIT 1
如果您使用主键来过滤行,上述所有 3 个解决方案(包括您的)都可以。而且我认为没有真正的区别。
但如果您使用的是通用方式(如索引列、分区键)来过滤行,您应该采用"Limit 1"的解决方案,这将避免无用的网络流量。
相关示例位于:
The best way to check existence of filtered rows in Cassandra? by user-defined aggregate?
我正在学习 Cassandra,以及 CQL 和 SQL 的差异,但我注意到没有办法检查 Cassandra 是否存在记录。目前,我最好的方法是使用
SELECT primary_keys FROM TABLE WHERE primary_keys = blah,
并检查结果集是否为空。有没有更好的方法来做到这一点,或者我现在有正确的想法?
这是 Cassandra 中检查行是否存在的常用方法。如果您只关心该行是否存在,您可能不想 return 所有主键,因此您可以这样做:
SELECT count(*) FROM TABLE WHERE primary_keys = blah,
这只会 return 如果该行存在则为 1,如果不存在则为 0。
使用count
将使其遍历所有匹配的行以便能够对它们进行计数。但是你只需要检查一个,所以只要限制和 return 就行了。然后将结果的存在解释为 true
,将不存在解释为 false
。例如,
SELECT primary_keys FROM TABLE WHERE primary_keys = blah LIMIT 1
如果您使用主键来过滤行,上述所有 3 个解决方案(包括您的)都可以。而且我认为没有真正的区别。
但如果您使用的是通用方式(如索引列、分区键)来过滤行,您应该采用"Limit 1"的解决方案,这将避免无用的网络流量。
相关示例位于: The best way to check existence of filtered rows in Cassandra? by user-defined aggregate?