服务器端警告: 使用聚合查询但未使用分区键

20

在使用Cassandra的C/C++驱动程序时,有时候我会在控制台上看到出现这些信息:

1460937092.140 [WARN] (src/response.cpp:51:char*
      cass::Response::decode_warnings(char*, size_t)):
      Server-side warning: Aggregation query used without partition key

我想知道是否有人知道这是什么意思。我应该在我的代码中寻找什么,可能会导致这个错误,还是说这只是服务器端的问题,我无法控制它?

1个回答

27

该警告提示您正在执行一个使用自定义聚合函数而没有分区键的选择操作。这可能是内置聚合函数(如avg、count、min、max)之一,也可能是您自己创建的聚合函数。

一个示例:

select avg(temperature) from weather_data;

对比

select avg(temperature) from weather_data where id = 1;
第一个例子将扫描集群中的所有数据行,可能会严重影响性能。如果行数足够多,查询可能会超时。
第二个例子只会扫描单个数据分区,这将使查询保持在一个服务器上,并且是推荐的用法。

1
啊,那就是 count(*)... 在 thrift 中运行良好,只返回了行数。或者也不是这样... 但我现在看到了引起警告的语句。 - Alexis Wilke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接